Trao đổi khóa Diffie-Hellman¶
Estimated time to read: 4 minutes
May 14, 2021 · ~5 minutes
Updates
August 19, 2022:
- Sửa lỗi hiển thị ở phần Man in the middle attack
- Sửa lỗi hiển thị ở phần Man in the middle attack
Sự cần thiết của việc trao đổi khóa trong Public-key Cryptosystems¶
Câu hỏi
Với Sysmetric Cryptosystems:
- Làm sao để có bảo mật thông tin liên lạc giữa 2 hay nhiều người dùng?
- Với một thông điệp (thông điệp ở đây không mang nghĩa là những tài liệu trên giấy,...) đến từ một người nào đó, làm thế nào ta có thể xác định được tính toàn vẹn của thông điệp từ lúc họ vận chuyển thông điệp đến lúc thông điệp đến nơi của ta?
Vào năm 1976, Whitfield Diffie và Martin Hellman từ Đại học Stanford đã đạt được một bước đột phá bằng cách đưa ra một phương pháp giải quyết cả hai vấn đề và hoàn toàn khác với tất cả các cách tiếp cận trước đây đối với mật mã. Đó là phương pháp trao đổi khóa Diffie-Hellman1
Vấn đề về trao đổi khóa trong các ngữ cảnh nhất định¶
Logarithm Based Cryptography¶
Mô tả phiên trao đổi khóa¶
Với hai người Alice và Bob, vấn đề của Public-key Cryptosystems là mỗi người đều có 1 private key riêng, làm cách nào để cả 2 người cùng sở hữu 1 shared secret key?
Đối với việc dùng Diffie-Hellman trên nhóm cycle và dùng Logarithm Based Cryptography để trao đổi khóa, ta có các bước sau:
- Alice có khóa bí mật là \(a\), Bob có khóa bí mật là \(b\). Số \(p\) là công khai và là 1 số nguyên tố lớn, g là số được tạo ra từ \(Z_p^* = \{1, 2, ..., p-1\}; \ \forall a \in Z_p^* \ \exists i: a = g^i \ mod \ p\)
- Alice tính: \(g^a \ mod \ p\) và gửi cho Bob.
- Bob tính: \(g^b \ mod \ p\) và gửi cho Alice.
- Alice nhận được \(g^b \ mod \ p\) và tính \(k = {g^b}^a \ mod \ p = g^{ab} \ mod \ p\)
- Bob nhận được \(g^a \ mod \ p\) và tính \(k = {g^a}^b \ mod \ p = g^{ab} \ mod \ p\)
- Lúc này, cả Alice và Bob đều có chung 1 số k (chính là shared key của cả hai người).
Man in the middle attack¶
Man in the middle attack2 được hiểu nôm na là có một người attacker ở giữa Alice và Bob nhằm lấy giá trị của \(g^a\) và \(g^b\) ở bước 2 và bước 3 bên trên và đồng thời tạo ra một giá trị ảo \(m\) và thực hiện tính toán \(g^m \ mod \ p\) để gửi cho Alice và Bob.
Lúc này:
- Ở bước 4: Alice nhận được \(g^m \ mod \ p\)
- Ở bước 5: Bob nhận được \(g^m \ mod \ p\)
- Lúc này, Alice sẽ có shared key
chung
là \(g^{am} \ mod \ p\) và Bob sẽ có shared keychung
là \(g^{bm} \ mod \ p\) và hai người đã khácshared key
hay nói cách khác thì họ đã bị sai khóa bí mật chung và thông tin họ trao đổi không còn toàn vẹn nữa.
Elliptic Curve Cryptosystem¶
Mô tả phiên trao đổi khóa¶
Đôi với việc dùng nhóm Curve, việc trao đổi khóa diễn ra như sau:
- Thông tin public: Elliptic curve và điểm \(G = (x, y)\) nằm trên curve.
- Alice có khóa bí mật là \(a\), Bob có khóa bí mật là \(b\).
- Alice tính: \(Q_A = a.G\) và gửi cho Bob.
- Bob tính: \(Q_B = b.G\) và gửi cho Alice.
- Alice nhận được \(Q_B = b.G\) và tính \(k = a.Q_B = abG\)
- Bob nhận được \(Q_A = a.G\) và tính \(k = b.Q_A = baG = abG\)
- Lúc này, cả Alice và Bob đều có chung 1 số k (chính là shared key của cả hai người).