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

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

Những nỗ lực tính toán cần thiết để tạo một số ngẫu nhiên với

RNGCryptoServiceProvider

lớn hơn nhiều so với

Random

. Đối với mục đích thường

ngày, sử dụng

RNGCryptoServiceProvider

là quá mức cần thiết. Bạn nên xem xét

số lượng số ngẫu nhiên cần tạo và mục đích của các số này trước khi quyết định
sử dụng

RNGCryptoServiceProvider

. Sử dụng lớp

RNGCryptoServiceProvider

quá

mức và không cần thiết có thể ảnh hưởng đáng kể lên hiệu năng của ứng dụng.

2.

2.

Tính mã băm c a password

Tính mã băm c a password

Bạn cần lưu trữ password của người dùng một cách an toàn để bạn có thể sử
dụng nó để xác thực người dùng đó trong tương lai.

Đừng lưu trữ password của người dùng ở dạng plaintext vì đây là một nguy cơ
bảo mật lớn. Thay vào đó, hãy tạo và lưu trữ một mã băm của password bằng
một

lớp

giải

thuật

băm

dẫn

xuất

từ

lớp

System.Security.Cryptography.HashAlgorithm

. Khi xác thực, tạo mã băm của

password và so sánh nó với mã băm đã được lưu trữ.

Các giải thuật băm là các hàm mật mã một chiều, nhận plaintext có chiều dài thay đổi và tạo
một giá trị số có kích thước cố định. Chúng là một chiều vì gần như không thể tìm lại
plaintext gốc từ mã băm. Các giải thuật băm là tất định (deterministic); áp dụng cùng giải
thuật băm cho một mẩu plaintext luôn tạo ra cùng mã băm. Điều này khiến mã băm trở nên
hữu ích cho việc xác định hai khối plaintext (trong trường hợp này là password) có giống
nhau hay không. Mục đích của các giải thuật băm bảo đảm rằng—mặc dù không phải không
xảy ra—khả năng hai mẩu plaintext khác nhau tạo ra cùng mã băm là cực kỳ nhỏ. Ngoài ra,
không có mối tương quan nào giữa sự giống nhau của hai mẩu plaintext và mã băm của
chúng; một khác biệt nhỏ trong plaintext cũng có thể gây ra khác biệt đáng kể trong mã băm.
Khi sử dụng password để xác thực một người dùng, bạn không quan tâm đến nội dung của
password do người dùng nhập vào. Bạn chỉ cần biết rằng password được nhập trùng khớp với
password mà bạn đã ghi lại cho người dùng đó trong cơ sở dữ liệu tài khoản. Bản chất của các
giải thuật băm khiến chúng trở nên lý tưởng trong việc lưu trữ password một cách an toàn.
Khi người dùng cung cấp một password mới, bạn phải tạo mã băm của password và lưu trữ
mã băm này, rồi loại bỏ password dạng text. Mỗi khi người dùng xác thực với ứng dụng của
bạn, tính mã băm của password do người đó cung cấp và so sánh nó với mã băm mà bạn đã
lưu trữ.

Người ta thường hỏi cách thu lấy password từ một mã băm. Và câu trả lời là
không thể. Mục đích của mã băm là đóng vai trò như một token và bạn có thể
tùy ý lưu trữ nó mà không sinh ra lỗ hổng bảo mật nào. Nếu người dùng quên
password, bạn không thể tìm lại nó từ mã băm đã được lưu trữ; bạn phải reset
tài khoản này thành giá trị mặc định nào đó, hoặc tạo một password mới cho
người dùng.

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.