Công cụ và ngôn ngữ lập trình phục vụ phát triển ứng dụng

Một phần của tài liệu Hệ mật RSA và ứng dụng lược đồ chữ ký số trong xác thực thông tin (Trang 56)

a) Các thành phần ActiveX

Việc phát triển ứng dụng được thực hiện trên cơ sở sử dụng các activeX của nhà cung cấp Chilkat Software, là một công ty chuyên phát triển công cụ phần mềm và thư viện mã hoá được các công ty và tổ chức trên thế giới tin cậy sử dụng (tham khảo tại website http://www.chilkatsoft.com/).

Chương trình sử dụng các activeX chính sau đây:

Public Key A Private Key B Private Key A CERT A Dữ liệu/ văn bản HASH value SHA-1 Digital Signature Digital Signature Khoá mật Dữ liệu đã mã hoá Public Key B AES RSA RSA CERT B Khoá mật đã mã hoá Khoá mật đã mã hoá So sánh RSA Khoá mật AES CERT A Dữ liệu/ văn bản Digital Signature HASH value SHA-1 RSA Dữ liệu đã mã hoá

MÃ HOÁ TRUYỀN TIN

Dữ liệu đã mã hoá Khoá mật đã mã hoá HASH value 2 Kết quả xác thực GIẢI MÃ

ChilkatRsa ActiveX

Là một thành phần activeX cung cấp phương thức mã hoá RSA được dùng trong các ứng dụng và website để mã hoá/ giải mã các file dữ liệu, chuỗi, và byte sử dụng cặp khoá công khai và khoá bí mật (khoá riêng).

Các tính năng của activeX RSA này bao gồm:

- Sinh cặp khoá công khai/ bí mật (Public/private key generation)

- Mã hoá sử dụng khoá công khai hoặc khoá bí mật (Encrypt with either public or private key)

- Giải mã sử dụng khoá công khai hoặc bí mật (Decrypt with matching public or private key)

- Mã hoá và giải mã các chuỗi hoặc các bytes tại bộ nhớ trong với mọi kích thước (Encrypt and decrypt in-memory strings or byte arrays of any size)

- Mã hoá tạo dữ liệu ra ở các dạng Base64, Hex, Quoted-Printable, hoặc URL (Encode encrypted output to Base64, Hex, Quoted-Printable, or URL-encoding)

- Xuất cặp khoá công khai/ bí mật ra định dạng XML (Export public/private key pairs to XML).

- Nhập cặp key dưới dạng file .snk (Import key pair from .snk file).

- Nhập cặp khoá công khai/ bí mật từ định dạng XML (Import public/private key pairs from XML).

- Nhập hoặc xuất một khoá công khai hoặc bí mật thuôc cặp khoá (Import/Export only public-part or private-part of key pair).

- Hỗ trợ mô hình chuyển đổi mã hóa bất đối xứng tối ưu OAEP (Supports Optimal Asymmetric Encryption Padding - OAEP Scheme)

- Hỗ trợ kích thước khoá từ 512 bits đến 16384 bits (Supports key sizes ranging from 512 bits to 16384 bits).

Một số thuộc tính và phương thức được activeX RSA cung cấp:

Thuộc tính:

Charset As String

Quy định kiểu ký tự được sử dụng trong mã hoá. Khi mã hoá một chuỗi, đầu tiên chuỗi đầu vào được chuyển đổi về tập ký tự này. Khi giải mã, dữ liệu mã hoá được chuyển thành chuỗi theo định dạng của tập ký tự này và được chuyển đổi thành kết quả thích hợp.

EncodingMode As String

Quy định chế độ mã hoá. Dữ liệu mã hoá được xử lý ở các chế độ mã hoá "base64", "hex", "url", hoặc "quoted-printable" ("qp").

NumBits As Long (read-only)

Cho biết số bit của khoá được tạo hoặc nhập bởi thành phần mã hoá RSA.

Phƣơng thức:

DecryptBytes(inData As Variant, usePrivateKey As Long) As Variant

Giải mã dữ liệu dạng byte sử dụng thuật toán mã hoá RSA. Thông số (adsbygoogle = window.adsbygoogle || []).push({});

usePrivateKey quy định việc dùng khoá công khai hay bí mật để giải mã.

DecryptBytesENC(inStr As String, usePrivateKey As Long) As Variant

Tương tự DecryptBytes ngoại trừ việc dữ liệu vào là một chuỗi mã hoá được quy định bởi thuộc tính EncodingMode.

DecryptString(inData As Variant, usePrivateKey As Long) As String

Giải mã chuỗi dữ liệu mã hoá. Thông số usePrivateKey quy định việc dùng khoá công khai hay bí mật để giải mã.

DecryptStringENC(inStr As String, usePrivateKey As Long) As String

Tương tự DecryptString ngoại trừ việc dữ liệu vào là một chuỗi mã hoá được quy định bởi thuộc tính EncodingMode.

EncryptBytes(inData As Variant, usePrivateKey As Long) As Variant

Mã hoá dữ liệu dạng byte sử dụng thuật toán mã hoá RSA. Thông số

usePrivateKey quy định việc dùng khoá công khai hay bí mật để mã hoá.

EncryptBytesENC(inData As Variant, usePrivateKey As Long) As String

Tương tự EncryptBytes ngoại trừ việc dữ liệu ra là một chuỗi mã hoá được quy định bởi thuộc tính EncodingMode.

EncryptString(inStr As String, usePrivateKey As Long) As Variant

Mã hoá chuỗi dữ liệu sử dụng thuật toán mã hoá RSA. Thông số usePrivateKey

quy định việc dùng khoá công khai hay bí mật để mã hoá.

EncryptStringENC(inStr As String, usePrivateKey As Long) As String

Tương tự EncryptString ngoại trừ việc dữ liệu ra là một chuỗi mã hoá được quy định bởi thuộc tính EncodingMode.

ExportPrivateKey() As String

ExportPublicKey() As String

Xuất khoá công khai của cặp khoá RSA ra dạng XML.

GenerateKey(numBits As Long) As Long

Tạo một cặp khoá công khai/ bí mật RSA với độ dài khoá quy định bởi thuộc tính

numBits có giá trị từ 384 đến 16384.

ImportPrivateKey(xml As String) As Long

Nhập một khoá bí mật từ dạng XML để thực hiện mã hoá/ giải mã.

ImportPublicKey(xml As String) As Long

Nhập một khoá công khai từ dạng XML để thực hiện mã hoá/ giải mã.

ChilkatCert ActiveX

Thành phần activeX cung cấp các phương thức để làm việc với một chứng chỉ số.

Các thuộc tính cơ bản: (adsbygoogle = window.adsbygoogle || []).push({});

Expired As Long (read-only)

Cho biết tình trạng hiệu lực của một chứng chỉ số.

ForClientAuthentication As Long (read-only)

Kiểm tra chứng chỉ số có thể sử dụng để xác thực client (client authentication)

ForCodeSigning As Long (read-only)

Kiểm tra chứng chỉ số có thể sử dụng để ký trên mã (code signing)

ForSecureEmail As Long (read-only)

Kiểm tra chứng chỉ số có thể sử dụng để gửi email bảo đảm (sending secure email)

ForServerAuthentication As Long (read-only)

Kiểm tra chứng chỉ số có thể sử dụng để xác thực server (server authentication)

ForTimeStamping As Long (read-only)

Kiểm tra chứng chỉ số có thể sử dụng để xác thực nhãn thời gian (time stamping)

IssuerC As String (read-only)

Cung cấp thông tin của trường country của issuer trong chứng chỉ số.

IssuerCN As String (read-only)

Cung cấp thông tin của trường common name của issuer trong chứng chỉ số.

IssuerDN As String (read-only)

IssuerE As String (read-only)

Cung cấp thông tin của trường email address của issuer trong chứng chỉ số

IssuerL As String (read-only)

Cung cấp thông tin của trường locality (city, ...) của issuer trong chứng chỉ số

IssuerO As String (read-only)

Cung cấp thông tin của trường organization (company name) của issuer trong chứng chỉ số

IssuerOU As String (read-only)

Cung cấp thông tin của trường organization unit (department name) của issuer trong chứng chỉ số

IssuerS As String (read-only)

Cung cấp thông tin của trường state/province của issuer trong chứng chỉ số

Revoked As Long (read-only)

Cho biết chứng chỉ số có bị thu hồi hay không.

SubjectC As String (read-only) (adsbygoogle = window.adsbygoogle || []).push({});

Cung cấp thông tin của trường country của Subject trong chứng chỉ số.

SubjectCN As String (read-only)

Cung cấp thông tin của trường common name của Subject trong chứng chỉ số.

SubjectDN As String (read-only)

Cung cấp thông tin của trường full name của Subject trong chứng chỉ số

SubjectE As String (read-only)

Cung cấp thông tin của trường email address của Subject trong chứng chỉ số

SubjectL As String (read-only)

Cung cấp thông tin của trường locality (city, ...) của Subject trong chứng chỉ số

SubjectO As String (read-only)

Cung cấp thông tin của trường organization (company name) của Subject trong chứng chỉ số

SubjectOU As String (read-only)

Cung cấp thông tin của trường organization unit (department name) của Subject trong chứng chỉ số

Cung cấp thông tin của trường state/province của Subject trong chứng chỉ số

ValidFrom As Date (read-only)

Cho biết ngày bắt đầu có hiệu lực của chứng chỉ số

ValidTo As Date (read-only)

Cho biết ngày hết hiệu lực của chứng chỉ số

Các phƣơng thức:

ExportCertDer() As Variant

Xuất một chứng chỉ số ra định dạng ASN.1 DER

ExportCertDerFile(filename As String) As Long

Xuất một chứng chỉ số ra file nhị phân định dạng ASN.1 DER

ExportCertPem() As String

Xuất một chứng chỉ số ra chuỗi định dạng PEM

ExportCertPemFile(filename As String) As Long

Xuất một chứng chỉ số ra file định dạng PEM

ExportPrivateKey() As PrivateKey

Xuất khoá bí mật của chứng chỉ số

ExportPublicKey() As PublicKey (adsbygoogle = window.adsbygoogle || []).push({});

Xuất khoá công khai của chứng chỉ số

IsExpired() As Long

Cho phép/ không cho phép hiệu lực của chứng chỉ số

LinkPrivateKey(keyContainerName As String, machineKeyset As Long) As Long

Liên kết một khoá bí mật với một chứng chỉ số.

LoadByCommonName(name As String) As Long

Tìm trong Windows Local Machine và Current User registry các chứng chỉ số có common name được chỉ định trong tham số name.

LoadByEmailAddress(emailAddress As String) As Long

Tìm trong Windows Local Machine và Current User registry các chứng chỉ số có email address được chỉ định trong tham số emailAddress.

LoadFromFile(filename As String) As Long

Nạp một chứng chỉ số từ file dạng .cer, .p7b, hoặc .pem. Các định dạng file được hỗ trợ:

- DER encoded binary X.509 (.CER) - Base-64 encoded X.509 (.CER)

- Cryptographic Message Syntax Standard - PKCS #7 Certificates (.P7B) - PEM

ChilkatCrypt2 ActiveX

Là activeX sử dụng mã hoá và giải mã các chuỗi và dữ liệu nhị phân. Các thuật toán mã hoá đối xứng Rijndael, Blowfish, Twofish được sử dụng. Ngoài ra activeX còn cung cấp các phương thức mã hoá/ giải mã khoá công khai sử dụng chứng chỉ số. ActiveX cũng cung cấp các chức năng “băm” trên các chuỗi và dữ liệu nhị phân sử dụng các chuẩn “băm” SHA1, SHA384, SHA512, MD2, MD5, và HAVAL; cung cấp phương thưc nén chuỗi và dữ liệu nhị phân theo chuẩn BZIP2; cung cấp phương thức tạo và kiểm tra chữ ký điện tử; cung cấp các chức năng mã hoá chuẩn Base64, quoted- printable, và hex.

Các tính năng của activeX Crypt2 này bao gồm:

- Mã hoá/ giải mã chuỗi hoặc byte dữ liệu (Encrypt / decrypt strings or byte data).

- Trả về dữ liệu mã hoá dạng Base64, quoted-printable, hoặc hex (Return encrypted data as Base64, quoted-printable, or hex-encoded strings). - “Băm” chuỗi hoặc dữ liệu nhị phân sử dụng các hàm băm SHA1, MD2,

MD5, HAVAL, SHA384, hoặc SHA512 (Hash strings or binary data using SHA1, MD2, MD5, HAVAL, SHA384, or SHA512).

- Mã hoá công khai sử dụng chứng chỉ số (Public-key encryption with digital certificates).

- Tạo và kiểm tra chữ ký điện tử (Create and verify digital signatures) - Chuyển đổi chuỗi dạng unicode sang ANSI (1 byte) trước khi mã hoá

(Pre-convert Unicode strings to ANSI (single-byte/char) before encrypting)

- Chuyển đổi chuỗi dạng unicode sang các kiểu tập ký tự trước khi mã hoá, nén, hay “băm” (Pre-convert Unicode strings to any charset before encrypting, compressing, or hashing)

- Mã hoá chuỗi hay byte dữ liệu theo chuẩn Base64 (Base64 encode strings or byte data).

- Mã hoá chuỗi hay byte dữ liệu theo chuẩn Hex (Hex-encode encode strings or byte data).

- Nén chuỗi hay byte dữ liệu bằng thuật toán nén BZIP2 (Compress strings or byte data with the BZIP2 compression algorithm).

- Hỗ trợ mã hoá đến 256 bits (Up to 256-bit encryption is supported) - Thiết lập khoá bí mật nhị phân cho các thuật toán mã hoá đối xứng (Set

binary secret-key directly for symmetric encryption algorithms)

- Hỗ trợ CBC và EBC cho các thuật toán mã hoá đối xứng Rijndael và Twofish (CBC and ECB supported for Rijndael and Twofish)

ActiveX Crypt2 cung cấp các thuộc tính và phương thức sau: (adsbygoogle = window.adsbygoogle || []).push({});

Thuộc tính:

Charset As String

Quy định tập ký tự được sử dụng của văn bản được mã hoá, ký hoặc “băm” hay nén. Thuộc tính này có liên quan mỗi khi đầu vào hoặc đầu ra là các chuỗi.

CipherMode As String

Quy định chế độ mã chuyển dịch cho các thuật toán mã hoá Rijndael hoặc Twofish. Các giá trị có thể sử dụng là “CBC” hoặc “ECB”.

CompressionAlgorithm As String

Chọn thuật toán nén. Hiện tại hỗ chợ chuẩn nén “BZIP2”

CryptAlgorithm As String

Chọn thuật toán mã hoá cho các phép mã hoá và giải mã. Các giá trị có thể chọn: "pki", “aes”, "rijndael", "blowfish", "blowfish2", and "twofish"

EncodingMode As String

Điều khiển chế độ mã hoá các dữ liệu nhị phân thành chuỗi có thể in được. Các chế độ được hỗ trợ bao gồm: "Base64", "QP", "URL” , và "Hex".

HashAlgorithm As String

Chọn thuật toán “băm” sử dụng cho các phương thức tính giá trị “băm”. Các thuật toán được hỗ trợ bao gồm: "sha1", "sha384", "sha512", "md2", "md5", và "haval".

KeyLength As Long

Quy định độ dài tính bằng bit cho các thuật toán mã hoá đối xứng. Giá trị mặc định là 128 bit.

SecretKey As Variant

Giá trị nhị phân của khoá bí mật dùng cho các thuật toán mã đỗi xứng (Rijndael, Blowfish, Twofish).

BytesToString(inData As Variant, charset As String) As String

Chuyển đổi một giá trị kiểu variant thành một chuỗi

CkDecryptFile(inFilename As String, outFilename As String) As Long

Giải mã một file. Độ lớn của file không giới hạn.

CkEncryptFile(inFilename As String, outFilename As String) As Long

Mã hoá một file. Độ lớn của file không giới hạn.

Decode(encodedStr As String, encoding As String) As Variant

Giải mã dữ liệu nhị phân từ các định dạng base64, hex, quoted-printable, hoặc URL

DecryptBytes(data As Variant) As Variant

Giải mã một mảng byte.

DecryptBytesENC(str As String) As Variant

Giải mã một mảng byte dạng chuỗi in được

DecryptString(data As Variant) As String (adsbygoogle = window.adsbygoogle || []).push({});

Giải mã các byte dữ liệu và trả về chuỗi ban đầu.

DecryptStringENC(str As String) As String

Giải mã một chuỗi dạng chuỗi in được và trả về chuỗi ban đầu.

Encode(byteData As Variant, encoding As String) As String

Mã hoá dữ liệu nhị phân thành các dạng base64, hex, quoted-printable, hoặc URL

EncryptBytes(data As Variant) As Variant

Mã hoá một mảng các byte. Các thuộc tính sau cần thiết lập trước khi gọi phương thức này: CryptAlgorithm, SecretKey. Ngoài ra các thuộc tính khác có liên quan: CipherMode, PaddingScheme, KeyLength.

EncryptBytesENC(data As Variant) As String

Mã hoá một mảng các byte và trả về dữ liệu mã dạng chuỗi in được. Các thuộc tính sau cần thiết lập trước khi gọi phương thức này: CryptAlgorithm, SecretKey, EncodingMode. Ngoài ra các thuộc tính khác có liên quan: CipherMode, PaddingScheme, KeyLength.

EncryptString(str As String) As Variant

Mã hoá một chuỗi và trả về dữ liệu mã dạng mảng byte. Các thuộc tính sau cần thiết lập trước khi gọi phương thức này: CryptAlgorithm, SecretKey, Charset. Ngoài ra các thuộc tính khác có liên quan: CipherMode, PaddingScheme, KeyLength.

EncryptStringENC(str As String) As String

Mã hoá một chuỗi và trả về dữ liệu mã dạng chuỗi in được. Các thuộc tính sau cần thiết lập trước khi gọi phương thức này: CryptAlgorithm, SecretKey, Charset, EncodingMode. Ngoài ra các thuộc tính khác có liên quan: CipherMode, PaddingScheme, KeyLength.

GenerateSecretKey(str As String) As Variant

“Băm” một chuỗi thành một mảng byte có số bit bằng giá trị quy định tại thuộc tính KeyLength.

GetEncodedKey(encoding As String) As String

Trả về khoá bí mật dạng chuỗi.

GetLastCert() As ChilkatCert

Trả về chứng chỉ số được gần nhất. Sử dụng để giải mã dữ liệu hoặc kiểm tra chữ ký số. Được dùng cho mã hoá khoá công khai, không dùng cho các thuật toán mã đối xứng.

HashBytes(data As Variant) As Variant

“Băm” một mảng byte.

HashBytesENC(data As Variant) As String

“Băm” một mảng byte và trả về chuỗi nhị phân in được.

HashString(str As String) As Variant

“Băm” một chuỗi và trả về giá trị băm nhị phân.

HashStringENC(str As String) As String

“Băm” một chuỗi và trả về chuỗi băm nhị phân in được.

ReadFile(filename As String) As Variant

Đọc một file và trả về mảng byte.

SetEncodedKey(keyStr As String, encoding As String) (adsbygoogle = window.adsbygoogle || []).push({});

Thiết lập khoá bí mật từ một chuỗi.

SetEncryptCert(iCert As ChilkatCert)

Đặt một chứng chỉ số dùng cho mã khoá công khai.

SetSecretKeyViaPassword(password As String)

Tạo một khoá bí mật dạng nhị phân từ một chuỗi.

SetSigningCert(iCert As ChilkatCert)

SetVerifyCert(iCert As ChilkatCert)

Đặt một chứng chỉ số dùng cho phương thức kiểm tra chữ ký số.

SignBytes(data As Variant) As Variant

Ký trên một mảng byte và trả về một chữ ký số tách rời.

SignBytesENC(data As Variant) As String

Ký trên một mảng byte và trả về một chữ ký số tách rời dạng chuỗi in được.

SignString(str As String) As Variant

Ký trên một chuỗi và trả về một chữ ký số tách rời.

SignStringENC(str As String) As String

Ký trên một chuỗi và trả về một chữ ký số tách rời dạng chuỗi in được.

VerifyBytes(data As Variant, signature As Variant) As Long

Kiểm tra một chữ ký số trên một mảng byte.

VerifyBytesENC(data As Variant, encodedSig As String) As Long

Kiểm tra một chữ ký số dạng chuỗi in được trên một mảng byte.

VerifyString(str As String, signature As Variant) As Long

Kiểm tra một chữ ký số trên một chuỗi.

VerifyStringENC(str As String, encodedSig As String) As Long

Kiểm tra một chữ ký số dạng chuỗi in được trên một chuỗi.

WriteFile(filename As String, binaryData As Variant) As Long

Tạo một file từ một mảng các byte

PrivateKey ActiveX

Là một activeX cung cấp các phương thức xử lý trên một khoá bí mật.

GetPkcs8() As Variant

Trả về một khoá bí mật theo định dạng PKCS8. (adsbygoogle = window.adsbygoogle || []).push({});

GetPkcs8Pem() As String

Trả về một khoá bí mật theo định dạng PKCS8 PEM

GetRsaDer() As Variant

Trả về một khoá bí mật theo định dạng RSA DER.

GetRsaPem() As String

GetXml() As String

Trả về một khoá bí mật theo định dạng XML.

LoadPem(str As String) As Long

Nạp khoá bí mật từ chuỗi dạng PEM trong bộ nhớ.

LoadPemFile(filename As String) As Long

Nạp khoá bí mật từ file dạng PEM

LoadPkcs8(pkcs8Data As Variant) As Long

Nạp khoá bí mật từ dạng dữ liệu byte PKCS8 trong bộ nhớ

LoadPkcs8File(filename As String) As Long

Nạp khoá bí mật từ file dạng PKCS8

LoadPvk(pvkData As Variant, password As String) As Long

Nạp khoá bí mật từ dạng dữ liệu byte PVK trong bộ nhớ

LoadPvkFile(filename As String, password As String) As Long

Nạp khoá bí mật từ file dạng PVK

LoadRsaDer(derData As Variant) As Long

Nạp khoá bí mật từ dạng dữ liệu byte RSA DER trong bộ nhớ

LoadRsaDerFile(filename As String) As Long

Nạp khoá bí mật từ file dạng RSA DER

LoadXml(xmlDoc As String) As Long

Nạp khoá bí mật từ dạng chuỗi XML trong bộ nhớ

Một phần của tài liệu Hệ mật RSA và ứng dụng lược đồ chữ ký số trong xác thực thông tin (Trang 56)