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

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

5.

5.

B o đ m tính toàn v n d li u b ng mã băm có khóa

ả ả

ẹ ữ ệ ằ

B o đ m tính toàn v n d li u b ng mã băm có khóa

ả ả

ẹ ữ ệ ằ

Bạn cần chuyển một file cho ai đó và cấp cho người này một phương cách để xác
minh tính toàn vẹn của file.

Cấp cho người nhận một khóa bí mật (key). Khóa này có thể là một số được sinh
ngẫu nhiên, nhưng nó cũng có thể là một nhóm từ mà bạn và người nhận đã thỏa
thuận. Sử dụng khóa cùng với một trong những lớp giải thuật băm có khóa dẫn
xuất từ lớp

System.Security.Cryptography.KeyedHashAlgorithm

để tạo mã băm có

khóa. Gửi mã băm này cùng với file. Khi nhận được file, người nhận sẽ tạo mã
băm có khóa cho file này bằng khóa. Nếu hai mã băm giống nhau, người nhận sẽ
biết rằng file này do bạn gửi đến và nó không bị thay đổi trong quá trình chuyển
giao.

Mã băm rất hữu ích khi so sánh hai mẩu dữ liệu để xác định chúng có giống nhau hay không
(cả khi bạn không thể truy xuất được dữ liệu gốc). Tuy nhiên, bạn không thể sử dụng mã băm
để cam đoan với người nhận về tính toàn vẹn của dữ liệu. Nếu có ai đó chặn được dữ liệu,
người này có thể thay thế dữ liệu và tạo mã băm mới. Khi người nhận kiểm tra mã băm, nó có
vẻ đúng nhưng thực tế dữ liệu không giống với những gì bạn gửi lúc ban đầu.
Một giải pháp đơn giản và hiệu quả cho vấn đề toàn vẹn dữ liệu là mã băm có khóa (keyed
hash code
). Mã băm có khóa cũng tương tự như mã băm bình thường (đã được thảo luận trong
mục 14.2 và 14.3); tuy nhiên, mã băm có khóa kết hợp thêm một phần tử dữ liệu bí mật
(khóa), phần tử này chỉ có người gửi và người nhận biết. Nếu không có khóa, không ai có thể
tạo được mã băm đúng từ tập dữ liệu cho trước.

Khóa phải được giữ bí mật. Nếu ai đó biết khóa thì có thể tạo ra mã băm có khóa
hợp lệ, nghĩa là bạn sẽ không thể xác định họ có thay đổi nội dung của tài liệu
hay không. Vì lý do này, bạn không nên chuyển giao hay lưu trữ khóa cùng với
tài liệu cần được bảo vệ tính toàn vẹn. Mục 14.10 sẽ cung cấp một cơ chế mà bạn
có thể sử dụng để trao đổi khóa một cách an toàn.

Tạo mã băm có khóa cũng tương tự như tạo mã băm bình thường vì lớp trừu tượng

System.Security.Cryptography.KeyedHashAlgorithm

mở

rộng

lớp

System.Security.Cryptography.HashAlgorithm

. Lớp

KeyedHashAlgorithm

cung cấp một lớp

cơ sở để tất cả các giải thuật băm có khóa dẫn xuất từ đó. Thư viện lớp .NET Framework
hai hiện thực giải thuật băm có khóa được liệt kê trong bảng 14.2; mỗi hiện thực là một thành
viên của không gian tên

System.Security.Cryptography

.

Bảng 14.2 Các hiện thực giải thuật băm có khóa

Giải thuật/Tên lớp

Kích thước khóa (bit)

Kích thước mã băm (bit)

HMACSHA1

bất kỳ

160

MACTripleDES

64, 128, 192

64

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.