Trong ngành Mật mã học, PKI là sự sắp xếp kết hợp Khóa Công Khai với Các Yếu Tố Định Danh (identities) của đối tượng tạo thành một Chứng Nhận (Certificate) bới một thành phần thứ ba gọi là Nhà Cung Cấp Dịch Vụ Chứng Nhận (Certification Authority _ viết tắt là CA) thông qua các thuật toán
Cơ chế này gán cho mỗi đối tượng tham gia giao dịch một cặp mã khóa gồm Khóa Công Khai (Public key) và Khóa Cá Nhân ( Private Key), một khóa dùng để mã hóa (thường là Khóa Công Khai) và khóa còn lại dùng để giải mã (thường là Khóa Cá Nhân).
Để chứng nhận tính xác thực về giá trị Khóa Công Khai, CA sẽ sử dụng Chữ Ký Số (Digital Signature _ viết tắt là DS) của mình để chứng thực thông tin kết hợp gồm : Các Thông Tin Định Danh và Khóa Công Khai của đối tượng để tạo nên Chứng Nhận cho đối tượng đó. Quá trình này được thực hiện bởi phần mềm tại CA và các phần mềm phối hợp mà đối tượng sử dụng.
Khái niệm PKI ngày nay thường được dùng để chỉ toàn bộ các hệ thống sử dụng phương pháp mã hóa thông tin trong giao dịch dựa trên cơ sở kết hợp cặp Khóa Công Khai, Khóa Cá Nhân cùng tất cả các yếu tố liên quan, thành phần liên quan như các Thuật Toán Mã Hóa được sử dụng. Trong phần lớn các trường hợp, để bảo đảm tính xác thực, giá trị Khóa Công Khai cần được chứng thực bởi một CA và được công bố trong Chứng Nhận của đối tượng, tuy nhiên một số hệ thống vẫn sử dụng cặp mã khóa này mà không hề có Chứng Nhận

Phương pháp Mã Hóa

Mã Hóa Bất Đối Xứng

Mã Hóa Khóa Công Khai (PKI Cryptography - viết tắt là PKC) - còn được xem như đồng nghĩa với Mã Khóa Bất Đối Xứng (Asynmetric Cryptography) - trong đó khóa dùng để Mã Hóa (Encrypt) khác với khóa dùng để Giải Mã (Decrypt).

Trong PKC, người dùng có một cặp khóa : Khóa Công Khai (ký hiệu là P) và Khóa Cá Nhân (Private Key – ký hiệu là Q). Khóa Cá Nhân được giữ kín trong khi Khóa Công Khai lại được công bố rộng rãi đến các đối tượng tham gia giao dịch. Tuy hai khóa này có quan hệ toán học chặt chẽ với nhau nhưng việc dò tìm Khóa Cá Nhân thông qua Khóa Công Khai trên thực tế được xem như không thể thực hiện

Trong quy trình giao dịch với PKC, đối tượng Gởi sẽ mã hóa thông tin với Khóa Công Khai của đối tượng Nhận và thông tin này chỉ có thể giải mã với Khóa Cá Nhân tương ứng của đối tượng nhận

Như vậy khi sử dụng PKC trong quy trình giao dịch, các đối tượng gởi và nhận thông tin không cần phải thông báo hoặc trao đổi với nhau về khóa để mã hóa



Như vậy khi sử dụng PKC trong quy trình giao dịch, các đối tượng gởi và nhận thông tin không cần phải thông báo hoặc trao đổi với nhau về khóa để mã hóa

Mã Hóa Đối Xứng

Trái ngược lại với Mã Hóa Khóa Công Khai, Mã Hóa Khóa Bí Mật (Secret Key Cryptography – viết tắt là SKC) – còn được xem như đồng nghĩa với Mã Hóa Đối Xứng (Symmetric Cryptography) – lại sử dụng một khóa chung (Share Key), cần được giữ kín (Secret Key), cho quy trình mã hóa và giải mã.



Do đó khi sử dụng SKC trong quy trình giao dịch, các đối tượng gởi và nhận thông tin đều phải biết khóa bí mật truớc khi thực hiện giao dịch hoặc gới khóa bí mật kèm theo nội dung thông tin để bên nhận có thể thực hiện việc giải mã

So sánh hai quy trình trên, ta nhận thấy rò ràng phương thức PKC rõ ràng tiện lợi và an tòan hơn trong việc trao đổi các thông tin mật. Thông thường, PKC đòi hỏi khối lượng tính toán nhiều hơn so với SKC nhưng những lợi điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng

Các giai đoạn phát triển

Trong hầu hết lịch sử mật mã học, khóa dùng trong các quá trình mã hóa và giải mã phải được giữ bí mật và cần được trao đổi bằng một phương pháp an toàn khác (không dùng mật mã) như gặp nhau trực tiếp hay thông qua một người đưa thư tin cậy. Vì vậy quá trình phân phối khóa trong thực tế gặp rất nhiều khó khăn, đặc biệt là khi số lượng người sử dụng rất lớn. PKC đã giải quyết được vấn đề này vì nó cho phép người dùng gửi thông tin mật trên đường truyền không an toàn mà không cần thỏa thuận khóa từ trước
Thuật toán PKI được thiết kế đầu tiên bởi James H. Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh) vào đầu thập kỷ 1970. Thuật toán sau này được phát triển và biết đến dưới tên Diffie-Hellman, và là một trường hợp đặc biệt của RSA. Tuy nhiên những thông tin này chỉ được tiết lộ vào năm 1997.

Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa công khai. Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph Merkle về phân phối khóa công khai. Trao đổi khóa Diffie-Hellman là phương pháp có thể áp dụng trên thực tế đầu tiên để phân phối khóa bí mật thông qua một kênh thông tin không an toàn. Kỹ thuật thỏa thuận khóa của Merkle có tên là hệ thống câu đố Merkle.

Thuật toán đầu tiên cũng được Rivest, Shamir và Adleman tìm ra vào năm 1977 tại MIT. 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à RSA. RSA sử dụng phép toán tính hàm mũ môđun (môđun đượ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ới điều kiện là 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ố.

Kể từ thập kỷ 1970, đã có rất nhiều thuật toán mã hóa, tạo chữ ký số, thỏa thuận khóa.. được phát triển. Các thuật toán như ElGamal (mật mã) do Netscape phát triển hay DSA do NSA và NIST cũng dựa trên các bài toán lôgarit rời rạc tương tự như RSA. Vào giữa thập kỷ 1980, Neal Koblitz bắt đầu cho một dòng thuật toán mới: mật mã đường cong elliptic và cũng tạo ra nhiều thuật toán tương tự. Mặc dù cơ sở toán học của dòng thuật toán này phức tạp hơn nhưng lại giúp làm giảm khối lượng tính toán đặc biệt khi khóa có độ dài lớn.

Những điểm yếu

Tồn tại khả năng một người nào đó có thể tìm ra được khóa bí mật. Không giống với hệ thống mật mã sử dụng một lần (one-time pad) hoặc tương đương, chưa có thuật toán mã hóa khóa bất đối xứng nào được chứng minh là an toàn trước các tấn công dựa trên bản chất toán học của thuật toán. Khả năng một mối quan hệ nào đó giữa 2 khóa hay điểm yếu của thuật toán dẫn tới cho phép giải mã không cần tới khóa hay chỉ cần khóa mã hóa vẫn chưa được loại trừ. An toàn của các thuật toán này đều dựa trên các ước lượng về khối lượng tính toán để giải các bài toán gắn với chúng. Các ước lượng này lại luôn thay đổi tùy thuộc khả năng của máy tính và các phát hiện toán học mới.

Mặc dù vậy, độ an toàn của các thuật toán PKI cũng tương đối đảm bảo. Nếu thời gian để phá một mã (bằng phương pháp duyệt toàn bộ) được ước lượng là 1000 năm thì thuật toán này hoàn toàn có thể dùng để mã hóa các thông tin về thẻ tín dụng - Rõ ràng là thời gian phá mã lớn hơn nhiều lần thời gian tồn tại của thẻ (vài năm).

Nhiều điểm yếu của một số thuật toán mã hóa khóa bất đối xứng đã được tìm ra trong quá khứ. Thuật toán đóng gói ba lô là một ví dụ. Nó chỉ được xem là không an toàn khi một dạng tấn công không lường trước bị phát hiện. Gần đây, một số dạng tấn công đã đơn giản hóa việc tìm khóa giải mã dựa trên việc đo đạc chính xác thời gian mà một hệ thống phần cứng thực hiện mã hóa. Vì vậy, việc sử dụng mã hóa khóa bất đối xứng không thể đảm bảo an toàn tuyệt đối. Đây là một lĩnh vực đang được tích cực nghiên cứu để tìm ra những dạng tấn công mới.

Một điểm yếu tiềm tàng trong việc sử dụng khóa bất đối xứng là khả năng bị tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo được khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện. Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khóa an toàn nhằm đảm bảo nhận thực người gửi và toàn vẹn thông tin. Một điều cần lưu ý là khi các chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục (hay bắt buộc) nhà cung cấp dịch vụ chứng thực xác nhận một khóa giả mạo và có thể đọc các thông tin mã hóa.

Các thuật toán mã hóa thường dùng và ứng dụng
PKC có các hướng ứng dụng chính trong thực tế là ::
• Mã hóa : giữ bí mật nội dung thông tin (chỉ có người có khóa cá nhân mới giải mã được )
• Tạo chữ ký số : cho phép kiểm tra tính toàn vẹn của một thông tin , có thể nhận biết khi nội dung thông tin bị thay đổi.
• Trao đổi khóa : cho phép thiết lập và thông báo khóa bí mật (Secret Key) dùng để mã hóa / giải mã thông tin giữa 2 bên khi sử dụng SKC.

Thuật toán RSA

RSA là một thuật toán PKC. Đây là thuật toán đầu tiên phù hợp với việc tạo ra Chữ Ký Số đồng thời với việc Mã Hóa.. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn. RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân) với cách dùng tương tự như đã nêu ở Mã Hóa Bất Đối Xứng phần trên

Quy trình thực hiện RSA bao gồm các quy trình : (1) Tạo khóa (Công khai, Cá nhân), (2) Chuyển Đổi Văn Bản Rõ (theo một tiêu chuẩn xác định Ví dụ : PKCS) để tránh các giá trị không an tòan, (3) Mã hóa và (4) Giải mã

RSA thường được dùng trong các tứng dụng : mã hóa và giải mã thông tin, tham gia vào các quy trình tạo Chữ Ký Số và quy trình Trao Đổi Khóa

Thuật toán HASH

Hash hay Hash function, tiếng Việt gọi là 'Hàm băm hay thuật toán băm, là một thuật ngữ bảo mật dùng để chỉ khả năng biến đổi bất cứ thông điệp (có độ dài bất kỳ) thành một chuỗi các ký tự có độ dài cố định. Chuỗi kết quả này còn được gọi là thông điệp tóm lược (message digest) hay vân tay số (digital fingerprint).

Hai tính chất quan trọng của hàm băm là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả băm, là cực kì nhỏ.
Do vậy hàm băm được dùng để chống và phát hiện xâm nhập; bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng; tạo chìa khóa từ mật khẩu, và tạo chữ ký số

SHA-1 và MD5 là hai thuật toán băm thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật.

Ứng dụng Mã Hóa để bảo mật thông tin (Security)

Mục đích chính của ứng dụng mã hóa là để đề phòng nếu thông tin có bị tiết lộ hoặc đối tượng thứ ba lấy được trong quá trình vận chuyển thì sẽ không thể giải được (không có khóa để giải)

Ví dụ : Đối tượng A muốn trao đổi thông tin một cách bảo mật với đối tượng B
B1 : Mỗi đối tượng cần một cặp Khóa _ đối tượng A có (Pa, Qa), đối tượng A có (Pb, Qb)
B2 : Nhà Cung Cấp Dịch Vụ Chứng Thực(CA) sẽ chứng thực các thông tin định danh và khóa công khai (P) để tạo ra Chứng Nhận cho mỗi đối tượng
B3 : Các đối tượng A và B thông báo cho nhau biết về Chứng Nhận (có chứa P) của mình
B4 : Các đối tượng A và B thực hiện trao đổi thông tin



Như vậy nếu bị tiết lộ thông tin đã mã hóa (X) thì vẫn không thể giải được (không có Qb)

Ứng dụng tạo Chữ Ký Số để kiểm tra tính tòan vẹn thông tin (Integrity)

Tạo chữ ký số

Chữ Ký Số (DS) có thể được ra bởi một đối tượng xác định (có cặp khóa P,Q) với thông tin cụ thể bằng cách kết hợp thuật toán Hash và mã hóa theo các bước sau :
Ví dụ : đối tượng A (có Pa, Qa) tạo chữ ký số trên Data
B1 : Thực hiện Hash khối dữ liệu : Data [H] -> X
B2 : Thực hiện mã hóa dữ liệu đã bị Hash với khóa cá nhân X [E] Qa -> DSa/data
(*) DSa/data : được đọc là chữ ký số của đối tượng A trên dữ liệu là Data

Ứng dụng kiểm tra tính toàn vẹn dữ liệu

Mục đích chính của chữ ký số là cho phép đượng nhận thông tin có khả năng kiểm tra tính toàn vẹn (nội dung có bị thay đổi hay không) của thông tin nhận được với phương thức như sau :



Ứng dụng trong Trao đổi khóa (Key Exchange)

Trong ứng dụng trao đổi khóa, các đối tượng muốn thực hiện giao dịch với thông tin được mã hóa theo phương thức mã hóa đối xứng do vậy cần thông báo cho nhau biết khóa chung (Share Key) một cách an tòan
PKI được dùng để che dấu giá trị của khóa chung khi trao đổi theo quy trình sau
Ví dụ : đối tượng A muốn thực hiện giao dịch với đối tượng B (có Pb, Qb)
B1 : đối tượng A gởi thông báo ý định giao dịch đến đối tương B
B2 : đối tuợng B gởi Chứng Nhận (có chứa Pb) cho đối tượng A
B3 : đối tượng A tự tạo khóa chung (K) và gởi cho đối tượng B như sau:



B4 : Các đối tượng A và B đều đã biết khóa chung (K) có thể giao dịch theo phương thức mã hóa đối xứng như sau:



Source: Nhatnghe.com