Các thuật toán mã hóa khóa đối xứng có một nhược điểm là nếu hai người dùng muốn trao đổi thơng tin bí mật cần phải trao đổi khóa bí mật trước đó. Khóa bí mật này cần phải được trao đổi theo một cách thức an tồn, khơng phải bằng các phương thức thường dùng để liên lạc trong mơi trường mở vì dễ bị lộ. Điều này khó thực hiện và nói chung là khơng thể đảm bảo bí mật, nhất là trong trường hợp muốn trao đổi thơng tin với nhiều đối tác thì thực tế là khơng thực hiện được.
Vì vậy mã hóa khóa cơng khai (hay khóa bất đối xứng) được đưa ra như là một giải pháp thay thế. Thực ra mã hóa bất đối xứng khơng thay thế hồn tồn mã hóa đối xứng mà người ta sử dụng đồng thời cả hai loại để bổ sung, hỗ trợ cho nhau.
Năm 1874, William Stanley Jevons xuất bản một cuốn sách mô tả mối quan hệ giữa các hàm một chiều (one way function) với mật mã học, đồng thời đi sâu vào bài toán phân tích ra thừa số nguyên tố (sử dụng trong thuật toán RSA). Tháng 7 năm 1996, một nhà nghiên cứu đã bình luận về cuốn sách trên như sau: Trong cuốn The Principles of Science: A Treatise on Logic and Scientific Method được xuất bản năm 1890, William S. Jevons đã phát hiện nhiều phép toán rất dễ thực hiện theo một chiều nhưng rất khó theo chiều ngược lại, điều đó chứng tỏ nhiều tḥt tốn mã hóa thực hiện rất dễ dàng trong khi giải mã thì rất khó khăn. Chẳng hạn tác giả nêu ra bài tốn: ta có thể nhân để tìm tích số của các số ngun tố nhưng
ngược lại, muốn phân tích một số tự nhiên khá lớn ra các thừa số nguyên tố thì là điều khơng dễ dàng (tḥt tốn Euclide).
Đây chính là nguyên tắc cơ bản của tḥt tốn mã hóa khóa cơng khai RSA (tuy rằng tác giả khơng phải là người phát minh ra mã hóa khóa cơng khai). Tḥt toán mã hóa khóa công khai được thiết kế lần đầu tiên bởi James H. Ellis, Clifford Cocks và Malcolm Williamson tại Anh vào đầu thập kỷ 70 của thế kỷ trước. Thuật toán đó sau này được phát triển và biết đến dưới tên thuật toán Diffie-Hellman và là một trường hợp đặc biệt của thuật toán RSA, tuy nhiên những thông tin này chỉ được tiết lộ ra vào năm 1997.
Thuật toán mã hóa khóa công khai có cơ sở hoàn chỉnh đầu tiên được Ron Rivest, Adi Shamir và Leonard Adleman (Gọi tắt là RSA) khởi xướng vào năm 1977 tại Học viện Kỹ thuật Massachusett - MIT (Massachusett Institute of Technology). Công trình này được công bố vào năm 1978 và thuật toán được đặt tên là thuật toán RSA - theo 3 chữ cái đầu của các đồng tác giả. RSA sử dụng phép toán lũy thừa theo modulo (với modulo được tính bằng tích số của 2 số nguyên tố lớn) để mã hóa và giải mã cũng như tạo chữ ký số. Độ an toàn của thuật toán được đảm bảo vì khơng tồn tại kỹ thuật hiệu quả để phân tích một số rất lớn thành thừa số nguyên tố.
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ệ tố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).
Đ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ã hóa khóa công khai đòi hỏi khối lượng tính tốn nhiều hơn các kỹ tḥ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. Tḥt tố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 q 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 thơng tin để gửi nhưng chỉ có người biết khóa riêng (bí mật) mới có thể giải mã được thông tin đó.
Khi sử dụng phương pháp mã hóa bất đối xứng, người gửi tin A sử dụng khóa công khai để mã hóa thông điệp và gửi cho người nhận B. B sử dụng khóa bí mật để giải mã. Nếu có một người C khác phát hiện ra mã thông điệp và thông tin về khóa cơng khai đã được cơng bố cũng rất khó có khả năng giải mã do khơng nắm được khóa bí mật của B.
Quá trình truyền tin sử dụng phương pháp mã hóa bất đối xứng có thể mơ tả như sau: Người nhận tin B phát sinh ra một cặp khóa: Khóa cơng khai Kc và khóa bí mật Kr. B gửi khóa cơng khai Kc cho A (và có thể cơng bố cho tất cả mọi người) cịn khóa bí mật Kr được B giữ một cách an tồn. A dùng khóa Kc để mã hóa thơng điệp và gửi bản mã cho B, B dùng khóa bí mật Kr để giải mã. Có thể mơ tả quá trình này bằng sơ đồ như Hình 4.6. Mơ hình xác thực sử dụng khóa cơng khai được minh họa trong Hình 4.7. Giả sử A cần gửi một bản thơng báo kèm theo xác thực của mình
cho B. A sẽ mã hóa bản thơng báo bằng khóa riêng của A trước khi gửi đi. B nhận được sẽ dùng khóa cơng khai của A để giải mã ra thông điệp ban đầu. Trong trường hợp này, B có thể tin rằng thơng báo này đích thị do A gửi do khơng ai có thể biết khóa riêng của A để giả mạo.
Hình 4.6. Sơ đồ truyền tin bằng mã hóa khóa cơng khai