You are on page 1of 2

Diffie–Hellman

Diffie–Hellman được công bố đầu tiên bởi Whitfield Diffie và Martin


Hellman vào năm 1976; Hình thành và trao đổi khóa chung bí mật trên một kênh
truyền tin không an toàn; dựa trên bài toán về logarrit rời rạc.
Trao đổi thông tin bí mật với tốc độ nhanh; Mật mã khóa đối xứng.
Thiết lập và trao đổi khoá: Các thực thể tham gia phải thống nhất khóa đối
xứng; Quá trình thống nhất khóa phải đảm bảo tính bí mật, tính toàn vẹn.
Độ an toàn của giao thức thỏa thuận khóa Diffie Hellman dựa trên độ khó
của bài toán logarit rời rạc, điều này phụ thuộc vào việc lựa chọn bộ tham số dùng
cho  giao thức. Bộ tham số (p, q, g) được lựa chọn (hoặc tạo ra) để sử dụng cần
chống được các tấn công theo các phương pháp giải bài toán logarit.
Cơ bản, giao thức thỏa thuận khóa Diffie hellman được thực hiện như sau:
Giả sử hai bên liên lạc A và B muốn thực hiện trao đổi khóa để mã hóa thông tin
truyền trên kênh công cộng, trước tiên A và B sẽ thống nhất sử dụng chung một bộ
tham số miền (p, q, g) trong đó p, q là hai số nguyên tố với q|p –
1 và g ∈ GF*(p) thỏa mãn ord(g) = q,  g được gọi là phần tử sinh. Bộ tham số
miền (p, q, g) không cần giữ bí mật (được công khai). Sau đó A chọn một số a và
giữ bí mật số a này. B cũng chọn một số b và giữ bí mật số b.
Tiếp theo
A tính và gửi Xa = ga  mod p cho B,
B tính và gửi Yb = gb mod p cho A.
Trên cơ sở đó
A tính: (Yb)a mod p = (gb)a mod p = gba mod p =Ks
B tính: (Xa)b   mod p = (ga)b mod p = gab  mod p =Ks
Do đó A và B có chung giá trị Ks = gab mod p. Giá trị này có thể dùng để dẫn
xuất ra các khóa phiên bí mật sử dụng cho các thuật toán mã hóa khóa đối xứng. Giao
thức thỏa thuận khóa Diffie Hellman nguyên thủy được thể hiện như sau:
A Gửi B
Bí mật Công khai Tính Tính Công khai Bí mật
a p, q, g p, q, g b
a p, q, g, Xa Xa = ga  mod p Xa p, q, g b
a p, q, g, Xa  Yb Yb = gb mod p p, q, g, Yb b
a, Ks p, q, g, Xa (Yb)a mod p = Ks (Xa)b   mod p = Ks p, q, g, Yb b, Ks

Lưu ý: chỉ có a, b và gab = gba mod p là được giữ bí mật. Tất cả các giá trị
khác như p, g, ga mod p và gb mod p được truyền công khai. Sau khi Alice và Bob
tính được bí mật chung, cả hai có thể sử dụng nó làm khóa mã hóa chung chỉ có
hai người biết để gửi dữ liệu trên kênh truyền thông mở.
Ví dụ:
1. Alice và Bob thỏa thuận sử dụng chung một số nguyên tố p=23 và căn nguyên
thủy g=5 (phần tử sinh).
2. Alice chọn một số nguyên bí mật a=6, và gửi cho Bob giá trị Xa = ga mod p
Xa = 56 mod 23 = 8
3. Bob chọn một số nguyên bí mật b=15, và gửi cho Alice giá trị Yb = gb mod p
Yb = 515 mod 23 = 19
4. Alice tính Ks = (Yb)a mod p
Ks = 196 mod 23 = (515)6 mod 23 = 2
5. Bob tính Ks = (Xa)b   mod p
Ks = 815 mod 23 = 2
6. Như vậy Alice và Bob cùng chia sẻ bí mật chung là số 2.
Mô tả giao thức
Thiết lập khóa
1. Alice và Bob thỏa thuận sử dụng chung một nhóm cyclic hữu hạn G và
một phần tử sinh g của G. Phần tử sinh g công khai với tất cả mọi người,
kể cả kẻ tấn công. Dưới đây chúng ta giả sử nhóm G là nhóm nhân.
2. Alice chọn một số tự nhiên ngẫu nhiên a và gửi ga mod p cho Bob.
3. Bob chọn một số tự nhiên ngẫu nhiên b và gửi gb mod p cho Alice.
4. Alice tính (gb)a mod p. hay (Yb)a mod p=Ks
5. Bob tính (ga)b mod p. hay (Xa)b   mod p=Ks
Vì giá trị (gb)a và (ga)b là bằng nhau (do nhóm G có tính kết hợp), cả Alice và
Bob đều tính được giá trị gab và có thể sử dụng nó cho khóa bí mật chung.
Mã hóa
Thông điệp m trước khi được gửi đi bởi Alice (hoặc Bob) sẽ được mã hóa
thành mgab.
Giải mã
Để giải mã thông điệp m, gửi dưới dạng mgab, Bob (hoặc Alice) phải tính được giá
trị (gab)-1. Giá trị (gab)-1 được tính như sau:
Vì Bob biết |G|, b, và ga, mặt khác theo định lý Lagrange trong lý thuyết nhóm ta
có x|G| = 1 với mọi x thuộc G,
nên Bob tính được (ga)|G|-b  = ga(|G|-b) = ga|G|-ab  = ga|G|g-ab = (g|G|)ag-ab=1ag-ab=g-ab=(gab)-1.
Việc giải mã bây giờ trở nên dễ dàng: Bob sử dụng (gab)-1 đã tính và phục hồi
thông điệp nguyên thủy bằng cách tính: mgab(gab)-1  = m(1) = m.

You might also like