CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 578

578
Chương 14: Mật mã

trao đổi khóa cho phép bạn trao đổi các lượng dữ liệu lớn (đã-được-mật-hóa) với bất cứ ai,
thậm chí những người bạn chưa từng tiếp xúc trước đây, miễn là bạn có thể truy xuất khóa
công khai đối xứng của họ.

Một cách lý tưởng, bạn sử dụng một giải thuật bất đối xứng để mật hóa tất cả dữ
liệu, như thế tránh được nhu cầu trao đổi các khóa đối xứng. Tuy nhiên, tốc độ
của các giải thuật bất đối xứng khi mật hóa và giải mật hóa dữ liệu khiến chúng
không thực tế cho việc sử dụng với các lượng lớn dữ liệu. Sử dụng các giải thuật
bất đối xứng để mật hóa các khóa phiên đối xứng là một giải pháp tuy phức tạp
hơn, nhưng là tốt nhất ở cả hai mặt: tính linh hoạt và tính nhanh chóng.

Thư viện lớp .NET Framework hỗ trợ việc trao đổi khóa chỉ với giải thuật RSA, nhưng bạn
phải lựa chọn giữa hai formatting scheme: Optimal Asymmetric Encryption Padding (OAEP)
PKCS #1 v 1.5. Bàn về các formatting scheme này vượt quá phạm vi của quyển sách này.
Nói chung, bạn nên sử dụng OAEP formatting trừ khi bạn có nhu cầu giao tiếp với một hệ
thống cũ có sử dụng PKCS formatting. Hai lớp dưới đây hiện thực cơ chế trao đổi khóa, mỗi
cơ chế ứng với một formatting scheme:

System.Security.Cryptography.RSAOAEPKeyExchangeFormatter

System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter

Để chuẩn bị một khóa đối xứng dùng cho trao đổi, bạn phải tạo một đối tượng formatter với
kiểu như mong muốn và rồi ấn định một đối tượng giải thuật bất đối xứng
(

RSACryptoServiceProvider

) cho formatter bằng phương thức

SetKey

của formatter. Bạn phải

cấu hình cho giải thuật bất đối xứng sử dụng khóa công khai của người nhận. Khi đã cấu hình
xong, gọi phương thức

CreateKeyExchange

của formatter và truyền một mảng byte chứa khóa

phiên đối xứng mà bạn cần định dạng. Phương thức

CreateKeyExchange

trả về một mảng byte

chứa dữ liệu bạn sẽ gửi đi.
Giải định dạng cho khóa ngược với quá trình định dạng. Có hai lớp deformatter, mỗi lớp ứng
với một formatting scheme.

System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter

System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter

Để giải định dạng một khóa phiên đã được định dạng, hãy tạo một đối tượng deformatter với
kiểu phù hợp rồi gọi phương thức

SetKey

của nó để ấn định một đối tượng giải thuật bất đối

xứng. Bạn phải nạp khóa riêng của bạn vào giải thuật bất đối xứng. Cuối cùng, gọi phương
thức

DecryptKeyExchange

với đối số là dữ liệu trao đổi. Phương thức này trả về một mảng

byte chứa khóa phiên đối xứng gốc.
File KeyExchangeExample.cs chứa ví dụ minh họa cho việc trao đổi khóa. Phương thức

Main

mô phỏng việc tạo, định dạng, trao đổi, và giải định dạng một khóa phiên đối xứng. Nó sẽ tạo
một cặp khóa bất đối xứng để sử dụng cho cả ví dụ này. Thực tế, người gửi (người tạo khóa
đối xứng) chỉ có khóa công khai của người nhận; người nhận có khóa riêng (được giữ bí mật).

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.