Bài viết được lấy từ https://truongphuoc.wordpress.com/2024/07/28/blockchain-20-1-trao-doi-khoa-an-toan-voi-diffie-hellman/
Lời dẫn
Xin chào các bạn, trong bài viết trước mình đã hoàn thiện về cả toán học lẫn thực tế cách sử dụng RSA, ECC và ECDSA. Bẵng một thời gian xem lại, cảm thấy thật tiếc khi không tìm hiểu thêm về Diffie-Hellman (DH).
Trong bài viết này chúng ta sẽ cùng tìm hiểu về thuật toán DH để xem cách trao đổi khóa an toàn nhé.
Công thức số mũ
Khi chúng ta đi học, chắc hẳn phải học số mũ, trong đó có công thức nhân số mũ như sau:
Ví dụ
Xong, thế là hết phần này, quá đơn giản phải không nào
Tính chất giao hoán trong phép nhân
Phép nhân có tính chất giao hoán như sau
Ví dụ:
Xong, cực kỳ đơn giản. Kết hợp với công thức số mũ ta có như sau:
Kết hợp với module
Trong số học module công thức trên được viết lại như sau như sau:
Trao đổi khóa Diffie-Hellman
Thuật toán
Cho một số nguyên tố p, căn nguyên thủy g. An và Bình muốn chia sẻ một khóa bí mật chung nào đó, hai người sẽ làm như sau:
- Chọn khóa
- An chọn một khóa bí mật của mình là a
- Bình chọn một khóa bí mật của mình là b
- Trao đổi khóa:
- An tính gửi cho Bình
- Bình tính gửi cho An.
- Tính toán khóa
- An tính
- Bình tính
- Như đã nêu ở trên thì suy ra . Đo đó An và Bình cùng chia sẻ một bí mật chung là s.
- Do bài toán khó logarit rời rạc, nên người thứ ba là Công rất khó tìm ra
- khi biết
- khi biết
- khi biết
- khi biết
Sau khi đã chia sẻ khóa bí mật chung, An và Bình có thể sử dụng nó để làm key cho một thuật toán mã hóa, ví dụ AES.
Nếu bạn chịu khó đọc bài những kiến thức cơ bản cần thiết trong mật mã học thì phỏng cũng không khó lắm phải không. Nếu chưa thì các bạn tìm lại đọc nha. Tiếp theo hãy cùng đến một ví dụ cụ thể nào.
Ví dụ
Chọn là một số nguyên tố, là căn nguyên thủy của . Ta tính toán như sau
- Chọn khóa
- An chọn khóa bí mật là
- Bình chọn khóa bí mật là
- Trao đổi khóa
- An tính gửi cho Bình
- Bình tính gửi cho An
- Tính toán khóa
- An tính
- Bình tính
Thế là An và Bình đã có chung một khóa bí mật là 2. Họ có thể sử dụng khóa này để làm khóa cho một thuật toán đối xứng nào đó, ví dụ AES. Hay họ có thể tính toán khóa cho AES dựa vào số này.
Ví dụ số quá nhỏ, có thể thể thống nhất số này nhân với để được khóa lớn hơn.
Ưu - nhược điểm của Diffie-Hellman
Ưu:
- Nhanh: với p và g biết trước, chỉ cần lựa chọn số ngẫu nhiên a và b thôi.
- Bảo mật cao: dựa vào bài toán khó logarit rời rạc.
Nhược:
- Có thể bị tấn công man-in-the-middle.
Kết luận
Sử dụng Diffie-Hellman để trao đổi khóa an toàn rất phổ biến trong cuộc sống hiện nay nhờ sự nhanh, bảo mật của nó.
Link bài viết gốc https://truongphuoc.wordpress.com/2024/07/28/blockchain-20-1-trao-doi-khoa-an-toan-voi-diffie-hellman/