Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA
SHA-256 so với SHA-512: Kích thước từ, làm tròn và tại sao 512 có thể nhanh hơn
· Cách thức hoạt động
sha-256 mật mã hiệu suất browser-apis
SHA-512 tạo ra bản tóm tắt dài hơn nhưng thường chạy nhanh hơn trên phần cứng 64-bit. Bài đăng này giải thích sự khác biệt về cấu trúc giữa hai loại và cách SHA-384 phù hợp để bạn có thể chọn dựa trên thực tế.
Băm dài hơn, chạy nhanh hơn? — quan sát phản trực giác bắt đầu so sánh
SHA-512 tạo ra một bản tóm tắt dài hơn nhưng thường chạy nhanh hơn SHA-256 trên phần cứng 64-bit. Quan sát phản trực giác xuất phát từ thiết kế CPU: bộ xử lý được tối ưu hóa cho số học 64-bit thực thi các phép toán 64-bit nhanh hơn các phép toán 32-bit trên cùng một dữ liệu. SHA-256 hoạt động trên các từ 32 bit, trong khi SHA-512 hoạt động trên các từ 64 bit. Trên 64-bit CPU, cái sau phù hợp với phần cứng một cách tự nhiên hơn và dành ít thời gian hơn cho việc chuyển đổi và đệm kích thước từ.
Điều này vốn không làm cho SHA-512 trở nên tốt hơn cho mọi trường hợp sử dụng. Một bản tóm tắt dài hơn sẽ tốn nhiều dung lượng lưu trữ và băng thông hơn. Việc lựa chọn giữa chúng phải được thực hiện trên cơ sở yêu cầu về kích thước đầu ra và nền tảng của bạn, chứ không phải dựa trên cảm giác mơ hồ về "mới hơn" hoặc "mạnh hơn".
32-bit so với 64-bit từ — sự khác biệt về cấu trúc cốt lõi và lý do nó phù hợp với các CPU hiện đại
SHA-256 hoạt động trên các từ 32 bit trong suốt thuật toán. Lịch trình tin nhắn mở rộng 16 32 từ bit thành 64 32 từ bit. Mỗi vòng cập nhật tám biến làm việc 32-bit. Khối thông báo là 512 bits (mười sáu từ 32-bit). Đầu ra là 256 bits (tám từ 32-bit). Tất cả số học được thực hiện trên các giá trị 32-bit, với gói tràn ở 2^32.
SHA-512 hoạt động trên các từ 64-bit. Lịch trình tin nhắn mở rộng 16 64 từ bit thành 80 64 từ bit (không phải 64, như trong SHA-256). Mỗi vòng cập nhật tám biến làm việc 64-bit. Khối thông báo là 1024 bits (mười sáu từ 64-bit). Đầu ra là 512 bits (tám từ 64-bit). Tất cả số học được thực hiện trên các giá trị 64-bit, với gói tràn ở 2^64.
64 vòng so với khối 80, 512 bit so với khối 1024 bit — những gì thay đổi trên mỗi khối và trên mỗi byte
SHA-256 chạy 64 vòng mỗi khối; SHA-512 chạy 80 vòng mỗi khối. Điều này có nghĩa là SHA-512 trộn nhiều hơn trên mỗi khối. Thoạt nhìn, điều này nghe có vẻ chậm hơn. Nhưng kích thước từ và kích thước khối lớn hơn có nghĩa là SHA-512 xử lý nhiều bit hơn mỗi vòng. Đối với tệp 1 megabyte, SHA-256 xử lý các khối 1048576 / 512 = 2048, mỗi khối có 64 vòng, với tổng số 131072 vòng. SHA-512 xử lý các khối 1048576 / 1024 = 1024 khối, mỗi khối có 80 vòng, với tổng số 81920 vòng. SHA-512 thực hiện tổng cộng ít vòng hơn, mặc dù thực hiện nhiều vòng hơn trên mỗi khối.
Sự khác biệt về thời gian trên đồng hồ treo tường phụ thuộc vào việc tối ưu hóa kích thước từ của CPU. CPU với 64-bit ALU (đơn vị logic số học) sẽ thực thi các phép toán 64-bit một cách hiệu quả. Nếu cùng một CPU phải chia nhỏ các hoạt động 32-bit SHA-256 thành nhiều hoạt động vi mô hoặc chạy chúng trên một đơn vị thực thi nhỏ hơn thì chi phí cho mỗi hoạt động sẽ cao hơn. Bộ xử lý hiện đại tối ưu hóa cho các hoạt động 64-bit, khiến SHA-512 thường nhanh hơn mặc dù có nhiều vòng bổ sung trên mỗi khối.
Kích thước khối và số vòng giải thích công việc trên mỗi byte; thông lượng thực tế cần một điểm chuẩn nền tảng
Số học khối giải thích tại sao đầu ra dài hơn không có nghĩa là sẽ có nhiều công việc hơn trên mỗi byte. SHA-256 thực hiện sáu mươi bốn vòng cho mỗi khối 512 bit, trong khi SHA-512 thực hiện tám mươi vòng cho mỗi khối 1,024 bit. Thiết kế thứ hai thực hiện nhiều vòng hơn trên mỗi khối nhưng tiêu thụ gấp đôi lượng đầu vào bất cứ khi nào nó xử lý một khối.
Sự so sánh cấu trúc đó không dự đoán được điểm chuẩn trình duyệt cụ thể. Web Crypto có thể sử dụng các hướng dẫn gốc, thư viện hệ điều hành hoặc mã được tối ưu hóa khác và độ dài đầu vào sẽ thay đổi phần chi tiêu cho việc thiết lập. Đo lường môi trường mục tiêu thực tế khi thông lượng quan trọng; kho lưu trữ chỉ hỗ trợ xác nhận định tính rằng các từ rộng hơn có thể phù hợp với phần cứng 64-bit.
Độ dài đầu ra ảnh hưởng đến các thuộc tính bảo mật và biểu diễn mà không có ước tính công việc tấn công không có nguồn gốc
SHA-384 không phải là một thuật toán riêng biệt; đó là SHA-512 với hai thay đổi: hằng số băm ban đầu khác nhau và đầu ra bị cắt ngắn thành 384 bits (48 bytes) thay vì 512 bits đầy đủ. Việc cắt bớt này có lợi cho việc chống lại các cuộc tấn công kéo dài độ dài: kẻ tấn công không thể mở rộng thông báo bằng cách thêm dữ liệu vào thư gốc vì không xác định được trạng thái 512-bit đầy đủ (chỉ 384 bits trong số đó được tiết lộ).
SHA-256 dễ bị tấn công mở rộng độ dài: nếu bạn biết bản tóm tắt của một tin nhắn và biết độ dài của tin nhắn, bạn có thể nối thêm dữ liệu vào tin nhắn và tính toán bản tóm tắt của tin nhắn mở rộng mà không cần biết nội dung của thư gốc. Điều này quan trọng trong các bối cảnh bảo mật cụ thể, chẳng hạn như triển khai HMAC sử dụng cấu trúc yếu. SHA-384, mặc dù dựa trên SHA-512, nhưng không dễ bị tấn công vì trạng thái đầy đủ không bị lộ. Điều này làm cho SHA-384 trở nên hữu ích trong các bối cảnh mà SHA-256 được coi là rủi ro.
Ví dụ đã hoạt động - băm một đầu vào với cả ba đầu vào và so sánh độ dài tóm tắt cạnh nhau
Kích thước đầu ra là sự khác biệt đơn giản nhất. SHA-256 tạo ra 32 bytes (64 ký tự hex); SHA-384 tạo ra 48 bytes (96 ký tự hex); SHA-512 tạo ra 64 bytes (128 ký tự hex). Để lưu trữ trong URL hoặc JSON, thông báo dài hơn sẽ chiếm nhiều dung lượng hơn. Đối với khả năng chống va chạm, đầu ra dài hơn làm cho việc tìm ra va chạm khó hơn theo cấp số nhân. Đầu ra rộng hơn cung cấp không gian kết quả lớn hơn, trong khi hệ quả trực tiếp của sản phẩm lại dễ đo lường hơn: nhiều byte hơn trong các trường lưu trữ, URL và giao thức. Bài viết này không đính kèm ước tính về công việc tấn công vì không có ước tính nào được lấy từ bằng chứng kho lưu trữ.
Một số hệ thống và tiêu chuẩn chỉ định rõ ràng SHA-256; những người khác sử dụng SHA-512 hoặc cho phép lựa chọn. SSH dấu vân tay mặc định là SHA-256; thông báo hình ảnh vùng chứa có thể là SHA-256 hoặc SHA-512. Trình quản lý gói như npm sử dụng SHA-512 để đảm bảo tính toàn vẹn của nguồn phụ. Sự lựa chọn thường được thực hiện cho bạn, nhưng hiểu được sự khác biệt cho phép bạn lựa chọn một cách khôn ngoan khi bạn có tiếng nói.
Điều này không bao gồm những gì - số liệu thông lượng, phụ thuộc vào CPU, trình biên dịch và kích thước đầu vào; bài viết vẫn có chất lượng
Công cụ tính hàm băm ToolAcre SHA cung cấp SHA-256, SHA-384 và SHA-512. Băm cùng một đầu vào với cả ba và quan sát độ dài đầu ra. Tất cả các bản tóm tắt sẽ hoàn toàn khác nhau, điều này được mong đợi: các thuật toán sử dụng các hằng số tròn khác nhau, lịch trình tin nhắn khác nhau và các hoạt động trộn khác nhau. Số byte được hiển thị cùng với thông báo chỉ phản ánh kích thước đầu vào chứ không phản ánh kích thước đầu ra; cả ba thuật toán đều xử lý các byte đầu vào giống nhau thông qua các chuỗi vòng tương ứng của chúng.
Thử nghiệm trên phần cứng của riêng bạn sẽ cho thấy sự khác biệt về hiệu suất. Băm một tệp lớn (trường hợp thử nghiệm nhiều megabyte) với mỗi thuật toán và thời gian cho kết quả. Trên các hệ thống 64-bit hiện đại, SHA-512 thường sẽ hoàn thành trong thời gian đồng hồ treo tường ít hơn, mặc dù số byte có thể gợi ý khác. Trên hệ thống 32 bit hoặc bộ xử lý nhúng, SHA-256 có thể nhanh hơn vì CPU của ALU được tối ưu hóa cho các hoạt động 32 bit.
Bài học rút ra: chọn theo kích thước đầu ra và nền tảng — máy tính băm ToolAcre SHA cung cấp SHA-256, SHA-384 và SHA-512 để bạn có thể thấy cả ba trên cùng một đầu vào
Sức mạnh mật mã tách biệt với hiệu suất. Kho lưu trữ không đánh dấu SHA-256 là bị hỏng và chọn nó làm mặc định cho mục đích chung. Bằng chứng về sản phẩm đó không biện minh cho việc gọi bất kỳ sản phẩm nguyên thủy nào đều an toàn trên toàn cầu; sự phù hợp vẫn phụ thuộc vào việc xây dựng và mô hình mối đe dọa. Việc chuyển từ SHA-256 sang SHA-512 không phải là nâng cấp bảo mật; đó là sự đánh đổi giữa lưu trữ và hiệu suất. Nếu hệ thống của bạn chỉ định SHA-256 và bạn cần thuật toán chính xác đó, hãy sử dụng thuật toán đó. Nếu bạn có quyền lựa chọn và muốn thông báo dài hơn hoặc bạn biết nền tảng của mình là 64-bit thì SHA-512 là một lựa chọn hợp lệ.
Việc triển khai Web Crypto của trình duyệt tính toán cả ba thông qua crypto.subtle.digest. Thiết bị, phiên bản trình duyệt và tải hệ thống nền của bạn đều ảnh hưởng đến hiệu suất được quan sát. Nhưng điểm mấu chốt vẫn là: SHA-256 và SHA-512 không cạnh tranh cho danh hiệu "hàm băm tốt nhất". Chúng là những công cụ được thiết kế cho các yêu cầu đầu ra khác nhau và việc lựa chọn giữa chúng được thực hiện trên cơ sở những gì hệ thống của bạn cần chứ không dựa trên những tuyên bố chung về hiệu suất.