Hàm Cryptographic Hash (hàm băm mật mã) là gì?

Hàm cryptographic hash hay băm mật mã là một thuật toán có thể chạy trên dữ liệu như một file riêng lẻ hoặc mật khẩu để tạo ra một giá trị gọi là checksum.

Công dụng chính của hàm băm mật mã là để xác minh tính xác thực của một phần dữ liệu. Hai file chỉ có thể được coi là giống hệt nhau nếu checksum được tạo từ mỗi file, sử dụng cùng hàm băm mật mã, giống hệt nhau.

Một số hàm băm mật mã thường được sử dụng bao gồm MD5 và SHA-1 (bên cạnh đó, cũng còn nhiều hàm khác tồn tại).

Hàm băm mật mã thường được gọi tắt là "hàm băm", nhưng điều đó không đúng về mặt kỹ thuật. Hàm băm là một thuật ngữ chung bao gồm các hàm băm mật mã cùng với những loại thuật toán khác như Cyclic Redundancy Check.

Trường hợp sử dụng của hàm băm mật mã

Trường hợp sử dụng của hàm băm mật mã

Giả sử bạn muốn tải xuống phiên bản mới nhất của trình duyệt Firefox. Vì một số lý do, bạn cần tải xuống từ một trang web khác ngoài Mozilla. Vì nó không được lưu trữ trên một trang web mà bạn tin tưởng, nên bạn muốn đảm bảo rằng file cài đặt bạn vừa tải xuống giống hệt như file do Mozilla cung cấp.

Sử dụng công cụ tính toán, bạn có thể tính checksum bằng một hàm băm mật mã cụ thể, chẳng hạn như SHA-2, sau đó so sánh với checksum được công bố trên trang web của Mozilla. Nếu chúng giống nhau, bạn có thể chắc chắn rằng bản tải xuống bạn có là bản tương tự như trên Mozilla.

Các hàm băm mật mã có thể bị đảo ngược không?

Các hàm băm mật mã được thiết kế để ngăn khả năng đảo ngược checksum mà chúng tạo ra trở lại văn bản gốc. Mặc dù chúng hầu như không thể bị đảo ngược, nhưng chúng không thể đảm bảo 100% việc bảo vệ dữ liệu.

Tin tặc có thể sử dụng rainbow table để tìm ra plain text của một checksum. Rainbow table là “từ điển” liệt kê hàng ngàn, hàng triệu hoặc thậm chí hàng tỷ checksum cùng với giá trị plain text tương ứng của chúng.

Mặc dù thuật toán cryptographic hash không đảo ngược về mặt kỹ thuật, nhưng điều này cũng có thể xảy ra, vì việc thực hiện rất đơn giản. Trong thực tế, vì không có rainbow table nào có thể liệt kê mọi checksum đang tồn tại, nên chúng thường chỉ hữu ích cho các cụm từ đơn giản như mật khẩu yếu.

Đây là phiên bản đơn giản của rainbow table để cho thấy cách thức hoạt động của nó khi sử dụng hàm băm mật mã SHA-1:

Ví dụ về Rainbow Table
Plaintext Checksum sử dụng hàm băm mật mã SHA-1
12345 8cb2237d0679ca88db6464eac60da96345513964
password1 e38ad214943daad1d64c102faec29de4afe9da3d
ilovemydog a25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

Một hacker phải biết thuật toán cryptographic hash nào đã được sử dụng để tạo ra checksum và tìm ra các giá trị.

Để bảo vệ thêm, một số trang web lưu trữ mật khẩu người dùng thực hiện các chức năng bổ sung trên thuật toán cryptographic hash, sau khi giá trị được tạo nhưng trước khi nó được lưu trữ. Quá trình này tạo ra một giá trị mới mà chỉ máy chủ web mới hiểu và không khớp với checksum ban đầu.

Ví dụ, sau khi bạn nhập mật khẩu và checksum được tạo, nó có thể được tách thành nhiều phần và được sắp xếp lại trước khi được lưu trong cơ sở dữ liệu mật khẩu, hoặc một số ký tự nhất định có thể được hoán đổi thành cái khác. Khi cố gắng xác thực lần sau, khi người dùng đăng nhập, máy chủ web sẽ đảo ngược hàm bổ sung này và checksum gốc được tái tạo để xác minh rằng mật khẩu của người dùng là hợp lệ.

Thực hiện các bước này sẽ hạn chế khả năng một vụ hack, trong đó tất cả các checksum bị đánh cắp, xảy ra. Ý tưởng là thực hiện một hàm không xác định, vì vậy nếu tin tặc biết thuật toán cryptographic hash nhưng không phải là cái nào được tùy chỉnh, thì việc biết checksum mật khẩu cũng không có ích gì.

Mật khẩu và hàm băm mật mã

Mật khẩu và hàm băm mật mã

Cơ sở dữ liệu lưu mật khẩu người dùng theo cách tương tự như rainbow table. Khi mật khẩu của bạn được nhập, checksum được tạo và so sánh với mật khẩu được ghi với tên người dùng của bạn. Sau đó, bạn được cấp quyền truy cập nếu cả hai giá trị giống hệt nhau.

Giả sử hàm băm mật mã tạo ra checksum không thể đảo ngược, thì có an toàn nếu bạn tạo mật khẩu đơn giản như 12345, thay vì 12@34$5 không? Câu trả lời là không và đây là lý do tại sao.

Cả hai mật khẩu đều không thể giải mã chỉ bằng cách nhìn vào checksum:

  • Checksum MD5 cho 12345: 827ccb0eea8a706c4c34a16891f84e7b
  • Checksum MD5 cho 12@34$5: a4d3cc004f487b18b2ccd4853053818b

Thoạt nhìn, bạn có thể nghĩ rằng sử dụng một trong hai mật khẩu này đều ổn. Điều này đúng, nếu kẻ tấn công đã cố gắng tìm ra mật khẩu của bạn bằng cách đoán checksum MD5, nhưng không ai thực hiện điều này cả. Thường thì một cuộc tấn công Brute Force hoặc Dictionary Attack (tấn công dạng từ điển) sẽ được thực hiện, đây là một chiến thuật phổ biến.

Một cuộc tấn công Brute Force xảy ra khi ai đó thực hiện nhiều nỗ lực để đoán mật khẩu một cách ngẫu nhiên. Trong trường hợp này, có thể dễ dàng đoán được 12345, nhưng khá khó để tìm ra những mật khẩu khó một cách ngẫu nhiên. Một cuộc tấn công Dictionary Attack tương tự ở chỗ kẻ tấn công có thể thử mọi từ, số hoặc cụm từ từ một danh sách các mật khẩu phổ biến (và không phổ biến), và 12345 là một trong những mật khẩu phổ biến đó.

Mặc dù các hàm cryptographic hash tạo ra các checksum khó đoán, bạn vẫn nên sử dụng một mật khẩu phức tạp cho tất cả các tài khoản người dùng trực tuyến và cục bộ của mình.

Thông tin thêm về các hàm băm mật mã

Có vẻ như các hàm băm mật mã có liên quan đến mã hóa, nhưng hai thứ này hoạt động theo những cách khác nhau.

Mã hóa là một quá trình hai chiều trong đó một cái gì đó được mã hóa để không thể đọc được, và sau đó được giải mã để sử dụng lại bình thường. Bạn có thể mã hóa các file bạn đã lưu trữ để bất kỳ ai truy cập chúng đều không thể sử dụng hoặc bạn có thể dùng tính năng mã hóa truyền file để mã hóa các file đang di chuyển qua mạng, như những file bạn upload hoặc download trực tuyến.

Thông tin thêm về các hàm băm mật mã

Các hàm băm mật mã hoạt động khác nhau ở chỗ checksum không có nghĩa được đảo ngược với một mật khẩu khử băm (dehash) đặc biệt. Mục đích duy nhất của hàm băm mật mã là so sánh hai phần dữ liệu, chẳng hạn như khi tải xuống file, lưu trữ mật khẩu và lấy dữ liệu từ database.

Hàm băm mật mã có thể tạo cùng một checksum cho các phần dữ liệu khác nhau. Khi điều này xảy ra, nó được gọi là xung đột. Đây là một vấn đề lớn khi xem xét việc hàm băm mật mã phải tạo ra checksum duy nhất cho mỗi dữ liệu nhập vào nó.

Xung đột có thể xảy ra là do mỗi hàm băm mật mã tạo ra một giá trị có độ dài cố định bất kể dữ liệu đầu vào là gì. Ví dụ, hàm băm mật mã MD5 tạo ra 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983e10adc3949ba59abbe56e057 cho ba khối dữ liệu khác nhau.

Checksum đầu tiên là từ 12345. Checksum thứ hai được tạo từ hơn 700 chữ cái và số và checksum thứ ba là từ 123456. Cả ba đầu vào có độ dài khác nhau, nhưng kết quả luôn chỉ dài 32 ký tự kể vì checksum MD5 được sử dụng.

Không có giới hạn đối với số lượng checksum có thể được tạo vì mỗi thay đổi nhỏ trong đầu vào được cho là tạo ra checksum hoàn toàn khác nhau. Bởi vì có giới hạn về số lượng checksum mà một hàm băm mật mã có thể tạo ra, luôn có khả năng bạn sẽ gặp phải xung đột.

Đây là lý do tại sao các hàm băm mật mã khác đã được tạo. Trong khi MD5 chỉ tạo ra giá trị 32 ký tự, SHA-1 tạo ra những 40 ký tự và SHA-2 (512) tạo ra giá trị với 128 ký tự. Số lượng ký tự mà checksum có càng nhiều thì khả năng xảy ra xung đột sẽ càng ít.

Thứ Hai, 26/08/2019 15:20
2,73 👨 218