Professional Documents
Culture Documents
Giao thức thỏa thuận khóa Diffie - Hellman
Giao thức thỏa thuận khóa Diffie - Hellman
Trao đổi khóa Diffie-Hellman bị cáo buộc rằng nó đã được phát minh ra
một cách độc lập một vài năm trước đó trong Trụ sở Truyền Thông Chính phủ
Anh (GCHQ) bởi Malcolm J. Williamson). Vào năm 2002, Hellman đã đưa ra
thuật toán được gọi chung là trao đổi khóa Diffie–Hellman–Merkle công nhận sự
đóng góp của cả Ralph Merkle, người đã phát minh ra thuật toán mã hóa công
khai.
Trước thời kỳ này, hầu hết các thuật toán mật mã hóa hiện đại đều là những thuật
toán khóa đối xứng (symmetric key algorithms), trong đó cả người gửi và người
nhận phải dùng chung một khóa, tức khóa dùng trong thuật toán mật mã, và cả hai
người đều phải giữ bí mật về khóa này. Tất cả các máy điện cơ dùng trong thế
chiến II, kể cả mã Caesar và mã Atbash, và về bản chất mà nói, kể cả hầu hết các
hệ thống mã được dùng trong suốt quá trình lịch sử nữa đều thuộc về loại này.
Đương nhiên, khóa của một mã chính là sách mã (codebook), và là cái cũng phải
được phân phối và giữ gìn một cách bí mật tương tự.
Do nhu cầu an ninh, khóa cho mỗi một hệ thống như vậy nhất thiết phải
được trao đổi giữa các bên giao thông liên lạc bằng một phương thức an toàn nào
đấy, trước khi họ sử dụng hệ thống (thuật ngữ thường được dùng là 'thông qua
một kênh an toàn'), ví dụ như bằng việc sử dụng một người đưa thư đáng tin cậy
với một cặp tài liệu được khóa vào cổ tay bằng một cặp khóa tay, hoặc bằng cuộc
gặp gỡ mặt đối mặt, hay bằng một con chim bồ câu đưa thư trung thành... Vấn đề
này chưa bao giờ được xem là dễ thực hiện, và nó nhanh chóng trở nên một việc
gần như không thể quản lý được khi số lượng người tham gia tăng lên, hay khi
người ta không còn các kênh an toàn để trao đổi khóa nữa, hoặc lúc họ phải liên
tục thay đổi các chìa khóa-một thói quen nên thực hiện trong khi làm việc với mật
mã. Cụ thể là mỗi một cặp truyền thông cần phải có một khóa riêng nếu, theo như
thiết kế của hệ thống mật mã, không một người thứ ba nào, kể cả khi người ấy là
một người dùng, được phép giải mã các thông điệp. Một hệ thống thuộc loại này
được gọi là một hệ thống dùng chìa khóa mật, hoặc một hệ thống mật mã hóa
dùng khóa đối xứng. Hệ thống trao đổi khóa Diffie-Hellman (cùng những phiên
bản được nâng cấp kế tiếp hay các biến thể của nó) tạo điều kiện cho các hoạt
động này trong các hệ thống trở nên dễ dàng hơn rất nhiều, đồng thời cũng an
toàn hơn, hơn tất cả những gì có thể làm trước đây.
Mặc dù, bản thân thuật toán là một giao thức chọn khóa nặc danh (không
cần thông qua xác thực) nhưng nó đã cung cấp ra một cơ sở cho các giao thức xác
thực khác nhau khá hoàn hảo.
Phương thức tiếp nối ngay sau Diffie – Hellman là RSA, một thể hiện của
mã khóa công khai sử dụng thuật toán bất đối xứng.
II. Giao thức thỏa thuận khóa Diffie-Hellman
1. Khái niệm thỏa thuận khóa
Thoả thuận khoá: việc trao đổi khoá giữa các chủ thể trong một cộng đồng
nào đó có thể đươc ̣ thiết lập một cách tự do giữa bất cứ hai người nào khi có nhu
cầu trao đổi thông tin.
- Trao đổi khóa Diffie – Hellman là thiết lập một khóa chia sẻ bí mật được sử
dụng cho thông tin liên lạc bí mật bằng cách trao đổi dữ liệu thông qua mạng công
cộng. Đây mà một trong số nhiều phương thức dùng để trao đổi khóa trong ngành
mật mã học.
- Phương pháp này không cần có sự can thiệp của một TA ( cơ quan ủy thác)
làm nhiệm vụ điều hành hoặc phân phối khóa.
- Phương pháp này cho phép những người sử dụng có thể cùng nhau tạo ra
một khóa bí mật thông qua một kênh truyền thông không đảm bảo về độ bảo mật.
Khóa bí mật này sẽ được dùng để người sử dụng trao đổi thông tin với nhau.
2.1. Cách thiết lập giao thức thỏa thuận khóa Diffie - Hellman.
Tình huống:
+ Alice và Bob muốn chia sẻ thông tin bảo mật cho nhau nhưng phương tiện
truyền thông duy nhất của họ là không an toàn. Tất cả các thông tin mà họ trao đổi
được quan sát bởi Eve kẻ thù của họ.
+ Làm thế nào để Alice và Bob chia sẻ thông tin bảo mật cho nhau mà không làm
cho Eve biết được?
+ Thoạt nhìn ta thấy Alice và Bob phải đối mặt với một nhiệm vụ không thể.
Giải quyết tình huống trên:
+ Alice và Bob đồng ý dùng chung về một nhóm cyclic hữu hạn G và một yếu tố
tạo ra g trong G. (Điều này thường được thực hiện rất lâu trước khi phần còn lại
của giao thức, g được giả định là được biết đến bởi tất cả các kẻ tấn công)
+ Khi Alice và Bob muốn truyền thông tin bảo mật cho nhau có thể cùng thực
hiện theo giao thức sau để trao đổi:
a
Alice chọn ngẫu nhiên số a A (0 ≤ a A ≤ p−2) bí mật, tính b A =g mod p và gửi b A
A
cho Bob .
a
Tương tự, Bob chọn ngẫu nhiên sô á B (0 ≤ a B ≤ p−2) bí mật, tính b B=g mod p B
a
Bob tính được khóa: K B=b A mod p B
Alice Bob
Bí mật Công khai Tính toán Gửi Tính toán Công khai Bí mật
aA p,g → aB
aA p,g,bA b A =g
aA
bA → p,g aB
mod p
aA ← bB b B=g
aB
p , g , bB aB
mod p
aA,KA p , g , b A , bB p , g , b A , bB aB , K B
Chú ý là chỉ có a A , aB , K A , K B là được giữ bí mật. Tất cả các giá trị còn lại
như p , g , b A , bB đều công khai. Một khi Alice và Bob tính được khóa bí mật dùng
chung, họ có thể dùng nó làm khóa mã hóa chỉ họ biết để gửi các thông điệp qua
cùng kênh giao tiếp mở. Đương nhiên, để đảm bảo an toàn, các giá trị a A , aB và p
cần được lấy lớn hơn, g không cần lấy giá trị quá lớn. Thực tế thì g thường lấy giá
trị 2 hoặc 5.
Đầu tiên, Alice và Bob đã thống nhất về màu sơn chung (màu vàng), Alice
và Bob trao đổi màu sắc đã được trộn của họ. Cuối cùng, điều này tạo ra một màu
bí mật giống hệt nhau mà kẻ khác không có khả năng tạo được ra giống vậy. Kể từ
đây, Alice và Bob sẽ trao đổi bằng cách mã hóa và giải mã sử dụng khóa bí mật
đó (thể hiện bằng màu sơn bí mật cuối cùng).
Hình 1: Sơ đồ giao thức thỏa thuận khóa Diffie – Hellman
Ví dụ:
Bob chọn một giá trị ngẫu nhiên bất kỳ a B=5 và bí mật a B Bob tính
5
b B=5 mod 37=17
Sau đó Bob gửi b B=17 cho Alice.
Bob nhận được b A =18 và tính khóa chung: K B=18 mod 37=15, và bí mật K B
4
Alice nhận được b B=17 và tính khóa chung: K A =17 mod 37=15, và bí mật
7
KA
Thỏa thuận khóa Diffie-Hellman không chỉ giới hạn để thương lượng một khóa
dùng chung giữa hai bên. Bất cứ một số lượng người dùng nào cũng có thể tham
gia vào một thỏa thuận như thế bằng cách lặp các giao thức thỏa thuận và trao đổi
dữ liệu trung gian. Ví dụ, Alice, Bob và Carol có thể tham gia vào một thỏa thuận
Diffie-Hellman như sau (với tất cả phép toán đều lấy mod p):
• Bắt đầu với một khóa “rỗng” chỉ gồm có g, khóa bí mật được tạo ra bằng
cách tăng giá trị hiện tại theo số mũ bí mật của những bên tham gia một lần, theo
thứ tự bất kỳ.
• Bất kỳ giá trị trung gian nào (số mũ sẽ lên tới tích N-1 số mũ, trong đó N là
số bên tham gia vào nhóm) đều có thể bị công khai, nhưng giá trị cuối cùng (khi
cả N số mũ đều được dùng) sẽ tạo thành khóa bí mật dùng chung và do đó phải
tránh bị công khai. Vì vậy, mỗi người dùng cần thu về bản sao của khóa mật bằng
cách sử dụng khóa mật của chính họ lúc cuối cùng (mặt khác, không có cách nào
để bên tham gia cuối cùng trao khóa cuối cho bên nhận của nó, vì bên này phải
giữ bí mật khóa)
Những nguyên tắc này mở ra rất nhiều tùy chọn để sắp xếp các bên tham
gia đóng góp tạo khóa. Phương pháp đơn giản và rõ ràng nhất là sắp N bên tham
gia vào một vòng tròn và có N khóa quay quanh vòng tròn này, cho tới khi mỗi
khóa đều đã được N bên đóng góp xây dựng (kết thúc với chính bên sở hữu nó) và
mỗi bên tham gia đều đã đóng góp vào N khóa (kết thúc với khóa của họ). Tuy
nhiên, điều này yêu cầu mỗi bên phải tính N số mũ thành phần.
Bằng cách chọn một thứ tự tối ưu hơn, phụ thuộc vào thực tế là các khóa có
thể trùng lặp, chúng ta có thể giảm khối lượng tính toán số mũ của mỗi bên là
log 2 n+1 sử dụng phương pháp Chia để trị, được đề xuất sau đây đối với 8 bên:
5. Các bên từ E qua H đồng thời thực hiện tính toán sử dụng gabcd làm điểm
khởi đầu.
Sau khi hoàn thành thuật toán, tất cả các bên tham gia đều đã sở hữu khóa mật
g
a A aB a C a D a E a F a G a H
, nhưng mỗi bên chỉ phải tính toán 4 lần số mũ thành phần, thay vì
phải tính 8 lần như trong sắp xếp vòng tròn đơn giản.
2.4. Các đặc điểm đặc trưng của giao thức thảo thuận khóa Diffie - Hellman.
a) Giao thức là an toàn đối với việc tấn công thụ động.
Giao thức là an toàn đối với việc tấn công thụ động, nghĩa là môṭ người thứ
ba dù biết b A và b B sẽ khó mà biết được K A ,B
Xét ví dụ:
Alice và Bob thống nhất với nhau chọn số nguyên tố p = 17 và g = 2.
Alice chọn một giá trị ngẫu nhiên bất kỳ a A=6 và bí mật a A.
Bob chọn một giá trị ngẫu nhiên bất kỳ a B=9 và bí mật a B
Bob nhận được b A =13 và tính khóa chung: K B=13 mod 17=13, và bí mật K B
9
Alice nhận được b B=2 và tính khóa chung: K A =2 mod 17=13 , và bí mật K A
6
Eve là một kẻ nghe trộm – cô ta theo dõi những gì Alice và Bob gửi cho
nhau nhưng không thể thay đổi nội dung các cuộc liên lạc.
Eve muốn tái thiết lại những thông tin bảo mật mà Alice và Bob chia sẻ cho nhau.
Eve sẽ phải đối mặt với một nhiệm vụ thực sự khó khăn.
Dưới đây là các biểu đồ giúp xác định ai biết được giá trị nào. (Eve là một kẻ
nghe trộm.)
Ta thấy Eve rơi vào tình thế tiến thoái lưỡng nam. Cô ấy biết được giá trị của
b A , bB
vì vậy cô ấy biết được ga , ga . Cô ấy cũng biết những giá trị của g và p, nhưng lại
A B
Đây chính là bài toán Diffie - Hellman mà khi biết b A , bB tìm K A ,B bài toán
này tương đương với bài toán phá mã ElGammal.
b) Giao thức là không an toàn đối với việc tấn công chủ động.
Giao thức là không an toàn đối với việc tấn công chủ động bằng cách đánh
tráo giữa đường. Nghĩa là một người thứ ba Eve có thể đánh tráo các thông tin
trao đổi giữa Alice và Bob.
Chẳng hạn, Eve thay ga mà Alice định gửi cho Bob bởi ga ' và thay ga mà
A A B
Bob định gửi cho Alice bởi ga ' . Như vậy, sau khi thực hiện giao thức trao đổi
B
2.5. Giao thức thỏa thuận khóa Diffie - Hellman có chứng chỉ xác nhận.
Mỗi người dùng A có một danh tính ID(A) và môṭ sơ đồ chữ ký với thuật
toán ký sigA và thuật toán kiểm thử verA. TA cũng có một vai trò xác nhận,
nhưng không phải xác nhận bất kỳ thông tin nào liên quan đến việc tạo khoá mật
mã của người dùng (dù là khoá bí mật hay khoá công khai), mà chỉ là xác nhận
một thông tin ít quan hệ khác như thuật toán kiểm thử chữ ký của người dùng.
Còn bản thân các thông tin liên quan đêń việc tạo khoá mật mã thì các người dùng
sẽ trao đôỉ trực tiếp với nhau. TA cũng có một sơ đồ chữ ký của mình, gồm một
thuật toán ký sigTA và một thuật toán kiểm thử công khai verTA. Chứng chỉ mà
TA cấp cho mỗi người A sẽ là:
C ( A )=( ID ( A ) , ver A , sigTA , ( ID ( A ) , ver A ) )
Rõ ràng trong chứng chỉ đó TA không xác nhận bất kỳ điều gì liên quan đến việc
tạo khoá của A cả.
Cơ chế giao thức thỏa thuận khóa Diffie - Hellman có chứng chỉ xác nhận
Việc trao đổi khoá giữa hai người dùng A và B đươc ̣ thực hiêṇ theo giao thức sau
đây:
a
A chọn ngẫu nhiên số a A (0 ≤ a A ≤ p−2), tính b A =g mod p và gửi b A cho B.
A
a
B chọn ngẫu nhiên số a B (0 ≤ a B ≤ p−2), tính b B=g mod p, tính tiếp B
a
A tính K=bB mod p dùng ver B để kiểm thử y B , dùng ver TA để kiểm thử C(B),
A
Nếu tất cả các bước đó được thực hiện và các phép kiểm thử đều cho kết quả
đúng đắn thì giao thức được kết thúc, và cả A và B đều có được khoá chung K. Do
việc dùng các thuật toán kiểm thử nên A biết chắc giá trị b B là của B và B biết
chắc giá trị b A cuả A, loại trừ khả năng một người C naò khác đánh tráo các giá trị
đó giữa đường.