Ma thuật giao thức ba lần

Jan 09 2023
Hoặc cách Alice mở hộp của cô ấy khi nó ở trong hộp bị khóa của Bob.
Trong quá trình nghiên cứu gần đây của mình, tôi đã bắt gặp một giao thức mật mã thú vị có tên: “Giao thức ba lần”, ban đầu được phát triển bởi Adi Shamir. Trong bài đăng này, tôi sẽ chứng minh hình thức cơ bản của nó (có những phát triển và phát triển hơn nữa cho giao thức này, vui lòng kiểm tra liên kết Wikipedia ở trên).

Trong quá trình nghiên cứu gần đây của mình, tôi đã bắt gặp một giao thức mật mã thú vị có tên: “ Giao thức ba lần ”, ban đầu được phát triển bởi Adi Shamir.

Trong bài đăng này, tôi sẽ chứng minh hình thức cơ bản của nó (có những phát triển và phát triển hơn nữa cho giao thức này, vui lòng kiểm tra liên kết Wikipedia ở trên).

Để triển khai thuật toán, tôi sử dụng Python cùng với Google Colaboratory tại đây .

Một con rận muốn gửi một bí mật cho Bob thông qua một kênh liên lạc công cộng mà không cần trao đổi trước các khóa mật mã.
Bí mật được chia sẻ có thể là chính thông điệp bí mật hoặc khóa bí mật được chia sẻ hoặc mật khẩu được sử dụng trong cơ chế mã hóa để mã hóa dữ liệu trong phiên liên lạc sau này.
Ở đây tôi sử dụng bí mật được chia sẻ làm mật khẩu dùng chung, sau đó được sử dụng để mã hóa và giải mã một tin nhắn bí mật.

Hãy tưởng tượng tình huống sau:
Alice và Bob là những học sinh ngồi trong cùng một lớp học. Đây là lớp học của sinh viên từ các khoa khác nhau (nơi mà nhiều người trong số họ không biết nhau).
Alice muốn chuyển một tin nhắn bí mật cho Bob, người ngồi ở phía bên kia của lớp học.
Alice viết tin nhắn bí mật của mình vào một tờ giấy ghi chú, đặt tờ giấy vào một chiếc hộp nhỏ và khóa chiếc hộp bằng ổ khóa của cô ấy.
Cô ấy viết “Gửi Bob” trên hộp và yêu cầu các học sinh khác chuyển hộp cho Bob.
Khi Bob nhận được chiếc hộp, anh ấy thêm ổ khóa của mình vào chiếc hộp, viết “Gửi Alice” và yêu cầu học sinh chuyển chiếc hộp lại cho Alice.
Sau đó, Alice nhận chiếc hộp, tháo ổ khóa của cô ấy, viết lên hộp “Gửi Bob” và yêu cầu học sinh chuyền lại chiếc hộp.
Tại thời điểm này, khi Bob nhận được chiếc hộp, anh ấy tháo ổ khóa, mở hộp và đọc thông điệp bí mật.

Lưu ý rằng đây là một giao thức không được xác thực . Không người gửi cũng như người trả lời nào tin tưởng vào tính xác thực của bên kia.
Trong ví dụ của chúng tôi, chiếc hộp có thể đến tay Mallory, người cũng ở trong lớp.
Vì mọi người không biết nhau trong lớp này, Mallory, người ngồi cách xa Alice và đã nhận được chiếc hộp, có thể khóa chiếc hộp của mình vào chiếc hộp và gửi lại cho Alice.
Alice không thể biết ai đã nhận chiếc hộp và cô ấy cũng không thực sự biết ai là chủ nhân của chiếc khóa móc khác trên chiếc hộp. Alice tin rằng cô ấy đang giao tiếp với Bob, trong khi cô ấy thực sự đang giao tiếp với Mallory.

Trong kịch bản lớp học, Bob đặt ổ khóa của mình trên hộp gần Alice và Alice có thể tháo ổ khóa của mình trong khi ổ khóa của Bob bị khóa.
Trong giao thức ba lần, chúng tôi đặt mã hóa thứ hai (mã hóa = ổ khóa bị khóa) lên trên mã hóa đầu tiên.
Như thể Bob đặt chiếc hộp đã khóa của Alice vào trong chiếc hộp của anh ấy và khóa chiếc hộp của anh ấy bằng ổ khóa.
Để giao thức này hoạt động, phải có khả năng xóa mã hóa đầu tiên (của Alice) sau khi mã hóa thứ hai (của Bob) được thực hiện, điều đó có nghĩa là Alice mở khóa hộp của mình khi nó ở trong hộp bị khóa của Bob.

Mát lạnh!

ka : Khóa mã hóa của Alice
dka : Khóa giải mã của Alice
kb : Khóa mã hóa của Bob
m : Tin nhắn
E : Mã hóa
D : Giải mã

D(dka, E(kb, E(ka, m))) = E(kb, m)

Điều này có thể thực hiện được với mã hóa giao hoán, là mã hóa không phụ thuộc vào thứ tự.

E(ka, E(kb, m)) = E(kb, E(ka, m))

Và sau đó:

D(dka, E(kb, E(ka, m))) = D(dka, E(ka, E(kb, m))) = E(kb, m)

Giao thức Three-Pass sử dụng nghịch đảo phép nhân mô-đun để loại bỏ các khóa.

Hãy thực hiện các bước của thuật toán:

Khóa bí mật dùng chung: ks
Khóa của Alice: ka , ka⁻¹ Khóa
của Bob: kb , kb⁻¹

  1. Quyết định độ dài bit của các số (ví dụ: 128 bit).
  2. Mọi người đều đồng ý lấy số nguyên tố p làm khóa công khai
  3. Mỗi người dùng chọn một số ngẫu nhiên k , đó là số nguyên tố cùng nhau của p-1

4. Mỗi người dùng tính toán k⁻¹ , phép nhân nghịch đảo của k⁻¹ của họ

k⁻¹k ≅ 1(mod p-1)

Phím của Alice: ka, ka⁻¹ Phím
của Bob: kb kb⁻¹

5. Alice chọn ks khóa bí mật dùng chung để chia sẻ với Bob

6. Alice mã hóa một tin nhắn bằng bí mật chung:

7. Alice gửi thông tin sau cho Bob:

8. Bob gửi thông tin sau cho Alice:

9. Alice gửi thông tin sau cho Bob:

10. Bob tính như sau:

11. Xác minh rằng khóa bí mật dùng chung của Bob và Alice giống hệt nhau:

khẳng định ks' == ks

12. Bob giải mã tin nhắn được mã hóa của Alice bằng khóa bí mật dùng chung mà anh ấy đã tính toán:

m'= D(ks', c)

13. Xác minh rằng tin nhắn ban đầu và tin nhắn nhận được giống hệt nhau:

khẳng định m' == m

Quá trình thực thi mã của thuật toán trong sổ tay colab tạo ra kết quả sau (bạn sẽ nhận được các số được tạo khác nhau):