You are on page 1of 9

Microsoft Crypto API

1. Một số khái niệm cơ bản.


1.1 API là gì?
API giao diện lập trình ứng dụng (appication programming interface) là tập các giao thức kết
nối hoặc giao diện được lập trình sẵn cung cấp khả năng truy cập đến một tập các hàm
thường dùng.

2.1 DDL là gì
Thư viện liên kết động (dynamic library) là tập hợp những hàm, chức năng được tải lên
chương trình của bạn trong thời điểm chương trình đang thực thi. Khi biên dịch chương
trình có sử dụng thư viện liên kết động, bản thân thư viện đó sẽ không trở thành một phần
trong chương trình thực thi, nhưng nó trở thành một đơn vị riêng biệt.

Trên hệ điều hành Windows, chúng ta có thể thấy những file có phần mở rộng .dll viết tắt
của “dynamic-link library”

+, Ưu điểm của thư viện liên kết động:

-Tiết kiệm bộ nhớ lưu trữ thư viện trên ổ cứng: nhiều tiến trình có thể sử dụng chung một
thư viện liên kết động.

-Khi chức năng trong thư viện liên kết động thay đổi, chương trình sử dụng thư viện đó
không cần phải biên dịch lại.

Chương trình viết trên nhiều ngôn ngữ lập trình khác nhau có thể gọi đến cùng một thư viện
liên kết động.

+, Tuy nhiên, thư viện liên kết động cũng có nhược điểm:

-Chương trình có yêu cầu sử dụng thư viện liên kết động sẽ không thể thực thi khi không tìm
thấy thư viện tương ứng.

-Giảm hiệu suất trong quá trình chương trình đang chạy, vì khi chức năng trong thư viện
được gọi, chương trình cần thời gian để tìm kiếm và tải lên RAM.

3.1 Nhà cung cấp dịch vụ mật mã - Cryptographic Service Providers (CSP)
- CSP là một thư viện cài đặt bộ Microsoft CAPI. CSP là các modul độc lập có thể sử dụng bởi
các ứng dụng khác nhau thực hiện các chức năng mã hóa và giải mã. Một chương trình gọi
các hàm CAPI và chúng được chuyển đến các hàm của CSP. Vì CSP chịu trách nhiệm triển
khai các thuật toán và mã hóa, nên các ứng dụng không cần phải quan tâm sâu hơn vào chi
tiết việc mã hóa được thực hiện như thế nào. Hơn nữa một ứng dụng có thể xác định được
CSP nào sẽ được gọi thông qua CAPI. Và thực tế tất cả các hoạt động liên quan đến mật mã
được thực hiện trong CSP. CAPI chỉ hoạt động như một cầu nối giữa ứng dụng và CSP.

- CSP cơ bản được cài đặt như một dạng đặc biệt của DLL được giới hạn trong việc sử dụng.
Tất cả các CSP phải được ký số bởi Microsoft và chữ ký phải được xác nhận với Microsoft khi
windows load CSP. Windows sẽ định kỳ quét lại các CSP để phát hiện sự giả mạo do virus
hoặc phần mềm độc hại, hay do người dùng cố gắng vượt qua các hạn chế như độ dài
khóa…

- Để có được chữ ký các CSP không phải microsoft phải cung cấp thông tin cho Micosoft và
phải tuân thủ nghiêm ngặt các quy định và hạn chế của họ

- Một số loại CSP

PROV_RSA_FULL

PROV_RSA_AES

PROV_RSA_SIG

PROV_RSA_SCHANNEL

PROV_DSS

PROV_DSS_DH

PROV_DH_SCHANNEL

PROV_FORTEZZA

PROV_MS_EXCHANGE

PROV_SSL

- Một số CSP :

Provider Description

Microsoft Base Cryptographic A broad set of basic cryptographic functionality that can be exported to
Provider other countries or regions.

Microsoft Strong An extension of the Microsoft Base Cryptographic Provider available


Cryptographic Provider with Windows XP and later.
Provider Description

Microsoft Enhanced Microsoft Base Cryptographic Provider with through longer keys and
Cryptographic Provider additional algorithms.

Microsoft AES Cryptographic Microsoft Enhanced Cryptographic Provider with support for AES
Provider encryption algorithms.

Microsoft DSS Cryptographic Provides hashing, data signing, and signature verification capability
Provider using the Secure Hash Algorithm (SHA) and Digital Signature Standard
(DSS) algorithms.

Microsoft Base DSS and A superset of the DSS Cryptographic Provider that also supports Diffie-
Diffie-Hellman Cryptographic Hellman key exchange, hashing, data signing, and signature verification
Provider using the Secure Hash Algorithm (SHA) and Digital Signature Standard
(DSS) algorithms.

Microsoft Enhanced DSS and Supports Diffie-Hellman key exchange (a 40-bit DES derivative), SHA
Diffie-Hellman Cryptographic hashing, DSS data signing, and DSS signature verification.
Provider

Microsoft DSS and Diffie- Supports hashing, data signing with DSS, generating Diffie-Hellman (D-
Hellman/Schannel H) keys, exchanging D-H keys, and exporting a D-H key. This CSP
Cryptographic Provider supports key derivation for the SSL3 and TLS1 protocols.

Microsoft RSA/Schannel Supports hashing, data signing, and signature verification. The algorithm
Cryptographic Provider identifier CALG_SSL3_SHAMD5 is used for SSL 3.0 and TLS 1.0 client
authentication. This CSP supports key derivation for the SSL2, PCT1,
SSL3 and TLS1 protocols.

Microsoft RSA Signature Provides data signing and signature verification.


Cryptographic Provider

- Tất cả các CSP đều phải tuân thủ theo các chuẩn định sẵn của các trường sau:

Key exchange algorithm : thuật toán trao đổi khóa

Digital signature algorithm : thuật toán chữ ký số


Key BLOB formats : định dạng key BLOB dùng để xuất khóa và nhập khóa vào CSP

Digital signature format : định dạng chữ ký số

Session key derivation scheme : phương thức để lấy một khóa phiên từ hàm băm

Key length : độ dài khóa

Default modes : Chế độ mặc định cho các trường khác nhau

2. Microsoft Crypto API là gì?


CAPI hay còn được biết đến là MS-CAPI, CryptoAPI, MS-CAPI là giao diện lập trình ứng dụng mã hóa
dành riêng cho nền tảng Microsoft Windows. API này cung cấp các dịch vụ cho phép các nhà phát triển
sử dụng mật mã để có thể bảo mật các ứng dụng nền tảng trên windows như mã hóa , giải mã, ký số và
lưu trữ khóa. API này lần đầu tiên được giới thiệu trong window NT 4.0 và được cải tiến trong các phiên
bản tiếp theo. CAPI : Next Generation là bản thay thế dài hạn cho CAPI. Nó được thiết kế để có thể mở
rộng ở nhiều cấp độ và những hành vi mới chưa được biết tới trong mật mã học.

3. CAPI hỗ trợ những loại mật mã nào?


- Mật mã khóa công khai (2 khóa: Public key và Private key)

- Mật mã khóa đối xứng (1 khóa dùng cho cả mã hóa và giải mã)

- Hàm băm

- Trình tạo số giả ngẫu nhiên (CryptGenRandom): là trình tạo số giả ngẫu nhiên (PRNG) với các thuộc tính
làm cho nó phù hợp để sử dụng trong mật mã. Hầu hết các ứng dụng mật mã yêu cầu số ngẫu nhiên

4. Kiến trúc hệ thống CryptoAPI


4.1 Chức năng mã hóa cơ sở
- Context functions dùng để kết nối với CSP (cryptographic service providers – Nhà cung
cấp dịch vụ mã hóa). Chức năng này cho phép các ứng dụng chọn một CSP cụ thể để
cung cấp một lớp chức năng cần thiết
- Các hàm tạo khóa được sử dụng để tạo và lưu trữ khóa mật mã . Hỗ trợ đầy đủ được
bao gồm để thay đổi chế độ chuỗi , vectơ khởi tạo và các tính năng mã hóa khác
- Chức năng trao đổi khóa được sử dụng để trao đổi hoặc truyền khóa

5.1 Chức năng mã hóa / giải mã chứng chỉ


- Các chức năng được sử dụng để mã hóa hoặc giải mã và băm dữ liệu

6.1 Chức năng lưu trữ chứng chỉ


- Các chức năng được sử dụng để quản lý bộ các chứng chỉ số
7.1 Chức năng tin nhắn đơn giản
- Các chức năng được sử dụng để mã hóa và giải mã tin nhắn và dữ liệu.
- Các chức năng được sử dụng để ký tin nhắn và dữ liệu.
- Các chức năng được sử dụng để xác minh tính xác thực của chữ ký trên các tin nhắn
nhận được và dữ liệu liên quan

8.1 Chức năng tin nhắn cấp thấp


- Các hàm được sử dụng để thực hiện tất cả các tác vụ được thực hiện bởi các hàm Chức
năng tin nhắn đơn giản. Các chức năng tin nhắn cấp thấp cung cấp sự linh hoạt hơn các
hàm Chức năng tin nhắn đơn giản nhưng yêu cầu nhiều lời gọi hàm hơn.

Mỗi khu vực chức năng có một từ khóa trong tên chức năng cho biết khu vực chức năng
của nó.
Functional area Function name convention

Base cryptographic functions Crypt

Encoding/decoding functions Crypt

Certificate store functions Store

Simplified message functions Message

Low-level message functions Msg

Các ứng dụng sử dụng các chức năng trong tất cả các lĩnh vực này. Các chức năng này,
được thực hiện cùng nhau, tạo nên CryptoAPI.

5. Quản lý khóa trong CAPI


- Các ứng dụng không thể truy cập trực tiếp vào dữ liệu khóa. Bởi vì tất cả các dữ liệu khóa được tạo
trong CSP và được ứng dụng sử dụng thông qua các giao diện điều khiển CSPI

- Các ứng dụng không thể chỉ định chi tiết của các hoạt động mật mã. Giao diện CSPI cho phép ứng
dụng chọn thuật toán mã hóa hoặc chữ ký, nhưng việc triển khai mọi hoạt động mã hóa được thực
hiện bởi CSP.

- Các ứng dụng không xử lý thông tin xác thực người dùng hoặc dữ liệu xác thực người dùng khác.
Xác thực người dùng được thực hiện bởi CSP

- Khóa được lưu trong các kho lưu trữ khóa (key container). Key container bao gồm:

+ Cặp khóa ký số

+ Cặp khóa để trao đổi khóa

+ Không chứa khóa phiên

- Một người dùng đều có key container mặc định. Một người dùng có thể có nhiều key container
6. Quy trình làm việc với nhà cung cấp dịch vụ mã hóa (CSP)
- Hàm CryptoAPI đầu tiên được gọi bởi một ứng dụng sử dụng bất kỳ API mã hóa nào là hàm
CryptAcquireContext.

- Hàm này trả về một trình điều khiển tới một CSP cụ thể bao gồm đặc điểm kỹ thuật của một Bộ
chứ khóa (Key Container) trong CSP. Nó sẽ chỉ định loại nhà cung cấp và tên nhà cung cấp tùy chọn.

- Nếu cả loại và tên được chỉ định, hàm sẽ tải CSP với đúng loại và tên và trả về trình điều khiển để
ứng dụng có thể truy cập tới cả CSP và bộ chứa khóa trong CSP.

- Nếu hàm CryptAcquireContext chọn loại nhà cung cấp mà không chọn tên nhà cung cấp thì trước
tiên nó sẽ tìm trong danh sách các nhà cung cấp mặc định có liên kết với người dùng còn nếu thất
bại nó sẽ tìm trong danh sách mặc định các nhà cung cấp có liên kết với cái mát tính đó, các bước
sau thì tương tự như khi thực hiện với hàm có cả loại và tên nhà cung cấp.

- Khi bạn kết thúc sử dụng trình điều khiển CSP, giải phóng nó bằng lời gọi hàm CryptReleaseContext

7. Các nhóm hàm trong CAPI


CAPI

High-Level
Base Funtions
Function

CSP Managerment Message Functions Certificate Funtions

Certificate Encode
Key Generation Low-Level
and Decode
and Exchange Message Functions
Functions

Encryption and Simplified Message Certificate Store


Decryption Function Functions

Hash and Digital


Signature

Các nhóm hàm mã hóa được phân loại theo cách sử dụng như sau: (click vào từng hàm để xem chi tiết
và cách sử dụng chi tiết của các hàm hoặc ta có thể tra cứu dễ dàng trên link sau
https://docs.microsoft.com/vi-vn/windows/win32/seccrypto/cryptography-functions)

 Base Cryptography Functions : Nhóm hàm mã hóa cơ bản cung cấp các phương tiện linh hoạt
nhất để phát triển các ứng dụng sử dụng mã hóa. Tất cả các giao tiếp với một CSP thông qua các
chức năng này.

o Service Provider Functions : Nhóm hàm để kết nối và ngắt kết nối với nhà cung cấp dịch
vụ mật mã (CSP)

o Key Generation and Exchange Functions : Nhóm hàm tạo và trao đổi exchange keys với
người dùng khác, thêm sửa xóa khóa mã hóa (crypto keys)

o Object Encoding and Decoding Functions : Nhóm hàm mã hóa và giải mã tổng quát.
Chúng được sử dụng để mã hóa và giải mã chứng chỉ , danh sách thu hồi chứng chỉ
(CRL), chứng chỉ yêu cầu và phần mở rộng chứng chỉ.

o Data Encryption and Decryption Functions : Nhóm hàm để mã hóa và giải mã dữ liệu. Nó
yêu cầu một khóa mật mã trước khi được gọi. Thuật toán mã hóa được xác định khi
khóa được tạo.

o Hash and Digital Signature Functions : Nhóm hàm để tính toán dữ liệu băm , tạo và kiểm
tra chữ ký số
 Message Functions

o Low-level Message Functions : Nhóm hàm cung cấp chức năng cần thiết để mã hóa dữ
liệu để truyền và giải mã các tin nhắn PKCS # 7 nhận được. Chức năng cũng được cung
cấp để giải mã và xác minh chữ ký của tin nhắn nhận được. Việc sử dụng nhóm hàm này
thường không được gợi ý. Hầu hết các ứng dụng thì ưu tiên sử dụng hàm mã hóa đơn
giản (Simplified Message Functions) vì nó bao gồm nhiều hàm tin nhắn cấp thấp này và
được sử dụng chỉ với 1 lời gọi hàm

o Simplified Message Functions : Các hàm tin nhắn được đơn giản hóa bao bọc các Hàm
tin nhắn cấp thấp thành một hàm duy nhất để thực hiện một tác vụ được chỉ định.

 Certificate and Certificate Store Functions : Nhóm hàm quản lý việc sử dụng, lưu trữ và truy xuất
chứng chỉ , danh sách thu hồi chứng chỉ (CRL) và danh sách ủy thác chứng chỉ (CTL)

o Certificate Store Functions : Nhóm hàm lưu trữ, truy xuất, liệt kê, xác minh và sử dụng
thông tin được lưu trữ trong chứng chỉ.

o Certificate Functions : Nhóm chức năng để làm việc với danh sách thu hồi chứng chỉ và
danh sách chứng chỉ đáng tin cậy.

You might also like