|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
24-07-2009, 12:12 AM | #1 |
Guest
Trả Lời: n/a
|
Understanding public key infrastructure (pki)
UNDERSTANDING PUBLIC KEY INFRASTRUCTURE (PKI)
Hệ thống Mã hóa trên cơ sở Mã Công Khai (*) Chú thích Để bảo đảm tính dễ hiểu của bài viết, các thuật ngữ sử dụng được dịch ra tiếng Việt theo ý nghĩa và giữ nguyên các thuật ngữ gốc để bạn đọc tiện tra cứu I. Tổng Quan 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 II. Phương pháp Mã Hóa 1. 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 2. 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 a. 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. b. 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. 3. 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 4. 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. 5. Ứ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 Bước 1 : 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) Bước 2 : 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 Bước 3 : 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 Bước 4 : 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) 6. Ứng dụng tạo Chữ Ký Số để kiểm tra tính tòan vẹn thông tin (Integrity) a. 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 b. Ứng dụng kiểm tra tính tòan 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 : c. Ứ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 : III. Ứng dụng PKI bảo bảo mật cho hệ thống mail A. Chuẩn bị 1. Đăng ký các hộp thư Yahoo.com.vn và cấu hình sử dụng với Outlook Express với các thông số thiết lập POP3 Ví dụ : đăng ký 2 hộp thư : - User1 = PKI_UserA Email = PKI_User1@yahoo.com.vn Password =123456 - User2 = PKI_UserB Email = PKI_User2@yahoo.com.vn Password =123456 - Thiết lập các thông số truy cập trong chương trình Outlook Express nhu sau : 2. Trên máy-3, cài đặt Certification Authority (CA) (máy dùng Windows Server 2003) - Cài đặt ASP.NET - Cài đặt Certificate Service, chọn Stand Alone Root CA, đặt tên = CA-Nhatnghe 3. Từ máy-1 và máy-2 lần lượt thực hiện xin Cerrificate (Giấy Chứng Nhận) cho các email users - Dùng web browser truy cập vào CA-Server (máy-3) với đường dẫn Http://địa chỉ máy-3/Certsrv - Chọn : “Request a Certificate” - Chọn loại Certifcate là : ”E-Mail Protection Certificate” - Nhập đẩy đủ các thông tin về email user và nhấn nút Submit Ví dụ : Name = PKI_UserA E-mail= Pki_user1@yahoo.com.vn 4. Từ máy-3, logon bằng Administrator, cấp Certificates cho các email user - Mở Administrative Tools ->Certification Authority chọn mục Pending - Click chuột phải trên các Certificates ở cửa sổ bên phải, chọn All Tasks -> Issue 5. Từ máy-1 và máy-2, các user PKI_USER1 và PKI_USER2 lần lượt thực hiện truy cập lại vào CA-Server để cài Certificate - Dùng web browser truy cập vào CA-Server (máy-3) với đường dẫn : Http://địa chỉ máy-3/Certsrv - Chọn dòng : “View the status of a pending certificate request” - Double-click vào tên Certificate xuất hiện để cài đặt (*) Lưu ý : như vậy trên máy-1 có Cerificate của email user = pki_user1@yahoo.com.vn Và trên máy-1 có Cerificate của email user = pki_user2@yahoo.com.vn B- Sử dụng hộp thư với Certificate 1- Mỗi email user phải thông báo Certificate của mình cho các email user khác bằng chữ ký số - User mở Outlook Express, nhấn nút Create Mail , nhập địa chỉ người nhận - Sau khi soạn nội dung,nhấn nút Sign (thực hiện chữ ký số) rối nhấn nút Send để gởi đi Ví dụ : User PKI_USER2 thực hiện Chữ ký số và gởi cho PKI_USER1 2- Ứng dụng mã hóa nội dung e-mail Ví dụ : Email user PKI_USER1 gởi bức mail đưôc mã hóa đến email user PKI_USER2, nếu một user dùng máy khác (không được cài Certficate của PKI_USER2) sẽ không thể đọc được dù biết về email account và password - Máy-1, mở Outlook Express với Account = PKI_User1 - Nhấn nút Create Mail và nhập địa chỉ người nhận To : Pki_user2@yahoo.com.vn - Sau khi soạn nội dung,nhấn nút Sign (thực hiện chữ ký số) rối nhấn nút Send để gởi đi - Máy-2, mở Outlook Express với Account = PKI_User2 - Nhấn nút Send/Receive sẽ nhận được và đọc được bức mail đã mã hóa nói trên - Từ máy khác (bất kỳ), mở Outlook Express và cấu hình để truy cập hộp thư Yahoo với với Account = PKI_User2 - Nhấn nút Send/Receive sẽ nhận được nhưng không thể đọc được bức mail đã mã hóa nói trên và thấy thông báo “ “Error Decrypting Message” ---------------------------------- Thực hiện : Giảng viên Lê Quý Thịnh Trung Tâm Đào Tạo Mạng Máy Tính Nhất Nghệ Bài viết có sử dụng các nguồn tư liệu, tài liệu sau đây : - Bách khoa toàn thư Wikipedia - Tự điển Công Nghệ Điện tử - Ed Gerck, Overview of Certification Systems: x.509, CA, PGP and SKIP, in The Black Hat Briefings '99 -Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. By Đào Duy Hiếu www.msopenlab.com |
|
|