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

577

Chương 14: Mật mã

}

Win32 CryptoAPI hỗ trợ cả user-key-storemachine-key-store. Hệ điều hành Windows bảo
đảm một user-key-store chỉ có thể được truy xuất bởi người đã tạo ra nó, nhưng một machine-
key-store
có thể được truy xuất bởi bất kỳ người dùng nào của máy. Theo mặc định, lớp

RSACryptoServiceProvider

DSACryptoServiceProvider

sẽ sử dụng user-key-store. Bạn có

thể chỉ định sử dụng machine-key-store bằng cách thiết lập thuộc tính tĩnh

UseMachineKeyStore

của lớp

RSACryptoServiceProvider

hay

DSACryptoServiceProvider

true

. Điều này sẽ có tác dụng với tất cả mã lệnh đang chạy trong miền ứng dụng hiện hành.

Nếu muốn kiểm soát chặt chẽ hơn, bạn có thể thiết lập thuộc tính

CspParameters.Flags

là giá

trị

System.Security.Cryptography.CspProviderFlags.UseMachineKeyStore

trước khi tạo đối

tượng mật hóa bất đối xứng.

Bạn nên xét các yêu cầu bảo mật một cách cẩn thận trước khi chọn sử dụng
machine-key-store
. Thực tế là người dùng nào có quyền truy xuất máy đều có thể
giành được quyền truy xuất các khóa trong kho lưu trữ, điều này phủ định hầu
hết các lợi ích do phép mật hóa bất đối xứng mang lại.

10.

10.

Trao đ i khóa phiên đ i x ng m t cách an toàn

ố ứ

Trao đ i khóa phiên đ i x ng m t cách an toàn

ố ứ

Bạn cần trao đổi dữ liệu đã-được-mật-hóa-đối-xứng với ai đó, và bạn cần một
biện pháp an toàn để phân bổ khóa phiên (session key
) đối xứng cùng với dữ liệu.

Sử dụng cơ chế trao đổi khóa do lớp

System.Security.Cryptography.

RSACryptoServiceProvider

hiện thực. Theo cơ chế này, khóa đối xứng sẽ được

mật hóa bất đối xứng bằng khóa công khai (public key) của người nhận. Theo đó,
bạn có thể gửi khóa đối xứng đã-được-mật-hóa cùng với dữ liệu đã-được-mật-
hóa. Người nhận phải giải mật hóa khóa đối xứng bằng khóa riêng (private key
),
rồi mới tiến hành giải mật hóa dữ liệu.

Mỗi khi mật hóa dữ liệu (bằng giải thuật đối xứng) để chuyển giao, bạn nên tạo một khóa mới,
được gọi là khóa phiên (session key). Sử dụng khóa phiên có hai lợi ích chính:

Nếu ai đó (không được phép) lấy được nhiều khối ciphertext đã được mật hóa bằng
cùng một khóa đối xứng, khả năng người đó giải được dữ liệu sẽ tăng cao.

Nếu ai đó tìm được khóa phiên của bạn, người này chỉ có thể truy xuất được một tập dữ
liệu nào đó đã-được-mật-hóa, chứ không phải tất cả các bí mật của bạn ở quá khứ và
tương lai.

Vấn đề đối với khóa phiên là phân bổ và bảo mật khóa. Một giải pháp là thỏa thuận một lượng
lớn khóa phiên với những người mà bạn cần trao đổi dữ liệu với họ. Thật không may, việc này
nhanh chóng trở nên khó quản lý; và thực tế là tất cả các khóa của bạn trong tương lai đều
được lưu trữ tại một nơi nào đó, điều này tăng khả năng chúng sẽ bị xâm hại. Cách tốt hơn là
gửi khóa phiên theo một dạng được mật hóa mạnh cùng với dữ liệu mà bạn đã mật hóa với
khóa đó—quá trình này được gọi là trao đổi khóa (key exchange).
Quá trình trao đổi khóa sử dụng phép mật hóa bất đối xứng để mật hóa khóa phiên đối xứng.
Nếu muốn gửi dữ liệu cho ai đó, bạn tạo một khóa phiên đối xứng, mật hóa dữ liệu, và rồi mật
hóa khóa phiên bằng khóa công khai của người nhận. Khi nhận được dữ liệu, người nhận giải
mật hóa khóa phiên bằng khóa riêng của họ, và rồi giải mật hóa dữ liệu. Quan trọng là việc

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.