579
Chương 14: Mật mã
Cũng như nên sử dụng một khóa đối xứng có chiều dài phù hợp với tính bí mật
của dữ liệu đang được bảo vệ, bạn nên mật hóa khóa phiên bằng một giải thuật
bất đối xứng và chiều dài khóa ít nhất cũng phải tương đương với khóa đối
xứng. Nếu khóa bất đối xứng yếu hơn khóa đối xứng, có khả năng kẻ tấn công sẽ
phá vỡ giải thuật bất đối xứng và thu lấy khóa đối xứng thay vì cố giải mật hóa
dữ liệu đã-được-mật-hóa-đối-xứng. Xem
[
http://www.ietf.org/rfc/rfc3766.txt]
(có trong đĩa CD đính kèm) để biết chi tiết về sự tương đương giữa chiều dài
khóa đối xứng và bất đối xứng.
Kế đó, phương thức
Main
gọi phương thức
FormatKeyExchange
với đối số là một mảng byte
chứa khóa đối xứng và một đối tượng
RSAParameters
chứa khóa công khai của người nhận.
Phương thức
FormatKeyExchange
trả về một mảng byte chứa khóa đối xứng đã-được-mật-hóa
và đã-được-định-dạng, chuẩn bị gửi đi. Kế tiếp, phương thức
Main
gọi phương thức
DeformatKeyExchange
với đối số là dữ liệu trao đổi đã được định dạng và đối tượng
CspParameters
chứa một tham chiếu đến kho chứa khóa MyKeys (chứa khóa riêng của người
nhận). Trong suốt quá trình này, phương thức
Main
sẽ hiển thị khóa phiên gốc, dữ liệu trao đổi
đã được định dạng, và cuối cùng là khóa phiên đã được giải định dạng.
using System;
using System.Text;
using System.Security.Cryptography;
public class KeyExchangeExample {
public static void Main() {
// Khai báo một biến RSAParameters, biến này sẽ
// chứa thông tin PUBLIC KEY của người nhận.
RSAParameters recipientsPublicKey;
// Khai báo một biến CspParameters, biến này sẽ cho biết
// PRIVATE KEY được lưu trữ trong kho chứa khóa nào.
// Thông thường, chỉ có người nhận mới có thể truy xuất
// thông tin này. Với mục đích minh họa, chúng ta sẽ tạo
// một cặp khóa ngay đầu ví dụ và sử dụng các khóa này
// cho cả bên gửi và bên nhận.
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "MyKeys";
// Tạo cặp khóa bất đối xứng bằng lớp RSACryptoServiceProvider.
// Lưu các khóa này vào một kho chứa khóa có tên là "MyKeys"