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 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: OptimalAsymmetric Encryption Padding (OAEP) phải lựa chọn giữa hai formatting scheme: OptimalAsymmetric Encryption Padding (OAEP) và PKCS #1 v 1.5. Bàn về các formattingscheme 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 • 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 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. 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 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 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).