Chương 4. Mã hóa khóa công khai
4.2. Mã hóa khóa công khai
Mã hóa khóa công khai là một dạng mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa bí mật trước đó. Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai (Public key) và khóa riêng (Private key) hay khóa bí mật (secret key).
4.2.1. Khái niệm chung
Thuật ngữ mã hóa bất đối xứng thường được dùng đồng nghĩa với mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương đương. Có những thuật toán mã bất đối xứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho việc mã hóa và giải mã) đều cần phải giữ bí mật.
Trong mật mã khóa công khai, khóa riêng cần phải được giữ bí mật trong khi khóa công khai được phổ biến công khai. Trong 2 khóa, một dùng để mã hóa và khóa còn lại dùng để giải mã.
Điều quan trọng đối với hệ thống là không thể (hoặc rất khó) tìm ra khóa bí mật nếu chỉ biết khóa công khai.
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
- Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã được.
- Tạo chữ ký số: cho phép kiểm tra một văn bản xem nó có phải đã được tạo với một khóa bí mật nào đó hay không.
- Thỏa thuận khóa: cho phép thiết lập khóa để trao đổi thông tin mật giữa hai bên.
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng do những ưu điểm nổi bật nên chúng được sử dụng nhiều.
Thuật toán mã hóa bất đối xứng sử dụng hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa riêng). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã.
Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa. Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi người biết khóa công khai đều có thể mã hóa nhưng chỉ có người biết khóa riêng (bí mật) mới có thể giải mã được.
Ta có thể mô phỏng trực quan một hệ mã hóa khóa công khai như sau: Bình muốn gửi cho An một thông tin mật mà Bình muốn cho chỉ duy nhất An có thể đọc được. Để làm được điều này, An gửi cho Bình một chiếc hộp kín có ổ khóa đã mở sẵn và giữ lại chìa khóa. Bình nhận chiếc hộp, cho vào đó một lá thư viết bình thường
và bấm khóa lại (loại khóa thông thường chỉ bấm là khóa, sau khi sập chốt là khóa lại ngay cả Bình cũng không thể mở lại được, không đọc lại hay sửa thông tin trong thư được nữa). Sau đó Bình gửi chiếc hộp cho An qua bưu điện thông thường hoặc nhờ người nào đó mang hộ. Nhân viên bưu điện hay người mang hộ dù muốn cũng không thể mở hộp để xem thư. Chỉ khi chiếc hộp đến tay An, An có chìa khóa riêng mới mở được hộp và đọc được thông tin trong thư. Trong ví dụ này, chiếc hộp với ổ khóa mở An gửi cho Bình đóng vai trò khóa công khai, chiếc chìa khóa riêng của An chính là khóa bí mật.
4.2.2. Sơ đồ tạo và chuyển giao khóa công khai
Các hệ thống mã hóa khóa công khai thông thường được thực hiện với 3 bước cơ bản. Bước thứ nhất là công đoạn sinh khóa, một cặp khóa public key và private key có quan hệ về toán học được tạo ra dựa vào các bài toán cửa lật một chiều. Bước hai là bước mã hóa sử dụng khóa công khai (public key), khóa này có thể được chuyển giao trên môi trường mở. Quá trình giải mã là bước cuối cùng sử dụng khóa riêng bí mật (private key).
Các bước thực hiện như sau:
- A chọn một số ngẫu nhiên lớn để sinh cặp khóa, khóa công khai E và khóa bí mật riêng D.
- A gửi E-khóa công khai (public key) cho B, giữ D-khóa riêng (private key) cho mình.
- Dùng khóa công khai để mã hóa, nhưng dùng khóa bí mật để giải mã.
- B nhận được khóa công khai E. B có thông điệp gốc P, dùng E mã hóa E(P) = C, C là thông điệp mã hóa gửi cho A.
- A nhận được C, dùng D giải mã D(C) = P: được lại thông điệp gốc.
Hình 4.1: Chuyển giao khóa công khai + Chỉ riêng có A (có D) mới giải mã được
+ Ai có E đều mã hóa được
+ D dùng để giải E, nhưng nếu chỉ biết E thì hầu như chắc chắn là không thể tìm được D.
4.2.3. Phong bì số dạng đơn giản
Mã đối xứng có nhiều ưu điểm nhất là tốc độ lập mã và giải mã nhanh chóng. Thế nhưng nó lại có nhược điểm căn bản là sự không an toàn khi chuyển giao khóa trong môi trường không tin cậy. Ngược lại, mã bất đối xứng đảm bảo được an toàn trong việc chuyển giao khóa mã nhưng lại có nhược điểm là tốc độ lập mã, giải mã rất chậm.
Phong bì số (Digital envelope) là một biện pháp kết hợp của hai loại mã đối xứng và bất đối xứng để chuyển giao thông điệp an toàn và tin cậy. Trong trường hợp giao dịch 2 đối tác có thể dùng sơ đồ trao đổi khóa công khai nói trên làm một phong bì số để chuyển giao khóa mã đối xứng cho đối tác của mình trong môi trường giao dịch không tin cậy (chẳng hạn trong điều kiện không thể có “mặt đối mặt”) như là dạng sau đây.
Sơ đồ chuyển giao khóa bí mật bằng phong bì số dạng đơn giản:
Bước 1: Tạo phong bì số
- A tạo khóa công khai E1 gửi cho B, giữ khóa riêng D1
- B tạo khóa riêng D2 (của B) giữ cho mình, tạo khóa công khai E2 (của B), dùng E1 (nhận từ A) mã hóa: E1(E2) = E’2 gửi E’2 cho A.
- Chỉ có A sở hữu khóa riêng D1 nên giải mã được: E1(E’2) = E2. Từ đó chỉ có A và B cùng sở hữu khóa công khai E2 (do B tạo)
Bước 2: Chuyển giao khóa đối xứng
- A tạo khóa đối xứng K dùng E2 mã hóa: E2(K) = K’ gửi cho B - B dùng D2 giải mã: D2(K’) = K
- Chỉ có A và B cùng biết khóa K, từ đó giao dịch bằng khóa đối xứng K.
Để tăng tính an toàn, A hoặc B thường xuyên có thể thay đổi khóa đối xứng và dùng phong bì số đã tạo để chuyển giao các khóa đối xứng mới cho nhau.
Tuy nhiên cần chú ý rằng phong bì số đơn giản loại này nếu sử dụng lâu thì có nhiều nguy cơ bị “tấn công của người đứng giữa”
(man-in-the-middle attack) cho nên thông thường khi đã trao đổi xong một phong bì số đơn giản hai đối tác phải tiến hành “xác thực”
lại bằng một phương pháp bổ sung nào đó.
4.2.4. Vấn đề phân phối khóa công khai
Cũng giống như các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của mã bất đối xứng. Quá trình phân phối khóa cần chống lại được tấn công của người đứng giữa.
Giả sử người thứ ba Công có thể gửi cho Bình một khóa bất kỳ và khiến Bình tin rằng đó là khóa (công khai) của An. Như vậy đồng thời Công có khả năng đọc được thông tin trao đổi giữa Bình và An.
Muốn vậy, Công sẽ gửi cho Bình khóa công khai của chính mình
(và làm cho Bình nghĩ rằng đó là khóa của An). Sau đó, Công đọc tất cả văn bản mã hóa do Bình gửi, giải mã với khóa bí mật của mình, giữ lại một bản copy đồng thời mã hóa bằng khóa công khai của An và gửi cho An. Về nguyên tắc, cả Bình và An đều không phát hiện ra sự can thiệp của người thứ ba. Các phương pháp chống lại dạng tấn công này dựa trên các chứng thực số (digital certificate) hoặc các thành phần của hạ tầng khóa công khai PKI (Public Key Infrastructure - xem chương 5).