Khi bàn về mật mã, một câu hỏi thường bị bỏ qua là: hai người chưa từng gặp nhau, chỉ trao đổi qua kênh ai cũng nghe được, làm sao thống nhất một bí mật mà kẻ nghe lén không thể suy ra? Năm 1976, Whitfield Diffie và Martin Hellman, dựa trên gợi ý về hàm một chiều của Ralph Merkle, công bố lời giải, mở đường cho mật mã khóa công khai.
Ẩn dụ pha màu
Ví dụ kinh điển: Alice và Bob thống nhất công khai một màu sơn nền, chẳng hạn vàng. Mỗi người tự pha thêm một màu bí mật của riêng mình rồi gửi hỗn hợp cho đối phương qua kênh công khai. Ai nhìn thấy hỗn hợp cũng không tách ngược lại được màu bí mật ban đầu, vì trộn màu là việc dễ làm nhưng khó làm ngược. Nhận được hỗn hợp của nhau, mỗi người trộn thêm màu bí mật của mình vào, cả hai ra cùng một màu cuối, còn kẻ nghe lén chỉ thấy hai hỗn hợp trung gian thì không thể tự pha ra được.
Toán học phía sau ẩn dụ
Về mặt toán học, việc trộn màu được thay bằng phép lũy thừa theo modulo. Hai bên thống nhất công khai một số nguyên tố p và một phần tử sinh g. Ví dụ nhỏ: p = 23, g = 5. Alice chọn số bí mật a = 6, tính A = 5^6 mod 23 = 8 rồi gửi 8 cho Bob. Bob chọn b = 15, tính B = 5^15 mod 23 = 19 rồi gửi 19 cho Alice. Alice lấy số Bob gửi và nâng lên lũy thừa với số mũ bí mật của mình: 19^6 mod 23 = 2. Bob làm tương tự: 8^15 mod 23 = 2. Cả hai ra cùng một số 2, mà chưa từng gửi số bí mật a hay b cho nhau.
Vì sao không đảo ngược được
Kẻ nghe lén thấy p, g, A = 8, B = 19, nhưng để suy ra a hay b, họ phải giải bài toán logarit rời rạc: tìm x sao cho g^x mod p = A. Với p = 23 nhỏ xíu thì dò tay cũng ra, nhưng khi p là số nguyên tố vài trăm chữ số, chưa có thuật toán cổ điển nào giải được trong thời gian hợp lý. Đây chính là nền tảng an toàn của toàn bộ giao thức, cũng là chủ đề quen thuộc trong các bài viết về công nghệ mật mã hiện đại.
Tấn công đứng giữa và bài toán xác thực
Diffie-Hellman gốc có một lỗ hổng: nó không xác thực danh tính. Nếu Mallory đứng giữa đường truyền, chặn A và B rồi thay bằng giá trị của mình, kẻ này có thể tạo hai bí mật riêng biệt, một với Alice và một với Bob, trong khi cả hai vẫn tưởng đang nói chuyện trực tiếp với nhau. Đây là kiểu tấn công người đứng giữa. Vì vậy các giao thức thực tế như TLS luôn ghép Diffie-Hellman với chữ ký số hoặc chứng chỉ để xác thực từng bên. Mô hình này gọi là trao đổi khóa có xác thực, tiêu biểu là giao thức Station-to-Station. Một điểm cộng khác: nếu mỗi phiên chọn a, b mới hoàn toàn (ephemeral), thì dù khóa riêng dài hạn của server có bị lộ về sau, các phiên cũ vẫn an toàn, tính chất gọi là bảo mật hướng về trước (forward secrecy). Đó là lý do gần 50 năm sau, ý tưởng năm 1976 vẫn là xương sống của an ninh mạng hiện đại, từ HTTPS đến các ứng dụng nhắn tin mã hóa đầu cuối.





