Hàm băm mật mã

Định nghĩa hàm băm mật mã

Hàm băm mật mã là một loại thuật toán có thể chạy trên một đoạn dữ liệu, như một tệp riêng lẻ hoặc một mật khẩu, để tạo ra một giá trị được gọi là tổng kiểm tra.

Việc sử dụng chính một 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 tệp có thể được đảm bảo chỉ giống hệt nhau nếu tổng kiểm tra được tạo ra từ mỗi tệp, 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 MD5SHA-1 , mặc dù nhiều hàm băm khác cũng tồn tại.

Lưu ý: Hàm băm mật mã thường được gọi là hàm băm ngắn, nhưng đó không phải là chính xác về mặt kỹ thuật. Hàm băm là một thuật ngữ chung chung hơn thường được sử dụng để bao gồm các hàm băm mật mã cùng với các loại thuật toán khác như kiểm tra dự phòng tuần hoàn.

Các hàm băm mật mã: Một ca sử dụng

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

Sử dụng một máy tính tổng kiểm tra , bạn tính toán một tổng kiểm tra bằng cách sử dụng một hàm băm mật mã cụ thể (nói SHA-2) và sau đó so sánh nó với một công bố trên trang web của Mozilla.

Nếu chúng bằng nhau, bạn có thể chắc chắn rằng bản tải xuống bạn có là bản Mozilla bạn dự định có.

Xem tờ séc là gì? để biết thêm về các máy tính đặc biệt này, cộng thêm nhiều ví dụ về cách sử dụng tổng kiểm tra để đảm bảo các tệp bạn tải xuống thực sự là những gì bạn mong đợi.

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

Các hàm băm mật mã được thiết kế để ngăn chặn khả năng đảo ngược các tổng kiểm tra mà chúng tạo ra trở lại các văn bản gốc.

Tuy nhiên, mặc dù chúng hầu như không thể đảo ngược, điều đó không có nghĩa là chúng được đảm bảo 100% để bảo vệ dữ liệu.

Một cái gì đó gọi là một bảng cầu vồng có thể được sử dụng để nhanh chóng tìm ra bản rõ của một tổng kiểm tra. Các bảng Rainbow là các từ điển cơ bản liệt kê hàng ngàn, hàng triệu, hoặc thậm chí hàng tỷ từ này cùng với giá trị bản rõ của chúng.

Trong khi điều này không phải là kỹ thuật đảo ngược thuật toán băm mật mã, nó cũng có thể là vì nó rất đơn giản để làm. Trong thực tế, vì không có bảng cầu vồng nào có thể liệt kê ra mọi kiểm tra có thể tồn tại, 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à một phiên bản đơn giản của một bảng cầu vồng để chỉ ra cách một người sẽ làm việc khi sử dụng hàm băm mật mã SHA-1:

Văn bản thô SHA-1 Checksum
12345 8cb2237d0679ca88db6464eac60da96345513964
mật khẩu1 e38ad214943daad1d64c102faec29de4afe9da3d
tôi yêu con chó của tôi a25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

Đối với những giá trị này được tìm ra bằng cách sử dụng checksum, sẽ yêu cầu hacker hiểu được thuật toán băm mật mã nào được sử dụng để tạo ra chúng.

Để 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 cho thuật toán băm mật mã sau khi giá trị được tạo nhưng trước khi nó được lưu trữ.

Điều này tạo ra một giá trị mới mà chỉ máy chủ web hiểu và điều đó không khớp chính xác với tổng kiểm tra ban đầu.

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

Làm như vậy sẽ giúp hạn chế tính hữu dụng của một hack nơi tất cả các tổng kiểm tra đều bị đánh cắp.

Một lần nữa, ý tưởng ở đây là thực hiện một chức năng chưa biết để nếu hacker biết thuật toán băm mật mã nhưng không phải là thuật toán tùy chỉnh này, thì việc biết mật khẩu là vô ích.

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

Tương tự như bảng cầu vồng là cách cơ sở dữ liệu lưu mật khẩu người dùng. Khi mật khẩu của bạn được nhập vào, tổng kiểm tra được tạo ra và so sánh với mật khẩu được ghi lại 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 đều giống nhau.

Cho rằng một hàm băm mật mã tạo ra một checksum không đảo ngược, điều đó có nghĩa là bạn có thể làm cho mật khẩu của bạn đơn giản như 12345 , thay vì 12 @ 34 $ 5 , đơn giản là vì bản thân kiểm tra không thể hiểu được? Nó chắc chắn không , và đây là lý do tại sao ...

Như bạn có thể thấy, hai mật khẩu này đều không thể giải mã chỉ bằng cách nhìn vào tổng kiểm tra:

MD5 cho 12345: 827ccb0eea8a706c4c34a16891f84e7b

MD5 cho 12 @ 34 $ 5: a4d3cc004f487b18b2ccd4853053818b

Vì vậy, ngay từ cái nhìn đầu tiên bạn có thể nghĩ rằng nó hoàn toàn tốt để sử dụng một trong các mật khẩu này. Điều này chắc chắn đúng nếu một 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 MD5 checksum (mà không ai làm), nhưng không đúng nếu một lực lượng vũ phu hoặc tấn công từ điển được thực hiện (đó là một chiến thuật phổ biến).

Một cuộc tấn công bạo lực là khi nhiều đâm ngẫu nhiên được thực hiện tại đoán một mật khẩu. Trong trường hợp này, sẽ rất dễ đoán "12345", nhưng khá khó để tìm ra con số khác một cách ngẫu nhiên. Một cuộc tấn công từ điển 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 thông dụng (và ít được sử dụng thường xuyên hơn), "12345" chắc chắn là một mật khẩu sẽ được thử.

Vì vậy, mặc dù các hàm băm mật mã sản xuất khó khăn để kiểm tra không thể đoán được, bạn vẫn nên sử dụng một mật khẩu phức tạp cho tất cả tài khoản người dùng trực tuyến và địa phương của bạn.

Mẹo: Xem Ví dụ về Mật khẩu yếu và mạnh nếu bạn không chắc liệu mật khẩu của bạn có được coi là mật khẩu mạnh hay không.

Thông tin thêm về 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 hàm này hoạt động theo những cách rất khác nhau.

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

Giống như mô tả ở trên, các hàm băm mật mã hoạt động khác nhau ở chỗ các checksums không được đảo ngược với mật khẩu băm đặc biệt như cách các tệp được mã hóa được đọc với mật khẩu giải mã đặc biệt. Chức năng băm mật mã mục đích duy nhất phục vụ là so sánh hai phần dữ liệu, như khi tải xuống tệp, lưu trữ mật khẩu, kéo dữ liệu từ cơ sở dữ liệu, v.v.

Có thể cho một hàm băm mật mã để tạo ra cùng một tổng kiểm tra cho các phần dữ liệu khác nhau. Khi điều này xảy ra, nó được gọi là va chạm. Rõ ràng, đây là một vấn đề lớn khi xem xét toàn bộ điểm của một hàm băm mật mã là tạo ra các tổng kiểm tra hoàn toàn độc đáo cho mỗi dữ liệu được nhập vào nó.

Lý do va chạm 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. Ví dụ: hàm băm mật mã MD5 tạo 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983e10adc3949ba59abbe56e057f20f883e cho ba khối dữ liệu hoàn toàn khác nhau.

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

Như bạn có thể thấy, hầu như không có giới hạn về số lượng tổng kiểm tra có thể được tạo ra vì mỗi thay đổi nhỏ trong đầu vào được cho là tạo ra một tổng kiểm tra hoàn toàn khác nhau. Tuy nhiên, 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 một va chạm.

Đây là lý do tại sao các hàm băm mật mã khác đã được tạo. Trong khi MD5 tạo ra một giá trị 32 ký tự, SHA-1 tạo ra 40 ký tự và SHA-2 (512) tạo ra 128. Số ký tự kiểm tra càng lớn thì khả năng xảy ra va chạm càng ít bởi vì nó cung cấp nhiều chỗ hơn cho giá trị duy nhất.