2 NHỮNG VẤN ĐỀ CƠ BẢN TRONG XÂY DỰNG HỆ THỐNG PKI
2.2.8. Yêu cầu xác nhận
Một EE sau khi khởi tạo có thể sẽ yêu cầu một thẻ xác nhận vào bất kỳ thời điểm nào. Yêu cầu này được truyền tải bởi thông điệp yêu cầu thẻ xác nhận (CR). Nếu đối tượng đã có một cặp khoá để tạo chữ ký thì thông điệp yêu cầu sẽđược bảo vệ bằng cách thực hiện phương thức chữ ký sốđối với nó. Nếu yêu cầu được chấp nhận, CA sẽ trả về cho
đối tượng sử dụng một thẻ xác nhận mới.
2.2.9. Cập nhật khoá
Khi cặp khoá của một EE không còn hiệu lực nữa, đối tượng này có thể yêu cầu được cập nhật cặp khoá của mình bằng một cặp khoá mới. Yêu cầu này được truyền tải bởi
thông điệp yêu cầu cập nhật khoá (KUR). Nếu EE đã có một cặp khoá tạo chữ ký thì thông điệp yêu cầu này sẽđược bảo vệ thông qua phương thức chữ ký số. Nếu yêu cầu
được chấp thuận thì CA sẽ trả về một thông điệp trả lời yêu cầu cập nhật khoá (KUP) có chứa một thẻ xác nhận mới cho đối tượng.
Dong Manh Quan Trang 32 23/08/2005
Phần 3
3 THẺ XÁC NHẬN THEO CHUẨN X.509
Thẻ xác nhận là thành phần cốt yếu của hệ thống PKI. Trong phần này, ta sẽ tìm hiểu cấu trúc của thẻ xác nhận trong hệ thống PKI, trong đó, cấu trúc của thẻ xác nhận được mô tả
có phiên bản 3.0. Ta sẽ tập trung mô tả cấu trúc của thẻ xác nhận này trong các dịch vụ
thưđiện tử, dịch vụ IPSEC, và các dịch vụ WWW. Các nội dung cần tìm hiểu bao gồm:
¾ Các trường cơ bản của thẻ xác nhận.
¾ Cấu trúc TBSCertificate
¾ Các phần mở rộng của thẻ xác nhận X.509
3.1. CÁC TRƯỜNG CƠ BẢN CỦA THẺ XÁC NHẬN
Một thẻ xác nhận theo chuẩn X.509 phiên bản 3.0 là một dãy các cấu trúc gồm có 3 trường được mô tả như sau:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate, -- Thẻ xác nhận sẽ được ký signatureAlgorithm AlgorithmIdentifier, -- Thuật toán tạo chữ ký số
signatureValue BIT STRING} -- Thẻ xác nhận sau khi ký
Sau đây, ta sẽ tìm hiểu cấu trúc và vai trò của từng trường cơ bản trên của thẻ xác nhận.
3.1.1. Trường tbsCertificate
Trường này chứa những thông tin cơ bản nhất của thẻ xác nhận. Trong đó, ta có thể kể đến tên của đối tượng phát hành, tên của đối tượng sử dụng, thời hạn hiệu lực và những thông tin khác có liên quan. Trong các phần sau, ta sẽ tìm hiểu kỹ hơn về các trường thông tin này.
3.1.2. Trường signatureAlgorithm
Trường này chứa tên của thuật toán mã hoá mà CA sử dụng để thức hiện phương thức chữ ký sốđối với thẻ xác nhận. Trong thực tế, ta thường sử dụng một số thuật toán tạo chữ ký số phổ biến như: RSA, DSS. Theo chuẩn ASN.1, cấu trúc định danh cho một thuật toán mã hoá được mô tả như sau:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL}
Trong cấu trúc này, trường algorithm được sử dụng để lưu số hiệu của thuật toán được sử dụng. Trong thực tế, đây là một chuỗi các số theo quy định để mô tả tên các thuật toán. Ta có một ví dụ như sau: “1.2.840.10040.4.3”, đây là một chuỗi chỉ ra thuật toán
Trường parameters được sử dụng để lưu các tham số cho các thuật toán mã hoá. Nội dụng của trường này tuỳ thuộc vào từng loại thuật toán mã hoá được sử dụng.
3.1.3. Trường signatureValue
Đây là trường được tạo ra sau khi CA thực hiện phương thức chữ ký số đối với trường
tbsCertificate. Trong thực tế, ta phải đóng gói thẻ xác nhận trước khi thực hiện phương thức chữ ký số với thẻ xác nhận đó.
Bằng việc thực hiện phương thức chữ ký số với thẻ xác nhận, CA có thểđảm bảo cho các trường thông tin có trong thẻ xác nhận. Cụ thể hơn, CA đã đảm bảo cho mối ràng buộc giữa đối tượng sở hữu thẻ và khoá chung đi kèm với thẻđó. Đây chính là yêu cầu lớn nhất đối với thẻ xác nhận. Sau đây, ta sẽ tìm hiểu các cấu trúc của các trường cơ bản
đã nêu trên.
3.2. CẤU TRÚC TBSCERTIFICATE
Cấu trúc này cho phép ta lưu các thông tin liên quan đến đối tượng sử dụng và đối tượng phát hành thẻ xác nhận nhưđã nói ở trên. Các trường của cấu trúc này gồm có:
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, extensions [3] EXPLICIT Extensions OPTIONAL}
Các trường của cấu trúc TBSCertificate được mô tả như sau:
3.2.1. Trường version
Trường này chỉ ra phiên bản của thẻ xác nhận đã được mã hoá. Trong trường hợp thẻ
xác nhận có dùng đến các trường mở rộng thì phiên bản của thẻ xác nhận bắt buộc phải là 3 (giá trị là 2). Nếu không có các trường mở rộng nhưng lại có những trường định danh cho đối tượng sử dụng và đối tượng phát hành thì phiên bản của thẻ xác nhận có thể là 2 (giá trị là 1). Tuy nhiên, trong trường hợp này ta vẫn có thể sử dụng phiên bản 3.
3.2.2. Trường serialNumber
Trường này bắt buộc phải là một số nguyên dương. Nó được CA gán cho mỗi thẻ xác nhận khi CA tạo và thực hiện phương thức chữ ký sốđối với thẻ vừa tạo được. CA phải
đảm bảo số hiệu này phải là duy nhất đối với mỗi thẻ xác nhận được tạo ra. Đểđảm bảo yêu cầu về tính duy nhất của số hiệu thẻ xác nhận, trường biểu diễn số hiệu này có thể là các số nguyên lớn. Chuỗi số biểu diễn có thể có độ dài lên tới 20 byte.
Thẻ xác nhận theo chuẩn X.509 HẠ TẦNG KHOÁ CÔNG KHAI
34
3.2.3. Trường signature
Trường này chứa định danh của thuật toán mã hoá mà CA sử dụng để tạo chữ ký số cho thẻ xác nhận. Số hiệu của thuật toán lưu trong trường này phải giống với số hiệu của thuật toán lưu trong trường signatureAlgorithm.
3.2.4. Trường issuer
Trường này chỉ ra đối tượng nào đã tạo ra thẻ xác nhận, tạo chữ ký sốứng với thẻ xác nhận và phát hành nó. Trường này bắt buộc phải mang tên CA đã phát hành ra nó. Trường này có cấu trúc như sau:
Name ::= CHOICE { RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType, value AttributeValue } AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType DirectoryString ::= CHOICE {
teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE (1..MAX)) }
Như vậy, trường issuer được biểu diễn bởi một đối tượng có tên Name. Đối tượng này biểu diễn tên theo các mức dựa trên các thuộc tính. Ví dụ, tên nước ta có giá trị là Vietnam. Giá trị của thành phần AttributeValue được quyết định bởi AttributeType và nó thường có giá trị kiểu DirectoryString. Kiểu dữ liệu này có thể có nhiều lựa chọn khác nhau, tuỳ theo trường hợp cụ thể mà ta có lựa chọn phù hợp. Hiện nay, trong các ứng dụng mail và WWW, ta thường sử dụng kiểu UTF8String.
Trong biểu diễn phân cấp đối với các đối tượng sử dụng và đối tượng phát hành thẻ xác nhận, ta có một số giá trị thuộc tính chuẩn như sau:
1. Tên nước - country. 2. Tên tổ chức - organization. 3. Tên đơn vị - organizational-unit.
4. Cấp bậc - distinguished name qualifier. 5. Tên tỉnh hoặc bang - state or province name.
6. Tên thường gọi - common name. 7. Số hiệu - serial number.
Đây là những trường chuẩn và đã được sử dụng rộng rãi như những thể hiện của chuẩn về tổ chức thư mục X.500. Ngoài ra, ta cũng cần lưu ý đểđảm bảo hệ thống PKI có thể
bao hàm một số thuộc tính sau:
1. Nơi cưtrú - locality. 2. Chức danh - title. 3. Họ - surname. 4. Tên - given name. 5. Các chữ cái đầu của tên - initials.
6. Biệt danh - pseudonym.
7. Thế hệ - generation qualifier (Ví dụ, "Jr.", "3rd", hay "IV").
3.2.5. Trường validity
Trường thông tin về thời gian hiệu lực của thẻ xác nhận là trường đánh dấu khoảng thời gian mà trong đó CA đảm bảo việc cập nhật thông tin về thẻ xác nhận đó. Trường này chứa hai biến lưu thời điểm thẻ xác nhận bắt đầu có hiệu lực và thời điểm thẻ hết hiệu lực. Cả hai thời hạn đều có cùng kiểu dữ liệu là UTCTime nếu biểu diễn thời gian đến trước năm 2049, nếu thời gian biểu diễn là từ năm 2050 trở đi thì ta phải dùng kiểu
GeneralizedTime.
3.2.6. Trường subject
Trường subject chỉ ra đối tượng tương ứng với khoá công khai được lưu trong thẻ xác nhận này. Nói cách khác, nó chỉ ra đối tượng sử dụng của thẻ xác nhận. Tên của đối tượng sử dụng có thể được nêu ngay trong trường subject mà cũng có thể được nêu trong trường mở rộng subjectAltName.
Nếu đối tượng sử dụng là một CA thì tên được nêu trong trường subject phải giống với tên được nêu trong trường issuer của tất cả các thẻ xác nhận mà CA này phát hành. Ngoài ra, nếu CA này đảm nhận việc phát hành và quản lý danh sách các thẻ sẽ bị huỷ
bỏ thì trường thông tin issuer trong các danh sách mà CA phát hành cũng phải giống với tên trong trường subject này.
3.2.7. Trường subjectPublicKeyInfo
Trường này được sử dụng để lưu trữ khoá công khai và thuật toán sử dụng khoá này (RSA, DSA, Diffie-Hellman). Thuật toán được xác định thông qua cấu trúc
AlgorithmIdentifier đã nêu trên.
3.2.8. Trường uniqueIdentifiers
Trường này chỉ bắt buộc phải tồn tại khi thông điệp có phiên bản là 2 hoặc 3. Ta không
được phép sử dụng khi phiên bản là 1. Định danh đơn nhất của các đối tượng sử dụng và các đối tượng phát hành cho phép ta xử lý được các trường hợp dùng lại các tên của
Thẻ xác nhận theo chuẩn X.509 HẠ TẦNG KHOÁ CÔNG KHAI
36
3.2.9. Trường extensions
Trường này chỉ có trong các thẻ xác nhận phiên bản thứ 3 trởđi. Nếu tồn tại thì trường này sẽ chứa một dãy các trường mở rộng của thẻ xác nhận. Trong phần sau đây, ta sẽ
nghiên cứu về cấu trúc và đặc điểm của từng trường mở rộng.
3.3. CÁC PHẦN MỞ RỘNG CỦA THẺ XÁC NHẬN X.509
Các phần mở rộng của thẻ xác nhận theo chuẩn X.509 phiên bản 3 được định ra nhằm bổ sung thêm một số thuộc tính đối với các đối tượng sử dụng cùng với khoá chung của mình. Đồng thời, nó cũng hỗ trợ thêm cho quá trình xác nhận theo mô hình phân cấp.
Định dạng của thẻ xác nhận X.509 cũng cho phép từng nhóm đối tượng truyền thông định ra các phần mở rộng riêng cho phạm vi của nhóm.
Mỗi phần mở rộng của thẻ xác nhận sẽ được đánh dấu là critical hay non-critical tùy thuộc vào nội dung mà trường đó lưu trữ. Ví dụ, một đối tượng sử dụng sẽ không chấp nhận một thẻ xác nhận mà trong phần mở rộng của thẻ lại không có một trường mở rộng bắt buộc nào đó. Mỗi phần mở rộng đều có một số hiệu riêng. Số hiệu này được định ra theo chuẩn ASN.1 Sau đây ta sẽ nghiên cứu từng trường mở rộng cụ thể.
3.3.1. Phần mở rộng Authority Key Identifier
Phần mở rộng này cho phép ta xác định được khoá công khai của một đối tượng dựa trên khoá riêng mà đối tượng này đã sử dụng để tạo chữ ký sốđối với các thẻ xác nhận. Nó
được sử dụng khi một đối tượng có nhiều cặp khoá để tạo chữ ký số. Để có thể xác định
được khoá công khai của một đối tượng có thể phải sử dụng đến số hiệu khoá, tên của
đối tượng sở hữu khoá và số seri của thẻ xác nhận được ký bằng khoá đó.
Trong một hệ thống được triển khai với khả năng xác định khoá công khai của các đối tượng, phần này nên được sử dụng. Tuy nhiên, trong phần thông tin về các trường thì ta không được phép đánh dấu phần này là critical. Cấu trúc của và định danh của phần mở
rộng này được mộ tả như sau:
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL} KeyIdentifier ::= OCTET STRING
3.3.2. Phần mở rộng Subject Key Identifier
Trường này cho phép ta tìm ra những thẻ xác nhận chứa một khoá công khai nào đó. Đối với thẻ xác nhận của các EE, trường này cho phép ta định ra được những thẻ xác nhận có chứa một khoá công khai được sử dụng trong một trình ứng dụng nào đó. Trong trường hợp đối tượng sử dụng thu nhận được nhiều thẻ xác nhận từ nhiều CA khác nhau thì trường thông tin này cho phép ta nhanh chóng tìm ra được một tập các thẻ xác nhận có chứa khoá công khai nhất định.
Để hỗ trợ các trình ứng dụng trong việc định ra một thẻ xác nhận nào đó của đối tượng sử dụng, trường này nên được sử dụng trong tất cả các thẻ xác nhận. Việc định ra giá trị
cho trường thông tin này thường được dựa trên khoá công khai tương ứng và các hàm phân tách một chiều. Cấu trúc của trường này được mô tả như sau:
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } SubjectKeyIdentifier ::= KeyIdentifier
3.3.3. Phần mở rộng Key Usage
Trường này cho ta biết được mục đích của khoá được lưu trong thẻ xác nhận. Những hạn chế trong việc sử dụng có thể được thực hiện khi ta không muốn một khoá có thể được sử dụng trong nhiều hoạt động khác nhau. Ví dụ, một khoá RSA chỉ nên được sử
dụng trong việc kiểm định chữ ký đối với các thẻ xác nhận hay danh sách các thẻ xác nhận bị huỷ bỏ.
Trường này phải được sử dụng nếu khoá công khai trong thẻ xác nhận được sử dụng để
kiểm định chữ ký số được thực hiện với các thẻ xác nhận khác. Khi được sử dụng, trường này cần được đánh dấu là critical. Cấu trúc của trường này với các dạng thông tin
được mô tả như sau:
id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING {
digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) }
3.3.4. Phần mở rộng Private Key Usage Period
Trường mở rộng này cho phép đối tượng phát hành thẻ xác nhận định ra khoảng thời gian hợp lệ của một khoá riêng khác với thời gian hợp lệ của thẻ xác nhận tương ứng. Trường mở rộng này được tạo ra để phục vụ cho các khoá của dịch vụ chữ ký số. Cũng giống như trường định ra khoảng thời gian hợp lệ của thẻ xác nhận, phần mở rộng này cũng gồm hai thành phần định ra thời điểm bắt đầu và thời điểm kết thúc của khoảng thời gian hợp lệ. Nghĩa là, khoá riêng ứng với thẻ xác nhận sẽ không được phép dùng để tạo các chữ ký số trước và sau khoảng thời gian này.
Khi được sử dụng, phần mở rộng này được biểu diễn dưới dạng GeneralizedTime
(YYYYMMDDHHMMSSZ). Tuy nhiên, phần mở rộng này thường không được sử dụng trong hệ thống PKI ở phạm vi Internet. Trong trường hợp được sử dụng, các CA tạo thẻ
xác nhận không được phép đánh dấu phần này là critical. Định danh và cấu trúc của phần mở rộng này được biểu diễn như sau:
id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE {
notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL}
Thẻ xác nhận theo chuẩn X.509 HẠ TẦNG KHOÁ CÔNG KHAI
38
3.3.5. Phần mở rộng Certificate Policies
Phần mở rộng này chứa một hoặc một tập hợp các điều khoản của thông tin về chính sách đối với thẻ xác nhận. Trong một thẻ xác nhận của đối tượng sử dụng, các điều khoản của thông tin chính sách được dùng để nêu rõ thẻ xác nhận đã được tạo ra trong hoàn cảnh nào và thẻ xác nhận sẽđược sử dụng trong những mục đích gì. Trong một thẻ
xác nhận của CA, những điều khoản này sẽ giới hạn các nhánh xác nhận được lưu trong thẻ xác nhận này. Trong trường hợp CA không muốn có một giới hạn nào đối với các