Nếu Alice và Bob muốn trao đổi thông tin sử dụng thuật toán mã hóa đối xứng, đầu tiên họ phải thỏa thuận về một khóa k bí mật. Điều này là tốt nếu họ có một cơ hội để gặp nhau trong bí mật, hoặc nếu họ có thể giao tiếp một lần trên một kênh an toàn. Tuy nhiên nếu họ không có cơ hội này và nếu tất cả các thông tin liên lạc giữa họ được giám sát bởi kẻ thù của họ Eve? Điều đó có thể làm cho Alice và Bob trao đổi khóa bí mật theo các điều kiện không?
Phản ứng đầu tiên của hầu hết mọi người là điều đó là không thể, kể từ khi Eve thấy tất cả các mảnh thông tin mà Alice và Bob trao đổi. Dưới cái nhìn sâu sắc của Diffie và Hellman theo giả thuyết nhất định, điều đó có thể. Tìm kiếm các giải pháp hiệu quả (và chứng minh) cho vấn đề này, được gọi là mật mã khóa công khai (hoặc không đối xứng), tạo thành một trong những phần thú vị nhất của mật mã toán học. Chúng ta bắt đầu bằng việc mô tả một cách không thuộc toán học để hình dung mật mã khóa công khai. Alice mua một thiết bị an toàn với một khe hẹp ở đầu và đặt thiết bị đó ở một vị trí công cộng an toàn. Bob viết thông điệp của ông gửi Alice trên
một mảnh giấy và trượt mảnh giấy đó qua khe ở phía trên cùng của thiết bị an toàn. Bây giờ chỉ có một người có chìa khóa của thiết bị an toàn, có nghĩa là chỉ Alice, có thể lấy và đọc tin nhắn của Bob. Trong đó, khóa công khai của Alice là an toàn, các thuật toán mã hóa là quá trình đưa các thông điệp trong khe, và các thuật toán giải mã là quá trình mở cửa thiết bị an toàn với chìa khóa. Ví dụ, khe tiền gửi qua đêm tại một ngân hàng có hình thức này, mặc dù trong thực tế các khe phải được bảo vệ tốt để ngăn chặn một người nào đó chèn một cặp dài mỏng kẹp và giải nén các khoản tiền gửi của người khác.
Một tính năng hữu ích của thiết bị an toàn của chúng ta với khe cắm hệ thống mật mã, mà thiết bị này chia sẻ với hệ thống mã hóa khóa công khai, đó là Alice chỉ cần phải đặt một thiết bị an toàn tại một địa điểm công cộng, và sau đó tất cả mọi người trên thế giới có thể sử dụng thiết bị đó liên tục để gửi tin nhắn được mã hóa đến Alice. Alice không cần cung cấp một thiết bị an toàn riêng biệt cho các phóng viên của mình.Và Alice cũng không cần thiết mở thiết bị an toàn và loại bỏ các thông điệp của Bob trước khi người khác như Carl hoặc Dave sử dụng thiết bị đó để gửi cho Alice một thông điệp.
Bây giờ chúng ta đã sẵn sàng cung cấp một công thức toán học về một thuật toán mã hóa bất đối xứng. Như thường lệ, có không gian khóa K, văn bản ban đầu M và bản mã C.Tuy nhiên, một phần tử k của không gian khóa thực sự là một cặp khóa,
k = (kpriv, kpub),
được gọi là khóa riêng và khóa công khai. Với mỗi khóa công khaikpub có một hàm số mã hóa tương ứng
ekpub :M → C,
và với mỗi khóa riêngkpriv có một hàm số giải mã tương ứng
dkpriv :C → M.
Nếu cặp (kpriv, kpub) ở trong không gian khóa K, thì
dkpriv(ekpub(m)) =m với mọim∈ M.
Nếu một thuật toán mã hóa bất đối xứng được cho là an toàn, thì thuật toán đó phải khó khăn đối với Eve để tính toán hàm số giải mãdkpriv(c), ngay cả khi cô ấy biết chìa khóa công khai kpub. Chú ý rằng theo giả định này, Alice có thể gửi kpub để Bob sử dụng một kênh truyền thông không an toàn, và Bob có thể gửi lại bản mãekpub(m), mà không lo lắng rằng Eve có thể giải mã thông điệp. Để dễ dàng giải mã, Eve phải biết khóa riêngkpriv, và có lẽ Alice là người duy nhất biết thông tin đó. Các khóa riêng đôi khi được gọi là thông tin cửa sập của Alice, vì khóa riêng cung cấp một cửa sập (tức
là, một phím tắt) cho hàm số nghịch đảo của ekpub. Thực tế là các mã hóa và giải mã các khóa kpub và kpriv khác nhau làm cho các thuật toán mã hóa bất đối xứng. Diffie và Hellman đã tạo ra khái niệm này mà không tìm thấy một ứng cử viên thực tế nào cho một cặp hàm số, mặc dù họ đã đề xuất một phương pháp tương tự mà Alice và Bob có thể trao đổi một cách an toàn một mảnh ngẫu nhiên các dữ liệu.
Chương 2
Logarit rời rạc và Diffie-Hellman 2.1. Các bài toán logarit rời rạc
Các bài toán logarit rời rạc là bài toán phát sinh ở nhiều nơi, bao gồm cả phiên bản mod p mô tả trong phần này. Các nghiên cứu đầu tiên xây dựng khóa công khai, là do Diffie và Hellman[8], dựa trên bài toán logarit rời rạc trong một trường hữu hạn
Fp, nhớ lại rằng Fp là một trường với số phần tử là một số nguyên tố. Để thuận tiện, chúng ta sử dụng đồng thời kí hiệu Fp và Z/pZ cho trường này, và sử dụng kí hiệu bằng nhau cho các phần tử của Fp và ký hiệu đồng dư cho các phần tử của Z/pZ.
Cho plà một số nguyên tố (lớn). Định lý 1.4.8 nói với chúng ta rằng có một phần tử nguyên thủy g. Điều đó có nghĩa là mỗi phần tử khác không của Fp đều bằng một lũy thừa của g.Đặc biệt, gp−1 = 1 (bởi định lý Fermat). Tương tự, các phần tử
1, g, g2, g3,· · · , gp−2 ∈F∗p
là một danh sách đầy đủ của các phần tử củaF∗p.
Định nghĩa 2.1.1. Cho g là một căn nguyên thủy củaFp và hlà phần tử khác không của Fp. Bài toán logarit rời rạc, kí hiệu là (DLP) là như sau: Tìm kiếm số mũ x sao cho
gx≡h (mod p)
Sốx được gọi là logarit rời rạc của h, cơ sốg và được kí hiệu là logg(h).
Nhận xét 2.1.2. Các bài toán logarit rời rạc có một vấn đề được đặt ra, cụ thể là làm thế nào để tìm thấy một số mũ nguyên x sao cho gx ≡ h (mod p). Tuy nhiên, nếu ta tìm thấy một nghiệm, thì chúng ta cũng tìm được vô số nghiệm, bởi vì từ định lý Fermat (Định lý 1.4.2), ta có gp−1 ≡ 1 (mod p). Do đó nếu x là một nghiệm của
gx≡h (mod p)thì x+k(p−1)cũng là nghiệm với mọi giá trị của k, bởi vì
Do đó logg(h) được xác định bằng cách cộng thêm hoặc trừ đi bội củap−1. Nói cách khác, logg(h)được xác định theo môđun p−1, ta có thể đưa ra một hàm số[9]
logg :Z∗p → Z
(p−1)Z. được xác định bởi x7→x+k(p−1).
Chứng minh. Giả sử h ∈ Z∗p và x > x0 ∈ Z
(p−1)Z sao cho logg(h) = x và logg(h) = x0.
Ta có gx ≡ h (mod p) và gx0 ≡ h (mod p). Do đó gx −gx0 = gx0(gx−x0 − 1) ≡ 0 (mod p).
Cụ thể, chúng ta đề cập đến logarit rời rạc như là một số nguyên nằm giữa 0 và
p−2thỏa mãn quan hệ đồng dư gx ≡h (mod p).
Ví dụ 2.1.3. Số p= 56509là số nguyên tố, và chúng ta có thể kiểm tra g = 2 là căn nguyên thủy môđun p. Làm thế nào để tính để tính logarit rời rạc của h = 38679? Phương pháp duy nhất là tính
22,23,24,25,26,27,· · · (mod 56509)
cho đến khi tìm thấy một lũy thừa bằng38679.Điều đó là khó khăn để tính toán bằng tay, nhưng khi sử dụng máy tính, chúng ta dễ thấy logp(h) = 11235.
Nhận xét 2.1.4. Chúng ta thấy rằng logarit rời rạc có tính chất giống như logarit liên tục được xác định trên tập số thực hay tập số phức. Trong cả hai trường hợp quá trình lũy thừa là ngược. Nhưng lũy thừa môđun p luôn thay đổi với số mũ, trái với tính liên tục của logarit liên tục. Chúng ta liệt kê một vài lũy thừa đầu tiên và một vài logarit rời rạc đầu tiên cho số nguyên tố p = 941 và cơ số g = 627 (để thấy được điều đó.)
n gnmodp n gnmodp h logg(h) h logg(h)
1 627 11 878 1 0 11 429 2 732 12 21 2 183 12 835 3 697 13 934 3 469 13 279 4 395 14 316 4 366 14 666 5 182 15 522 5 356 15 825 6 253 16 767 6 652 16 732 7 543 17 58 7 483 17 337 8 760 18 608 8 549 18 181 9 374 19 111 9 938 19 43 10 189 20 904 10 539 20 722 Bảng 2.1: Lũy thừa và logarit rời rạc củag= 627môđunp= 941
Nhận xét 2.1.5. Kết luận của chúng ta về logarit rời rạc bao gồm giả thiết các cơ số
g là một căn nguyên thủy môđun p, nhưng điều này là không cần thiết. Nói chung, với
g, h∈F∗p bất kì, bài toán logarit rời rạc được phát biểu lại như sau: xác định số mũ x
thỏa mãn gx≡h (mod p), giả sử rằng tồn tại một x như vậy.
Tổng quát hơn, thay vì dùng các phần tử khác không của một trường hữu hạn
Fp và nhân chúng với nhau, nâng lên lũy thừa. Chúng ta có thể sử dụng các phần tử bất kỳ của nhóm và sử dụng quy tắc nhóm thay vì nhân.
Định nghĩa 2.1.6. Cho Glà một nhóm với quy tắc nhóm kí hiệu bởi?.Các bài toán logarit rời rạc trongG là: với hai phần tử bất kì g và htrong G, tìm số nguyênx thỏa mãn
g ? g ? g ?· · ·? g
| {z }
xlần
=h
2.2. Trao đổi khóa Diffie-Hellman
Các thuật toán trao đổi khóa Diffie-Hellman đã giải quyết được vấn đề sau. Alice và Bob muốn chia sẻ một khóa bí mật để sử dụng trong một thuật toán mã hóa đối xứng, nhưng các phương tiện truyền thông duy nhất của họ lại không an toàn. Tất cả các kênh thông tin mà họ trao đổi đều được quan sát bởi đối thủ của họ Eve. Làm thế nào để Alice và Bob có thể cho chia sẻ một khóa mà Eve không có sẵn? Thoạt nhìn có vẻ như Alice và Bob phải đối mặt với một nhiệm vụ không thể. Dưới cái nhìn sâu sắc của Diffie-Hellman thì những khó khăn của bài toán logarit rời rạc trong F∗p sẽ cung cấp một giải pháp có thể.
Bước đầu tiên là cho Alice và Bob một số nguyên tố lớnpvà một số nguyên khác không g (mod p). Alice và Bob để các giá trị của p và g là tri thức công khai. Ví dụ, họ có thể gửi các giá trị trên các trang web của họ, vì vậy Eve cũng biết chúng. Tốt nhất họ nên chọn g trongF∗p có cấp là một nguyên tố lớn.
Bước tiếp theo Alice chọn một số nguyên a bí mật mà cô không tiết lộ cho bất cứ ai, cùng một lúc đó Bob cũng chọn một số nguyên b mà ông giữ bí mật. Bob và Alice sử dụng số nguyên bí mật của họ để tính toán
A≡ga (mod p) | {z } cái mà Alice tính và B ≡gb (mod p) | {z } cái mà Bob tính .
Tiếp theo họ trao đổi các giá trị đã tính toán, Alice gửiA cho Bob và Bob gửi B cho Alice. Lưu ý rằng Eve có thể nhìn thấy các giá trị củaAvà B, khi chúng được gửi qua các kênh truyền thông không an toàn.
Cuối cùng, Bob và Alice một lần nữa sử dụng số nguyên bí mật của họ để tính toán
A0≡Ba (mod p) | {z } cái mà Alice tính và B0≡Ab (mod p) | {z } cái mà Bob tính .
Các giá trị mà họ tính toán là A0và B0 tương ứng, và giống nhau, vì
A0 ≡Ba ≡(gb)a ≡gab ≡(ga)b≡Ab≡B0 (mod p).
Giá trị chung này là chìa khóa trao đổi của họ.
Ví dụ 2.2.1. Alice và Bob chọn số nguyên tố p = 941 và căn nguyên thủy g = 627.
Alice chọn khóa bí mật a = 347 và tínhA = 390 ≡627347 (mod 941). Tương tự như vậy, Bob chọn khóa bí mậtb= 781và tính B = 691≡627781 (mod 941).Alice gửi cho Bob số390 và Bob gửi cho Alice số 691.Cả hai được truyền tải trên một kênh không an toàn, vì vậy cả hai A= 390 và B = 691 được coi là tri thức công khai. Số a = 347 và b = 781 không truyền tải và được giữ bí mật. Sau đó Alice và Bob đều có thể tính toán số
470≡627347·781≡Ab≡Ba (mod 941),
vì vậy 470 là chia sẻ bí mật của họ.
Giả sử Eve nhìn thấy toàn bộ trao đổi này. Cô ấy có thể tái thiết lại chia sẻ bí mật của Alice và Bob nếu cô ấy có thể giải quyết một trong các quan hệ đồng dư
627a ≡390 (mod 941) và 627b ≡691 (mod 941),
kể từ đó cô sẽ biết một trong số mũ bí mật của họ. Theo như được biết, đây là cách duy nhất để Eve tìm thấy giá trị chia sẻ bí mật mà không cần hỗ trợ của Alice hoặc Bob.
Tất nhiên, ví dụ của chúng ta sử dụng con số đó là quá nhỏ không đủ khả năng để bảo mật thực sự, vì Eve mất rất ít thời gian tính toán trên máy tính để kiểm tra tất cả các lũy thừa có thể của 627 môđun 941. Alice và Bob nên chọn một số nguyên tố p có khoảng 1000 bit (tức là, p≈ 21000) và phần tử g có cấp là số nguyên tố bằng khoảng p/2. Khi đó, Eve sẽ phải đối mặt với một nhiệm vụ thực sự khó khăn.
Eve biết các giá trị của Avà B, vì vậy cô ấy biết giá trị củaga vàgb. Cô ấy cũng biết giá trị củag vàp, vì vậy nếu cô ấy có thể giải quyết DLP, sau đó cô ấy có thể tìm
a và b, thì Eve có thể dễ dàng tính toán giá trị bí mật mà Alice và Bob đã chia sẻ. Có vẻ như chia sẻ của Alice và Bob được bảo mật với điều kiện là Eve không thể giải quyết được DLP, nhưng điều này là không hoàn toàn chính xác. Phương pháp tìm giá trị được chia sẻ của Alice và Bob là giải quyết bài toán DLP, nhưng đó không phải là vấn đề mà Eve cần phải giải quyết. Sự an toàn của khóa chia sẻ của Alice và Bob dựa trên những vấn đề khó khăn sau đây.
Định nghĩa 2.2.2. Cho plà một số nguyên tố vàg là một số nguyên. Bài toán Diffie- Hellman (kí hiệu là DHP) là như sau: tính giá trị của gab (mod p) từ các giá trị đã biết ga (mod p) và gb (mod p).
Rõ ràng là các bài toán DHP là không có khó khăn hơn so với bài toán DLP. Nếu Eve có thể giải quyết bài toán DLP, thì cô có thể tính toán số mũ bí mật a và b của Alice và Bob từ các giá trị A =ga và B =gb, và cô ấy dễ dàng tính được khóa chia sẻ của họ gab. Giả sử Eve có một thuật toán hiệu quả giải quyết DHP. Cô ấy có thể sử dụng thuật toán đó để cũng giải quyết hiệu quả DLP không? Câu trả lời là không biết.
2.3. Hệ thống mật mã khóa công khai ElGamal
Mặc dù thuật toán trao đổi khóa Diffie-Hellman cung cấp một phương pháp chia sẻ công khai khóa bí mật một cách ngẫu nhiên, phương pháp này không đạt được mục tiêu đầy đủ của một hệ thống mật mã khóa công khai, kể từ khi một hệ thống mật mã cho phép trao đổi thông tin đầy đủ, không chỉ là một chuỗi ngẫu nhiên của các bit. Hệ thống mã hóa khóa công khai đầu tiên là RSA của Rivest, Shamir và Adleman [10], được công khai năm 1978. Tuy nhiên, mặc dù RSA là lịch sử đầu tiên, là sự phát triển tự nhiên nhất của một hệ thống mật mã khóa công khai theo Diffie-Hellman [11], là một hệ thống được mô tả bởi Taher ElGamal năm 1985 [12]. Các thuật toán mã hóa khóa công khai ElGamal dựa trên các vấn đề log rời rạc và liên quan chặt chẽ với trao đổi khóa Diffie-Hellman từ phần 2.2. Trong phần này chúng ta mô tả phiên bản của Elgamal PKC dựa trên bài toán logarit rời rạc choF∗p, nhưng các công trình xây dựng thường sử dụng DLP trong nhóm bất kỳ.
Các Elgamal PKC là ví dụ đầu tiên về một hệ thống mật mã khóa công khai. Alice bắt đầu bằng việc công khai thông tin bao gồm một khóa công khai và một thuật