Cách sử dụng
- Nhập văn bản, chuyển Đầu vào dạng sang Hex để nhập byte hex, hoặc nhấp Mở tệp.
- SHA-1 đã được chọn sẵn; hãy đổi ô chọn Thuật toán nếu bạn muốn so sánh với một hàm băm khác.
- Ở mục Đầu ra dạng, chọn hex (chữ thường) như sha1sum và Git hiển thị, HEX (chữ hoa) hoặc Base64.
- Dán giá trị SHA-1 mong đợi vào ô So sánh với; trang sẽ hiển thị Khớp hoặc Không khớp.
SHA-1 là gì?
SHA-1 (Secure Hash Algorithm 1) do NSA thiết kế và được NIST công bố năm 1995 trong FIPS 180-1, thay thế cho SHA-0 vốn chỉ tồn tại trong thời gian ngắn. Hiện nay SHA-1 được đặc tả trong FIPS 180-4, còn RFC 3174 mô tả thuật toán kèm mã C mẫu. SHA-1 xử lý các khối 512 bit qua 80 vòng và cho ra giá trị băm dài 160 bit: 40 ký tự hex hoặc 28 ký tự Base64.
Như mọi hàm băm, SHA-1 là hàm một chiều. Giá trị băm không thể giải mã, mà chỉ có thể được khớp bằng cách băm các phỏng đoán. Đó chính là cách hàng loạt mã băm mật khẩu SHA-1 không có salt bị rò rỉ từ LinkedIn năm 2012 đã bị bẻ khóa; mật khẩu cần được lưu bằng Argon2, scrypt, bcrypt hoặc PBKDF2.
SHAttered: vì sao SHA-1 không còn được khuyến dùng
Tháng 2 năm 2017, các nhà nghiên cứu của CWI Amsterdam và Google công bố SHAttered, va chạm SHA-1 thực tế đầu tiên: hai tệp PDF khác nhau có cùng mã băm, được tìm ra sau khoảng 2^63 phép tính SHA-1. Năm 2020, Gaëtan Leurent và Thomas Peyrin ("SHA-1 is a Shambles") dùng một va chạm tiền tố chọn trước để chứng minh có thể giả mạo chữ ký SHA-1 trên khóa PGP, với chi phí nằm trong tầm tay của một kẻ tấn công có nguồn tài chính dồi dào.
- Các CA công khai đã ngừng cấp chứng chỉ TLS dùng SHA-1 từ năm 2016, và các trình duyệt ngừng tin cậy những chứng chỉ này từ đầu năm 2017.
- NIST không cho phép dùng SHA-1 cho chữ ký số mới từ năm 2013 và dự kiến loại bỏ hoàn toàn thuật toán này trước cuối năm 2030.
- Phần lớn kho Git vẫn định danh các đối tượng bằng SHA-1, được tính bằng một bản cài đặt gia cố có khả năng phát hiện các nỗ lực tạo va chạm; Git cũng có thể tạo kho dùng SHA-256.
Va chạm không phá vỡ được HMAC, nên HMAC-SHA1 vẫn xuất hiện trong mã TOTP và chữ ký webhook kiểu cũ; bạn có thể tính nó bằng công cụ tạo HMAC. Với mọi thứ mới, hãy chọn SHA-256.
ID đối tượng Git, Base64 và bảng mã văn bản
ID của một blob trong Git không phải là SHA-1 của riêng tệp. Git băm một phần đầu (header) gồm blob, một dấu cách, kích thước tính bằng byte và một byte 0, theo sau là nội dung. Để tái tạo giá trị này ở đây, hãy chuyển Đầu vào dạng sang Hex và thêm các byte của phần đầu: với hello kèm một ký tự xuống dòng, đầu vào hex là 626c6f6220360068656c6c6f0a.
$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a
SHA-1 thường được hiển thị ở dạng hex chữ thường. Base64 xuất hiện trong quá trình bắt tay WebSocket, nơi Sec-WebSocket-Accept là giá trị SHA-1 ở dạng Base64 của khóa phía client nối với một GUID cố định, và trong các giá trị mật khẩu {SHA} của LDAP. Hãy nhớ rằng mã băm được tính trên byte: văn bản có chữ cái mang dấu sẽ có một mã băm SHA-1 trong UTF-8 và một mã băm khác trong Windows-1252.
SHA-1 trên dòng lệnh và trong mã nguồn
sha1sum file.zip # Linux
shasum file.zip # macOS (mặc định là SHA-1)
certutil -hashfile file.zip SHA1 # Windows
Get-FileHash file.zip -Algorithm SHA1 # PowerShell
# Python
hashlib.sha1(data).hexdigest()
// Node.js
crypto.createHash('sha1').update(data).digest('hex')
Trang này tính SHA-1 bằng Web Crypto API tích hợp sẵn trong trình duyệt, nên dữ liệu đầu vào không bao giờ rời khỏi thiết bị của bạn. Bảng Tất cả thuật toán hiển thị các giá trị MD5, SHA-256, SHA-384, SHA-512 và CRC của cùng đầu vào.
Ví dụ
| Đầu vào (UTF-8) | SHA-1 |
|---|---|
Hello, World! | 0a0a9f2a6772942557ab5355d76af442f8f65e01 |
Base64.is | 6c667ee2efd2020349eed40efa07c26683f613c8 |
你好 | 440ee0853ad1e99f962b63e459ef992d7c211722 |
Câu hỏi thường gặp
SHA-1 có còn an toàn để sử dụng không?
Không, ở những nơi kẻ tấn công có thể chọn hoặc tác động đến đầu vào, như chữ ký số và chứng chỉ, vì ngày nay đã có thể tạo ra va chạm SHA-1. SHA-1 vẫn phát hiện được hư hỏng ngẫu nhiên, và HMAC-SHA1 không bị ảnh hưởng bởi va chạm. Với các dự án mới, hãy dùng SHA-256 hoặc SHA-512.
Có thể đảo ngược mã băm SHA-1 không?
Không. Không có khóa và cũng không có thao tác giải mã nào. Các trang tra cứu chỉ tìm được những đầu vào đã có sẵn trong bảng chứa từ thông dụng và mật khẩu bị rò rỉ của họ, vì vậy một đầu vào ngẫu nhiên đủ dài thì an toàn trước chúng, còn một mật khẩu ngắn thì không.
Mã băm SHA-1 dài bao nhiêu?
=. RIPEMD-160 có cùng độ dài, còn mã băm mật khẩu của MySQL 4.1 trở lên là một dấu hoa thị theo sau là 40 ký tự hex. Công cụ nhận dạng mã băm liệt kê các khả năng cho một chuỗi bất kỳ.Làm sao để kiểm tra tệp với giá trị SHA-1 được công bố?
Nhấp Mở tệp, rồi dán giá trị được công bố vào ô So sánh với. Công cụ chấp nhận cả hex chữ hoa, hex chữ thường lẫn Base64, và trang sẽ hiển thị Khớp hoặc Không khớp.
SHA-1 và SHA-256 khác nhau thế nào?
Cả hai đều do NIST công bố, nhưng SHA-256 thuộc họ SHA-2 mới hơn, có đầu ra 256 bit và chưa có cách tấn công thực tế nào được biết đến. SHA-1 có đầu ra ngắn hơn và khả năng chống va chạm của nó đã bị phá vỡ.