Các thuật toán mã hóa dựa trên mật khẩu

Một phần của tài liệu (LUẬN văn THẠC sĩ) phát triển một hạ tầng khóa công khai cơ bản dựa trên bộ công cụ cryptosys (Trang 31)

Các thuật toán này từ PKCS # 5 và PKCS # 12 có thể được sử dụng để tạo ra các tệp tin khóa bí mật được mã hóa PKCS#8 bởi các hàm RSA_SaveEncPrivateKey và RSA_MakeKeys:  "pbeWithSHAAnd3-KeyTripleDES-CBC" (default)  "pbeWithMD5AndDES-CBC"  "pbeWithMD2AndDES-CBC"  "pbeWithSHA1AndDES-CBC"  "pkcs5PBES2" với:  "des-EDE3-CBC"  "aes128-CBC"  "aes192-CBC"  "aes256-CBC"

Thêm nữa, các thuật toán này có thể được đọc bởi hàm RSA_ReadEncPrivateKey:

 "pkcs5PBES2" with "desCBC"

 "pkcs5PBES2" with "rc2CBC"  "pbeWithSHAAnd128BitRC2-CBC"  "pbeWithSHAAnd40BitRC2-CBC"  "pbeWithMD5AndRC2-CBC"  "pbeWithMD2AndRC2-CBC"  "pbeWithSHA1AndRC2-CBC" 2.2.7. Định dạng khóa RSA

Các định dạng được hỗ trợ cho các khóa RSA như PKCS#1 và PKCS#8

 "RSAPublicKey (mặc định cho khóa công khai)

 "EncryptedPrivateKeyInfo" với "rsaEncryption" (mặc định cho các khóa bí mật)

 Định dạng XML cho XKMS 2.0 cũng được hỗ trợ.

2.2.8. Các kiểu nội dung CMS

 Kiểu nội dung EnvelopedData (CMS phiên bản 0) với EncryptedContentInfo

 Kiểu nội dung SignedData (CMS phiên bản 1) với các thuộc tính ký tùy chọn như:  Các đối tượng CMS của kiểu SignedData thích hợp cho việc sử dụng trong các thông điệp S/MIME “application/ pkcs7-mime”

 Các đối tượng dữ liệu được ký CMS “chữ ký được tách rời” thích hợp cho việc sử dụng trong các thông điệp S/MIME "multipart/signed".

 Các thông điệp “cert-only” của SignedData giảm dần, chuỗi chứng chỉ a.k.a. PKCS#7

Chỉ các đối tượng CMS với một kiểu nội dung bên trong id-data được hỗ trợ. RecipientIdentifier phải trở thành issuerAndSerialNumber.

2.2.9. Chứng chỉ X509.

 Bạn có thể tạo chứng chỉ CA tự ký và sử dụng chứng chỉ này để tạo các chuỗi bên trong các chứng chỉ được ký.

 Một file yêu cầu ký chứng chỉ (CSR) có thể được tạo để gửi tới CA mà bạn lựa chọn.

 Hầu hết các tùy chọn thường được sử dụng cho chứng chỉ X509 phân biệt các định danh được cung cấp.

 TDanh sách hủy bỏ chứng chỉ (CRLs) không được hỗ trợ.

2.2.10. Các thuật toán không được hỗ trợ trong Cryptosys PKI

Các thuật toán từ [PKIXALG] hiện chưa được hỗ trợ, bao gồm:  Diffie-Helman keys ("DHPublicKey")

 Key Exchange Algorithm ("id-keyExchangeAlgorithm")

Các khóa Elliptic Curve và chữ ký số (ECDSA), chúng bao gồm khá nhiều thành phần lộn xộn, khó có thể hỗ trợ được chúng.

2.2.11. Các định dạng lưu trữ khóa

 Khóa RSA được tạo ra và có thể sẽ được tìm thấy trong các tập tin mã hóa nhị phân BER được mã hóa với:

 RSAPublicKey theo PKCS#1 cho khóa công khai 

 Định dạng “PEM” base64 và “OpenSSL” cho các khóa công khai và định dạng PrivateKeyInfo không được mã hóa cho khóa bí mật cũng được hỗ trợ

 Các hành động mặc định để lưu các khóa riêng được mã hóa bằng mật khẩu. Lưu dưới dạng PrivateKeyInfo không được mã hóa có nguy cơ rủi ro cho chính bạn

 Các khóa công khai có thể được tìm thấy trong chứng chỉ X509.

 Các khóa bí mật thì có thể được tìm thấy từ tệp tin PFX (PKCS#12), tuy nhiên chỉ khi nó được tạo bởi các thuật toán mà CryptoSysPKI hỗ trợ.

 Các hàm đó phải được tìm thấy để có thể sử dụng khóa thường xuyên cho việc yêu cầu khóa được đọc trong những chuỗi nội bộ đầu tiên. Chúng tôi đã chọn để lưu trữ chúng trong nội bộ như là một chuỗi ký tự Base64. Sử dụng kiểu chuỗi (string) Visual Basic hoặc kiểu ký tự (char) zero-terminated trong C làm cho đơn giản hơn để giao tiếp với dữ liệu nhị phân.

 Xử lý các chuỗi khóa nội bộ như “blobs” của dữ liệu. Theo phiên bản 3.0, chúng được mã hóa với một khóa phiên

 Hãy cẩn thận với chuỗi khóa bí mật nội bộ - sử dụng WIPE_Data để xóa chúng khi không cần thiết.

 Sử dụng hàm RSA_ToXMLString và RSA_FromXMLString để chuyển đổi qua lại giữa các định dạng XML và chuỗi bên trong của bộ công cụ. Hãy rất cẩn thận với dữ liệu khóa bí mật XML không được mã hóa.

2.3. Chứng thƣ số

Chứng thư số là một dạng chứng thư điện tử do tổ chức cung cấp dịch vụ chứng thực chữ ký số cấp. Nó là một tài liệu có chứa một công bố được chứng thực. Trong lĩnh vực điện tử, chứng thư là một tài liệu chứa một tập hợp các thông tin có chữ ký số của một người có thẩm quyền và người này được cộng đồng những người sử dụng chứng thư công nhận và tin cậy.

2.3.1. Chứng thư khóa công khai

Khi người khởi tạo (người gửi) thông báo muốn sử dụng mã hóa công khai để mã hóa một thông báo gửi cho người nhận, họ cần một bản sao khóa công khai của người nhận. Khi 1 người bất kỳ muốn kiểm tra chữ ký số do người khác sinh ra, người kiểm tra cần một bản sao khóa công khai của người ký. Người mã hóa thông

báo và người kiểm tra chữ ký số là những người sử dụng khóa công khai hay gọi ngắn gọn là người dùng.

Khi khóa công khai được gửi đến cho một người dùng thì không cần thiết phải giữ bí mật khóa công khai này. Tuy nhiên, người sử dụng khóa công khai phải đảm bảo chắc chắn rằng khóa công khai được sử dụng đúng là của người nhận thông báo chủ định hoặc người ký. Nếu một đối tượng có thể dùng một khóa công khai khác thay thế cho khóa công khai hợp lệ, các nội dung của thông báo mã hóa có thể bị lộ, đối tượng này có thể biết được nội dung của các thông báo và có thể làm giả chữ ký số. Hay nói cách khác, các biện pháp bảo vệ sẽ bị lộ nếu như một đối tượng có thể thay thế các khóa công khai không được chứng thực.

Hệ thống chứng thư khóa công khai làm việc như sau: CA phát hành chứng thư cho những người nắm giữ cặp khóa công khai và khóa bí mật. Mỗi chứng thư gồm có một khóa công khai và thông tin nhận dạng duy nhất của chủ thể của chứng thư. Chủ thể của chứng thư có thể là một người, thiết bị, hoặc một thực thể khác có nắm giữ khóa bí mật tương ứng, xem hình sau [8] :

Hình 2.1. Chứng thư khóa công khai đơn giản

Khi chủ thể của chứng thư là một người hoặc một kiểu thực thể hợp pháp nào đó, thì chủ thể thường được gọi là một thuê bao của CA. Các chứng thư được CA ký bằng khóa bí mật của CA.

Một khi các chứng thư này được thiết lập, nhiệm vụ của người sử dụng rất đơn giản. Giả thiết rằng, một người sử dụng đã có khoá công khai của CA một cách an toàn (ví dụ, thông qua phân phối khoá công khai thủ công) và anh ta tin cậy CA phát hành các chứng thư hợp lệ. Nếu người dùng cần khoá công khai của một trong

các thuê bao của CA này, anh ta có thể thu được khoá công khai của thuê bao đó bằng cách lấy từ bản sao chứng thư của thuê bao. Chứng thư của thuê bao có thể được kiểm tra bằng cách kiểm tra chữ ký của CA có trên chứng thư. Người sử dụng các chứng thư theo cách này được gọi là thành viên đáng tin cậy.

Kiểu hệ thống này tương đối đơn giản và kinh tế khi thiết lập trên diện rộng và theo hình thức tự động, bởi vì một trong các đặc tính quan trọng của các chứng thư là: Các chứng thư có thể được phát hành mà không cần phải bảo vệ thông qua các dịch vụ an toàn truyền thông truyền thống để đảm báo bí mật, xác thực và tính toàn vẹn.

Khoá công khai không cần giữ bí mật, như vậy các chứng thư không phải là bí mật. Hơn nữa, ở đây không đòi hỏi các yêu cầu về tính xác thực và toàn vẹn, do các chứng thư tự bảo vệ (chữ ký số của CA có trong chứng thư đảm bảo tính xác thực và toàn vẹn). Nếu một đối tượng truy nhập trái phép định làm giả một chứng thư được phát hành cho một người sử dụng khoá công khai, anh ta sẽ bị người này phát hiện vì có thể kiểm tra được chữ ký số CA. Chính vì vậy, các chứng thư khoá công khai được phát hành theo các cách không an toàn, ví dụ như thông qua các máy chủ, các hệ thống thư mục hoặc các giao thức truyền thông không an toàn.

Lợi ích cơ bản của một hệ thống chứng thư khoá công khai là một người sử dụng có thể có được một số lượng lớn các khoá công khai của các thành viên khác một cách tin cậy, xuất phát từ thông tin khoá công khai của một thành viên, đó chính là khoá công khai của CA.

2.3.2. Khuôn dạng chứng thư X.509

Khuôn dạng chứng thư khóa công khai được chấp nhận rộng rãi nhất định nghĩa trong chuẩn X.509 của ISO/IF/ITU.

a)Khuôn dạng chứng thƣ cơ bản

Khuôn dạng chứng thư X.509 gồm có 3 phiên bản 1,2,3 được trình bày như sau:  Phiên bản (Version): Chỉ ra dạng phiên bản

 Số hiệu (serial number): Số hiệu nhận dạng duy nhất của chứng thư này. Nó được CA phát hành gán cho.

 Người phát hành (Issuer): Tên theo chuẩn X.509 của CA phát hành

 Thời gian hợp lệ (Validity): Ngày/giờ có hiệu lực và hết hạn của một chứng thư  Chủ thể ( Subject): Tên X.509 của đối tượng nắm giữ khóa bí mật (tương ứng với khóa công khai được chứng thực)

 Thông tin về khóa công khai của chủ thể (Subject Public key Information): gồm khóa công khai của chủ thể cùng với một tên thuật toán sử dụng khóa công khai này.

 Định danh duy nhất của người phát hành ( Issuer unique identifier): Là một chuỗi bít tùy chọn, được sử dụng để chỉ rõ ràng là của CA phát hành, trong trường hợp cùng một tên được gán cho các thực thể khác nhau trong cùng một thời gian.

 Định danh duy nhất của chủ thể (Subject unique identifier): Là một chuỗi bit tùy chọn, được sử dụng để chỉ ra rõ ràng của chủ thể, trong trường hợp cùng một tên được gán cho các thực thể khác nhau trong cùng thời gian.

Hình 2.2. Khuôn dạng chứng thư số phiên bản 1 và 2 dạng X.509

b)Khuôn dạng chứng thƣ X.509 mở rộng ( phiên bản 3)

Càng ngày các khuôn dạng chứng thư trong phiên bản 1,2 không đáp ứng được tất cả các yêu cầu. Dưới đây là các lý do bổ sung thêm thông tin :

 Giả thiết chủ thể của một chứng thư số bất kì có các chứng thư khác nhau với các khóa công khai khác nhau (các khóa này được sử dụng cho các mục đích khác nhau) và giả thiết rằng các cặp khóa cần được cập nhật định kỳ, do vậy cần phải có cách để phân biệt các chứng thư khác nhau của đối tượng này một cách dễ dàng.

Hình 2.3. Phần mở rộng của khuôn dạng chứng thư số trong phiên bản 3 dạng X.509

Mỗi trường mở rộng có một kiểu (cần được đăng ký). Giống với cách đăng ký một thuật toán, kiểu của trường mở rộng được đăng ký bằng cách gán cho nó một tên đối tượng. Về nguyên tắc, các kiểu của trường mở rộng được một người nào đó xác định. Trong thực tế, để làm được điều này, các kiểu của trường mở rộng thông thường phải được biết rộng rãi qua các thiết lập khác nhau, chính vì vậy các kiểu quan trọng của trường mở rộng phải được chuẩn hoá. Tuy nhiên, các cộng đồng quan tâm có thể xác định các kiểu của trường mở rộng để đáp ứng các nhu cầu riêng của họ.

Trong phiên bản 3, mỗi trường mở rộng chứa một giá trị tên đối tượng (gồm kiểu trường, một chỉ báo thiết yếu và một giá trị). Kiểu của mục dữ liệu trong trường con (ví dụ như chuỗi văn bản, ngày tháng hoặc cấu trúc dữ liệu phức tạp) ngữ nghĩa liên quan đến giá trị này do kiểu của trường mở rộng chi phối. Điều này có thể xảy ra như là kết quả của việc định nghĩa các chứng thư nhằm hỗ trợ cho các nhu cầu của nhiều ứng dụng, hoặc là kết quả của việc đưa ra các trường mở rộng mới thông qua việc di trú kỹ thuật.

Chỉ báo thiết yếu là một cờ, cờ này sẽ xuất hiện khi trường mở rộng là thiết yếu hoặc không thiết yếu. Nếu cờ chỉ báo là “không thiết yếu” thì một hệ thống sử dụng chứng thư được phép bỏ qua trường mở rộng nếu nó không chấp nhận kiểu của trường. Nếu cờ chỉ báo là “thiết yếu” thì một hệ thống sẽ không an toàn nếu sử dụng bất kỳ phần nào của chứng thư, trừ khi hệ thống nàychấp nhận kiểu của trường

Khái niệm “thiết yếu” thường xuyên bị hiểu sai. Một trường mở rộng có thể quan trọng với người sử dụng chứng thư nhưng không nhất thiết phải chỉ báo thiết yếu. Một hệ thống sử dụng chứng thư có thể yêu cầu các trường mở rộng nào đó xuất hiện trong một chứng thư hoặc thông tin nào đó phải có trong các trường của chứng thư trước khi chứng thư được chấp nhận. Một yêu cầu như vậy không liên quan đến tính thiết yếu, hệ thống sử dụng chứng thư có thể yêu cầu sự xuất hiện của các trường mở rộng không thiết yếu chẳng khác gì với yêu cầu sự xuất hiện của các trường mở rộng thiết yếu nào đó.Các trường mở rộng không thiết yếu giúp cho việc sử dụng các chứng thư thông qua các ứng dụng khác nhau trở nên dễ dàng hơn và giúp cho sự di trú trở nên đơn giản hơn thông qua việc bổ sung dần dần các kiểu mới cho trường mở rộng. Các trường mở rộng thiết yếu dẫn đến các vấn đề về khả năng liên hoạt động và cần phải tránh, trừ khi giải quyết các mối quan tâm về an toàn. Thông thường khi sử dụng, đa số các trường mở rộng được chỉ báo không thiết yếu.

c)Các trƣờng mở rộng chuẩn của chứng thƣ

Một tập hợp các trường mở rộng chuẩn (dành cho chứng thư phiên bản 3 của X.509) được một số tổ chức phát triển như sau:[8]

1. Thông tin về khóa và chính sách

2. Các thuộc tính của chủ thể và người phát hành 3. Các ràng buộc đối với đường dẫn chứng thực

4. Các trường mở rộng liên quan đến danh sách các chứng thư bị thu hồi (CRL) Các trường mở rộng nhóm (1) chuyển thêm các thông tin về các khoá của chủ thể và người phát hành.

2.4. Cài đặt và sử dụng thƣ viện CryptoSysPKI

2.4.1. Cài đặt

Để cài đặt trên một hệ thống thử nghiệm hoặc hệ thống phát triển, sử dụng chương trình setup.exe được cung cấp và phân phối. Lõi này sẽ cài đặt Win32 DLL trong hệ thống cửa sổ chính của bạn và tạo ra các bản sao của tất cả các file cần thiết khác, bao gồm cả hướng dẫn, trong thư mục C: \ Program Files \ CryptoSysPKI.

Hình 2.4. Thư viện Cryptosys PKI

Để phân phối một phiên bản giấy phép cho người dùng cuối cùng, xin vui lòng đọc các hướng dẫn trong file distrib.txt. Không được sử dụng chương trình setup.exe để phân phối cho người dùng cuối.

Sử dụng chương trình setup.exe để cài đặt. Để gỡ bỏ cài đặt, sử dụng Start> Settings> Control Panel> Add / Remove Programs> CryptoSys PKI Toolkit để loại bỏ các ứng dụng và tất cả các tập tin liên quan.

Thực thi lõi DLL: Các tập tin thực thi cốt lõi là diCrPKI.dll mà là một DLL (thư viện động) Win32. Tập tin này phải tồn tại trong đường dẫn tìm kiếm trên hệ thống thư viện của người dùng cho tất cả các giao diện ngôn ngữ lập trình. Các diCrPKI.dll thực thi không được đăng ký với regsvr32. Các giao diện VB6/VBA và C / C + + truy cập vào lõi thực thi trực tiếp.

Trình đóng gói DLL: Một sự thực thi trình đóng gói được cung cấp để ngôn ngữ lập trình .NET có thể truy cập các lõi thực thi. Điều này đòi hỏi cốt lõi Win32 DLL tồn tại trong đường dẫn tìm kiếm thư viện. Các trình đóng gói DLL giống nhau có thể được sử dụng với tất cả các phiên bản.

dirCrSysPKINet.dll là một lớp thư viện lớp .NET gồm nhiều lớp

2.4.2. Sử dụng với C và C++

Để sử dụng với một chương trình C hoặc C++, bao gồm các tập tin diCrPKI.h với mã nguồn và liên kết của bạn với các thư viện diCrPKI.lib. Chỉ những yêu cầu non-ANSI C cái mà trình biên dịch của bạn hỗ trợ quy ước gọi the_stdcall để gọi hàm Win32 API từ một DLL Win32. Các mẫu chương trình C PKI_Examples.c được cung cấp và phân phối thực hiện một loạt các bài kiểm thử bằng cách sử dụng các vector kiểm tra. Có những ví dụ được lấy cho từng hàm.

2.4.3. Sử dụng với .NET: C# và VB.NET

Một phần của tài liệu (LUẬN văn THẠC sĩ) phát triển một hạ tầng khóa công khai cơ bản dựa trên bộ công cụ cryptosys (Trang 31)

Tải bản đầy đủ (PDF)

(69 trang)