Các dòng digest có dạng “THUẬT TOÁN hash” để bạn có thể sao chép vào ghi chú phát hành hoặc manifest tải xuống.
Trình tạo băm — mọi thuật toán được giải thích từ đầu
Trong một câu: hàm băm mật mã là một máy xay một chiều — nó nhận bất kỳ số byte nào và nén chúng thành một dấu vân tay độ dài cố định, sao cho cùng đầu vào luôn cho cùng dấu vân tay, nhưng dấu vân tay không cho bạn biết cách dựng lại đầu vào. Trang này chạy mười một thuật toán như vậy hoàn toàn trong tab trình duyệt của bạn.
Mỗi thuật toán dưới đây được giải thích theo cùng bốn bước: nó là gì bằng lời đơn giản, trực giác về cách hoạt động mà không cần công thức, có nên vẫn dùng ngày nay không, và những lỗi mà người ta hay mắc nhất khi dùng nó.
MD5
Đây là gì. MD5 (1992) nén mọi đầu vào thành một dấu vân tay 128-bit (32 ký tự hex). Nó được thiết kế để nhanh trên các máy tính của những năm 1990, và đúng là như vậy — chính vì thế nó vẫn có ở khắp nơi: trang tải phần mềm, bộ nhớ đệm khử trùng tệp, khóa cơ sở dữ liệu cũ.
Cách hoạt động, một cách trực quan. Đầu vào được cắt thành các khối 64 byte. Mỗi khối được khuấy vào một trạng thái lăn 128-bit bốn lần (bốn vòng trộn hơi khác nhau), và sau khối cuối cùng trạng thái được in ra thành digest. Việc khuấy được xây từ phép cộng, phép xoay và tra bảng — rẻ ngày đó, rẻ bây giờ.
Có nên dùng không? Với checksum mà không ai đang cố lừa bạn — phát hiện tải xuống bị hỏng, tìm tệp trùng — thì có, nó vẫn báo hỏng rất chính xác. Với mọi thứ có tính đối kháng, không: từ năm 2004 các nhà nghiên cứu có thể tạo hai tệp khác nhau có cùng MD5 chỉ trong vài giây, và các vụ giả mạo chứng chỉ thật sự dùng va chạm MD5 đã xảy ra năm 2008. Hãy coi nó như một số seri, không phải một ổ khóa.
Lỗi thường gặp. Dùng MD5 cho mật khẩu (quá nhanh — xem Trình tạo băm mật khẩu để biết thứ gì phù hợp hơn); tin một tệp vì “MD5 khớp” trong khi kẻ tấn công cũng đã công bố MD5; và dán cả dòng MD5 (file) = hash thay vì chỉ mã băm — ô Xác minh ở trên chấp nhận cả hai.
SHA-1
Đây là gì. SHA-1 (1995, NSA) tạo ra digest 160-bit (40 ký tự hex). Trong hai mươi năm, đây là hàm băm toàn vẹn mặc định của Git, chứng chỉ TLS và chữ ký PGP.
Cách hoạt động, một cách trực quan. Công thức cùng họ với MD5 nhưng có trạng thái 160-bit, 80 vòng trộn mỗi khối 64 byte, và một tập phép toán rộng hơn. Các vòng thêm vào được dùng để máy xay khó bị dịch ngược hơn.
Có nên dùng không? Không, với mọi việc có tính đối kháng. Phần bị phá trên lý thuyết trở nên thực tế vào năm 2017 khi Google tạo ra hai tệp PDF khác nhau có cùng giá trị SHA-1 (tấn công SHAttered, khoảng 6500 năm CPU). Git vẫn lưu đối tượng dưới SHA-1 nhưng chỉ coi nó như một định danh, và từ đó đã thêm phát hiện va chạm. Với công việc mới, hãy dùng SHA-256 hoặc SHA-3.
Lỗi thường gặp. Tin rằng 160 bit “vẫn đủ dài” — việc bị phá nằm ở cấu trúc bên trong, không phải ở vét cạn; và nhầm RIPEMD-160 với SHA-1 vì cả hai đều dài 40 ký tự hex (ô nhận dạng ở trên phân biệt chúng).
SHA-2: SHA-256, SHA-384 và SHA-512
Đây là gì. Họ SHA-2 (2001, NSA) là con ngựa thồ của kiểm tra toàn vẹn hiện đại. SHA-256 cho 256 bit (64 ký tự hex), SHA-512 cho 512 bit, còn SHA-384 là SHA-512 với kết quả được cắt còn 384 bit — hữu ích khi một giao thức bắt buộc thẻ ngắn hơn.
Cách hoạt động, một cách trực quan. Các khối 64 byte (hoặc 128 byte với biến thể 512-bit) được gấp vào một trạng thái 8 từ qua 64 (hoặc 80) vòng các bước cộng-xoay-trộn. Không như MD5, lịch trình trước hết kéo dài mỗi khối thành một bộ đệm mở rộng, và đó là điều đã đánh bại kiểu tấn công từng phá MD5 và SHA-1. Một điều thú vị: trên CPU 64-bit SHA-512 nhanh hơn SHA-256, vì nó xử lý gấp đôi dữ liệu mỗi vòng bằng phép toán 64-bit.
Có nên dùng không? Có — SHA-256 là câu trả lời mặc định cho checksum tệp, ký mã và dấu vân tay chứng chỉ ngày nay, chưa có phá vỡ thực tế nào được biết sau hai thập kỷ phân tích. Dùng SHA-384/512 khi bạn muốn biên an toàn lớn hơn hoặc khi nền tảng chạy chúng nhanh hơn.
Lỗi thường gặp. Chỉ dùng SHA-256 cho mật khẩu — nó là một hàm băm nhanh, và tốc độ là kẻ thù ở đó (dùng bcrypt/scrypt/Argon2id); và nhầm độ dài digest với độ mạnh khi nói tới kháng va chạm đối kháng — độ dài chỉ đặt trần.
SHA-3 (SHA3-256 / SHA3-512) và Keccak-256
Đây là gì. SHA-3 (2015, được chuẩn hóa từ bản đệ trình Keccak bởi Bertoni, Daemen, Peeters và Van Assche) là tiêu chuẩn băm thứ ba của NIST. Nó không chia sẻ gì với cấu trúc bên trong của SHA-2 — được chọn chính vì đây là một phương án dự phòng độc lập, đề phòng SHA-2 có ngày bị phá.
Cách hoạt động, một cách trực quan. Thay vì khuấy các khối qua một trạng thái nhỏ, Keccak lặp đi lặp lại kiểu “thấm và vắt”: đầu vào được hấp thụ từng bit vào một bọt biển 5×5×64-bit, toàn bộ bọt biển được xáo bởi một hoán vị cố định (24 vòng phép toán theo bit trên toàn bộ trạng thái), rồi các bit digest được vắt ra. Hình ảnh bọt biển là toàn bộ ý tưởng: các bit dung lượng không bao giờ được xuất ra, và chính chúng khiến hàm có tính một chiều.
Keccak-256 so với SHA3-256. Chúng khác nhau đúng một byte đệm. Bản đệ trình gốc của nhóm Keccak đệm khối cuối bằng 0x01; NIST đã đổi đệm chuẩn thành 0x06 (phân tách miền mà việc dùng Keccak thời SHA-2 áp dụng). Ethereum áp dụng đệm gốc, nên “keccak256” của nó khác SHA3-256 tiêu chuẩn với mọi đầu vào. Trang này cung cấp cả hai, đánh dấu riêng từng cái.
Có nên dùng không? Có — hoặc như lựa chọn chính khi chính sách yêu cầu một thuật toán không thuộc SHA-2, hoặc ở bất cứ đâu hệ sinh thái đã dùng nó. Lỗi thường gặp: cho rằng SHA3-256 và Keccak-256 có thể thay thế cho nhau (không phải — hãy so hai dòng mà trang này tạo ra cho cùng một đầu vào); và cho rằng “SHA-3” thay thế SHA-2 — cả hai đều an toàn, SHA-2 vẫn được triển khai rộng rãi hơn.
RIPEMD-160
Đây là gì. RIPEMD-160 (1996, của tổ chức RIPE gồm các học giả châu Âu, được củng cố bởi Dobbertin, Bosselaers và Preneel) cho đầu ra 160 bit. Đây là một thiết kế hoàn toàn của châu Âu, cố ý độc lập với họ SHA do NSA thiết kế.
Cách hoạt động, một cách trực quan. Mỗi khối 64 byte được xử lý bởi hai dòng song song gồm 80 vòng với các hằng số và lượng xoay khác nhau; cuối cùng hai dòng và trạng thái cũ được kết hợp. Cấu trúc hai luồng là cách các nhà thiết kế chống lại các tấn công vi sai đang phá các hàm băm thập niên 1990 khác.
Có nên dùng không? Trong thực tế nó chủ yếu tồn tại bên trong các hệ thống khác: địa chỉ Bitcoin băm khóa công khai bằng RIPEMD-160(SHA-256(pk)), khóa OpenPGP cũ đưa nó như một tùy chọn băm, và nó là hàm băm truyền thống cho các mảnh BitTorrent v1 cùng với SHA-1. Nó không có tấn công va chạm thực tế, nhưng kích thước 160-bit khiến nó có biên an toàn nhỏ nhất trên trang này. Với việc dùng độc lập mới, hãy ưu tiên SHA-256 hoặc SHA-3.
Lỗi thường gặp. Tin rằng hai dòng song song khiến nó “mạnh gấp đôi” — kích thước đầu ra mới là thứ giới hạn khả năng kháng va chạm; và nhầm nó với SHA-1 (cùng độ dài 40 ký tự hex; ô nhận dạng ở trên liệt kê cả hai khả năng cạnh nhau).
BLAKE2b-512 và BLAKE2s-256
Đây là gì. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn và Winnerlein) là một hàm băm được thiết kế cho tốc độ phần mềm: BLAKE2b nhắm tới nền tảng 64-bit với đầu ra tối đa 512-bit, BLAKE2s nhắm tới nền tảng 32-bit với đầu ra tối đa 256-bit.
Cách hoạt động, một cách trực quan. Nó kế thừa từ BLAKE, một ứng viên chung kết của SHA-3, mà lõi là một hoán vị có khóa mượn từ mật mã dòng ChaCha: một ma trận 4×4 các từ được xáo trộn bằng cách xen kẽ các bước trộn theo cột và theo đường chéo — giống như xáo một lưới trước theo chiều từ trên xuống, rồi theo các đường chéo — trong 12 vòng (BLAKE2b) hoặc 10 vòng (BLAKE2s) mỗi khối. Vì các bước đó ánh xạ rất đẹp lên các lệnh CPU, BLAKE2 thường nhanh hơn MD5 trong khi có độ an toàn tương đương SHA-3.
Có nên dùng không? Có — đây là một thiết kế hiện đại, chưa bị phá vỡ, phổ biến trong phần mềm nhạy cảm về hiệu năng (toàn vẹn gói trong một số hệ sinh thái, lưu trữ theo nội dung, khử trùng lặp khi sao lưu) và như một MAC nhanh. Trên trang này, BLAKE2b-512 cho digest dài nhất còn BLAKE2s-256 là lựa chọn hiện đại gọn nhẹ.
Lỗi thường gặp. Nghĩ rằng “nhanh hơn thì phải yếu hơn” — BLAKE2 nhanh hơn do được thiết kế như vậy, không phải do cắt góc; và không nhận ra BLAKE2 cũng nhận một khóa (biến nó thành MAC) hoặc một chuỗi cá nhân hóa — trang này luôn dùng nó ở chế độ không khóa.
Đọc ô Xác minh và Nhận dạng
Xác minh. Ô xác minh chuẩn hóa mọi thứ bạn dán — chữ hoa hay thường, dấu hai chấm sau mỗi hai chữ số, tiền tố sha256=, dạng bao kiểu BSD SHA256 (file) = hash, dòng md5sum của GNU với tên tệp sau mã băm, và \r\n thừa — rồi tính lại mọi thuật toán được đánh dấu trên đầu vào hiện tại của bạn (văn bản hoặc tệp đã chọn) và báo từng thuật toán khớp. Kết quả khớp màu xanh nghĩa là “những byte này chính xác là thứ nhà phát hành đã băm”; màu đỏ nghĩa là không thuật toán nào được đánh dấu tạo ra nó — hãy thử đánh dấu thêm thuật toán, hoặc kiểm tra xem bản dán có bị cắt ngắn không.
Nhận dạng. Ô nhận dạng không băm gì cả; nó đọc hình dạng của chuỗi. Độ dài thu hẹp các ứng viên: 32 ký tự hex có thể là MD5, 40 có thể là SHA-1 hoặc RIPEMD-160, 64 có thể là SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 là SHA-384, 128 là SHA-512 / SHA3-512 / BLAKE2b-512. Tiền tố tiết lộ băm mật khẩu ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — đó là một loài khác (xem Trình tạo băm mật khẩu) và trang này cố ý không tính chúng. Một chuỗi có +, / và = với độ dài là bội của 4 thì nhiều khả năng là dữ liệu Base64 hơn là digest hex; công cụ giải mã nó và báo độ dài byte tương ứng.
Nhận dạng cho bạn biết được gì và không biết được gì. Độ dài và tập ký tự là dấu vân tay của định dạng, không phải bằng chứng của thuật toán: hai chuỗi 64 ký tự hex có thể đến từ SHA-256 hoặc từ SHA-512 bị cắt ngắn. Bộ nhận dạng xếp hạng các khả năng; ô Xác minh mới là nơi chứng minh byte của bạn thực sự khớp với thuật toán nào.
Tất cả mười một thuật toán trong một cái nhìn
| Thuật toán |
Cắt |
Ví dụ hư cấu |
Digest của “The quick brown fox jumps over the lazy dog” |
| MD5 | 128 bit | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 bit | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 bit | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 bit | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 bit | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 bit | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 bit | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 bit | trước 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 bit | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 bit | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 bit | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Mọi digest trong bảng trên đều được tạo bởi chính các engine của trang này — đánh dấu mọi thuật toán, nhấn Mẫu, và so sánh. Các dòng SHA-3, Keccak, RIPEMD-160 và BLAKE2 đến từ nhân crypto-shared.js tự lưu trữ được dùng trong các công cụ mật mã của trang web này.
Câu hỏi thường gặp
Nên tin ô nào khi tải một tệp? Ô Xác minh, với SHA-256 được đánh dấu — hầu hết nhà phát hành ngày nay ký bằng SHA-256 hoặc SHA-512. Ô Nhận dạng chỉ liệt kê các ứng viên; nó không bao giờ chứng minh được điều gì về tệp của bạn.
Vì sao Keccak-256 lại có trong danh sách? Vì Ethereum, Swarm và một vài hệ thống sổ cái đã chuẩn hóa theo phần đệm trước chuẩn. Nếu bạn xác minh một keccak256 của Ethereum, bạn phải dùng dòng đó, không phải SHA3-256.
Hai đầu vào khác nhau có thể có chung một digest không? Về lý thuyết, có — vô số đầu vào ánh xạ vào một tập hữu hạn các digest (nguyên lý chuồng bồ câu). Trong thực tế, việc tìm ra một cặp như vậy trước khi vũ trụ nguội đi là điều mà “kháng va chạm” nói đến, và mọi thuật toán ở trên ngoại trừ MD5 và SHA-1 vẫn đứng vững.
Băm có phải là mã hóa không? Không. Mã hóa có thể đảo ngược với một khóa; băm là một máy xay một chiều. Không có gì trên trang này có thể “giải mã” ngược lại thành văn bản của bạn — và đó là tính năng, không phải hạn chế.