Phương pháp trao đổi khóa Diffie – Hellman

Một phần của tài liệu an toàn bảo mật thông tin (Trang 74)

Phương pháp trao đổi khóa Diffie người gởi và người nhận mà không c Phương pháp này dùng hàm một chi ý nghĩa về mặt mã hóa giống như

Trước tiên Alice và Bob sẽ

g nhỏ hơnp và là primitive root

g không cần giữ bí mật. Sau đ chọn một số b và giữ bí mật số b

và gửi gb mod p cho Bob. Trên cơ

(gb)a mod p = g

Bob tính:

(ga)b mod p = g

Do đó Alice và Bob có chung giá tr cho phép mã hóa đối xứng.

Như vậy, kẻ phá mã Trudy có th Trudy không thể dùng cách:

gagb mod p = g

Muốn tính được gab mod p a hay b theo công thức:

a = dlogg, p

là không khả thi do tính ph

tính được gab mod p.Hay nói cách khác, khóa dùng chung và Bob.

Tuy nhiên, thuật toán Diffie

Trong phương pháp tấn công này, Trudy điệp của Alice và Bob, giả mạo các thông nghĩ là nhận dữ liệu từ Bob và ngư

Do đó Trudy có thể thiết lậ

mod p với Bob. Khi Alice gửi dữ lại bằng gbt mod p và gửi cho Bob. Nh xem trộm được dữ liệụ

Hình 4-7. Tấn công k

Alice

ga mod gt mod

c này do mã hóa đối xứng đảm trách) mà là bảo đả có A và B biết khóa KS.

i khóa Diffie – Hellman

i khóa Diffie-Hellman dùng để thiết lập một khóa bí m mà không cần dùng đến mã hóa công khai như ở

t chiều làm hàm logarith rời rạc. Diffie-Hellman ng như RSẠ

ẽ thống nhất sử dụng chung một số nguyên tố của p (nghĩa là phép toán gx mod p khả nghị

t. Sau đó Alice chọn một số a và giữ bí mật số a nàỵ Bob c

b. Tiếp theo Alice tính và gửi ga mod p cho Bob, Bob tính cho Bob. Trên cơ sở đó Alice tính:

mod p = gab mod p

mod p = gab mod p

ó Alice và Bob có chung giá trị gab mod p. Giá trị này có thể dùng làm khóa phá mã Trudy có thể có được g, p, gagb . Muốn tính đượ

mod p = ga+b mod p ≠ gab mod p

, Trudy phải tính được a hoặc được b. Tuy nhiên vi

g, p ga hay b = dlogg, p gb

ức tạp của phép logarith rời rạc. Vậy Trudy không th Hay nói cách khác, khóa dùng chung được trao đổi bí m

t toán Diffie-Hellman lại thất bại đối với cách tấn công k n công này, Trudy đứng giữa Alice và Bob. Trudy ch o các thông điệp mà Alice và Bob không hay bi Bob và ngược lạị

ập khóa Diffie-Hellman gat mod p với Alice và khóa ữ liệu, Trudy giải mã bằng khóa gat mod p, sau

i cho Bob. Như vậy Alice và Bob không hay biết còn Trudy thì

n công kẻ-ñứng-giữa với phương pháp Diffie--Hellman

Bob Trudy mod p mod p gt mod p gb mod p ảm tính bí mật t khóa bí mật giữa ở phần 4.6.2. Hellman không có ố p và một số ịch). Hai số p nàỵ Bob cũng cho Bob, Bob tính

dùng làm khóa ợc gab mod p,

. Tuy nhiên việc tính

y Trudy không thể nào i bí mật giữa Alice n công kẻ-đứng-giữạ a Alice và Bob. Trudy chặn các thông p mà Alice và Bob không hay biết. Alice vẫn i Alice và khóa gbt

, sau đó mã hóa t còn Trudy thì

Hellman

75 Để an toàn, quá trình thiết lập khóa Diffie-Hellman vẫn phải được mã hóa bằng một khóa công khaị Lúc này một câu hỏi được đặt ra là nếu đã được bảo vệ bằng khóa công khai rồi, thì có thể chọn khóa đối xứng bất kỳ, cần gì chọn khóa Diffie-Hellman? Tuy nhiên có một số trường hợp, khi mà cách thức tấn công kẻ-đứng-giữa không thể thực hiện được, thì phương thức Diffie-Hellman tỏ ra rất hữu dụng.

Trong mô hình trong phần 4.6.2, giả sử Trudy ghi nhận lại hết tất cả các thông điệp giữa Alice và Bob. Sau này nếu Trudy phát hiện ra được khóa riêng KRAKRB của Alice và Bob, Trudy có thể khôi phục lại được khóa đối xứng KS. Và từ đó Trudy có thể khôi phục lại các bản rõ mà được mã hóa bằng khóa KS nàỵ Bây giờ ta xét mô hình sau dùng Diffie-Hellman được bảo vệ bằng mã hóa khóa công khai:

Hình 4-8. Bảo vệ khóa Diffie-Hellman bằng khóa công khai

Trong mô hình trên, dù cho sau này Trudy phát hiện ra được khóa riêng KRAKRB

của Alice và Bob, và Trudy tìm ra được ga mod p gb mod p. Tuy vậy, Trudy cũng không thể nào khôi phục lại được khóa bí mật gab mod p. Và do đó không thể khôi phục lại các bản rõ giữa Alice và Bob. Đây chính là ý nghĩa của phương pháp Diffie-Hellman.

4.8 Câu hỏi ôn tập

1. Nêu điểm yếu của mã hóa đối xứng.

2. Hàm một chiều là gì? Cho ví dụ về hàm một chiềụ

3. Trong số học modulo n, khi nào thì một số có số nghịch đảo của phép nhân? 4. Logarit rời rạc khác logarit liên tục ở những điểm nàỏ

5. Để kiểm tra tính nguyên tố của một số nguyên, thuật toán Miller-Rabin có thể cho kết quả sai, vậy tại sao người ta vẫn sử dụng thuật toán nàỷ

6. Tại sao trong thuật toán RSA cần dùng phương pháp bình phương liên tiếp để tính lũy thừa modulỏ

7. Nêu nguyên tắc của mã hóa khóa công khaỉ Tại sao trong mã hóa khóa công khai không cần dùng đến kênh an toàn để truyền khóả

8. Trong mã hóa khóa công khai, khóa riêng và khóa công khai có phải là 2 khóa tùy ý, không liên quan? Nếu có liên quan, tại sao không thể tính khóa riêng từ khóa công khaỉ

9. Ngoài vấn đề truyền khóa, mã hóa khóa công khai còn ưu điểm hơn mã hóa đối xứng ở điểm nàỏ

10. Nêu nhược điểm của mã hóa khóa công khaị

11. Diffie-Hellman không phải là một phương pháp mã hóa khóa công khaị Vậy Diffie-Hellman là gì?

A B

CA

E(E(ga mod p||T , KRA), KUB)

CB

76

4.9 Bài tập

1. Cho a = 13, p = 20. Tìm giá trị nghịch đảo của a trong phép modulo p dùng thuật toán Euclid mở rộng (xem phụ lục 2).

2. Cho n = 17, lập bảng tương tự như Bảng 4-1. Liệt kê các primitive root của n. 3. Áp dụng thuật toán bình phương liên tiếp tính 721mod 13

4. Cho p = 5, q= 11, e = 7. Tính khóa riêng (d, N) trong phương pháp RSẠ

5. Thực hiện mã hóa và giải mã bằng phương pháp RSA với p = 3, q = 11, e = 7, M = 5 theo hai trường hợp mã hóa bảo mật và mã hóa chứng thực.

6. Alice chọn p = 7, q = 11, e = 17, Bob chọn p = 11, q = 13, e = 11: ạ Tính khóa riêng KRA của Alice và KRB của Bob

b. Alice muốn gởi cho Bob bản tin M = 9 vừa áp dụng chứng thực và bảo mật như ở sơ đồ 4-3. Hãy thực hiện quá trình mã hóa và giải mã.

7. Xét thuật toán Miller-Rabin (xem phụ lục 2). Với số 37, cho biết kết quả của thuật toán Miller-Rabin trong các trường hợp sau đây của a: 9, 17, 28.

8. Dùng thuật toán Miller-Rabin, kiểm tra tính nguyên tố của số 169.

4.10 Bài tập thực hành

1. Viết chương trình thể hiện thuật toán Euclid mở rộng áp dụng cho các số nguyên nhỏ 32 bít.

2. Viết chương trình sinh một số nguyên tố nhỏ (32 bít) dùng thuật toán Miller-Rabin. 3. Viết chương trình thể hiện thuật toán bình phương liên tiếp tính ax mod p trên số

nguyên nhỏ

4. Viết chương trình mã hóa file bằng thuật toán RSA trên số nguyên nhỏ.

5. Viết chương trình thực hiện các phép toán +, -, *, mod trên các số nguyên lớn (kích thước tối đa một số nguyên là 1024 bít). Gợi ý: mỗi số nguyên được biểu diễn bằng một mảng các phần tử 32 bít.

6. Áp dụng bài 5, thực hiện lại các bài 1, 2, 3, 4 áp dụng trên số nguyên lớn.

7. Tìm hiểu về thuật toán RSA trong môi trường lập trình .NET (namespace System.SecuritỵCryptography). Viết chương trình mã hóa và giải mã một file trên máy tính dùng phương pháp RSA trong thư viện mã hóa của .NET. Khóa công khai và khóa riêng được lưu trong 1 file text dưới dạng chữ số thập lục phân.

78

CHƯƠNG 5. MÃ CHNG THC THÔNG ĐIP, HÀM BĂM

Để tìm hiểu về tính chứng thực của mã hóa đối xứng và mã hóa khóa công khai, trong chương 2, 3 và 4, chúng ta đã giả sử rằng một thông điệp có ý nghĩa thì phải có một cấu trúc nào đó. Chẳng hạn như đối với ngôn ngữ, một câu văn chỉ có ý nghĩa khi chữ cái được kết hợp với nhau theo các quy tắc từ vựng và ngữ pháp của một ngôn ngữ. Do đó nếu Trudy can thiệp sửa đổi bản mã thì bản giải mã sẽ là một chuỗi bít vô nghĩa, và người nhận biết được là dữ liệu đã bị thay đổị Ta có hai kết luận sau về tính chứng thực của mã hóa đối xứng và mã hóa khóa công khai:

- KL1: Trudy không thể tìm ra một bản mã CT, sao cho khi Bob giải mã bằng khóa

KAB (hay khóa KUAvới mã khóa công khai) cho ra bản rõ PT có ý nghĩa theo ý muốn của Trudỵ

- KL2: Hơn nữa, Trudy cũng không thể tìm ra một bản mã CT sao cho PT là một bản tin có ý nghĩa, mà chỉ là một dãy bít lộn xộn, không cấu trúc.

Tuy nhiên trong thực tế có nhiều loại dữ liệu mà các bít gần như là ngẫu nhiên. Chẳng hạn như dữ liệu hình ảnh bitmap hay âm thanh. Ngoài ra đối với máy tính, việc nhận dạng ra thế nào là dãy bít có ý nghĩa là một công việc khó khăn. Do đó trong thực tế, chúng ta hầu như chấp nhận rằng bất cứ dãy bít nào cũng có thể có ý nghĩạ Lúc này các phương pháp mã hóa đối xứng và mã hóa công khai không thể bảo đảm tính chứng thực.

Để giải quyết vấn đề này, mã hóa phải vận dụng khái niệm redundancy của lĩnh vực truyền số liệu, tức thêm vào một ít dữ liệu (checksum) để biến bản tin, từ dãy bít ngẫu nhiên, trở thành dãy bít có cấu trúc.

Trong quá trình truyền số liệu, do tác động nhiễu của môi trường, bản tin lúc đến đích có thể bị sai lệch so với bản tin ban đầu trước khi truyền. Để phát hiện nhiễu, một đoạn bít ngắn gọi là checksum được tính toán từ dãy bít của bản tin, và gắn vào sau bản tin để tạo redundancy, và được truyền cùng với bản tin đến đích.

Chúng ta hãy xem xét lại một phương pháp kiểm lỗi checksum phổ biến là CRC (cyclic redundancy check). Trong phương pháp này, một đoạn bít ngắn được chọn làm số chia, lấy dãy bít của thông điệp chia cho số chia này, phần dư còn lại được gọi là giá trị checksum CRC. Phép chia này khác phép chia thường ở chỗ dùng phép XOR thay cho phép trừ. Giả sử thông điệp là 10101011 và số chia là 10011, quá trình tính như sau:

10101011 10011 10011 1011 11001 10011 10101 10011 110 ⊕ ⊕ ⊕ bản tin checksum

79

Một phần của tài liệu an toàn bảo mật thông tin (Trang 74)

Tải bản đầy đủ (PDF)

(181 trang)