Trong Chương 6 của Mật mã nghiêm trọng, họ viết về chức năng bọt biển:
- Nó XOR khối thông báo đầu tiên, M1, thành H0, một giá trị ban đầu được xác định trước của trạng thái bên trong (ví dụ: chuỗi toàn không). Các khối tin nhắn đều có cùng kích thước và nhỏ hơn trạng thái bên trong.
- Một hoán vị, P, biến đổi trạng thái bên trong thành một giá trị khác có cùng kích thước.
- Nó XOR khối M2 và áp dụng lại P, sau đó lặp lại điều này cho các khối thông báo M3, M4, v.v. Đây được gọi là giai đoạn hấp thụ.
- Sau khi tiêm tất cả các khối thông báo, nó áp dụng lại P và trích xuất một khối bit từ trạng thái để tạo thành hàm băm. (Nếu bạn cần hàm băm dài hơn, hãy áp dụng lại P và trích xuất một khối.) Đây được gọi là giai đoạn ép.
Độ an toàn của hàm xốp phụ thuộc vào độ dài của trạng thái bên trong của nó và độ dài của các khối. Nếu các khối thông báo dài r-bit và trạng thái bên trong dài w-bit, thì có c = w â r bit của trạng thái bên trong không thể sửa đổi bởi các khối thông báo. Giá trị của c được gọi là khả năng của miếng bọt biển và mức độ bảo mật được đảm bảo bởi hàm miếng bọt biển là c/2. Ví dụ: để đạt được mức bảo mật 256 bit với các khối thông báo 64 bit, trạng thái bên trong phải là w = 2 Ã 256 + 64 = 576 bit. Tất nhiên, mức độ bảo mật cũng phụ thuộc vào độ dài n của giá trị băm. Do đó, độ phức tạp của một cuộc tấn công va chạm là giá trị nhỏ nhất trong khoảng từ 2^{n/2} đến 2^{c/2}, trong khi độ phức tạp của một cuộc tấn công tạo ảnh trước thứ hai là giá trị nhỏ nhất trong khoảng từ 2^n đến 2^{c/ 2}.
Để an toàn, hoán vị P phải hoạt động như một ngẫu nhiên
hoán vị, không có sai lệch thống kê và không có cấu trúc toán học
điều đó sẽ cho phép kẻ tấn công dự đoán kết quả đầu ra. Như trong nén
hàm băm dựa trên hàm, hàm miếng bọt biển cũng đệm thông báo, nhưng
phần đệm đơn giản hơn vì nó không cần bao gồm thông báo
chiều dài. Bit tin nhắn cuối cùng chỉ đơn giản là theo sau bởi một bit 1 và nhiều
số không khi cần thiết.
Các trang Wikipedia quá mờ để chuyển thành mã.
Tự hỏi liệu người ta có thể đưa ra một minh họa đơn giản về chức năng của miếng bọt biển trong thế giới thực hay không, để đưa về nhà 4 gạch đầu dòng này về cách thức hoạt động của nó.
Một số câu hỏi liên quan đến việc thực hiện nó:
- Kích thước khối là gì? Giả sử 512
- Dữ liệu đầu vào (utf-8, v.v.) là gì? Nó có quan trọng không?
- XOR khối tin nhắn đầu tiên là gì? Số gì? Và khối tương lai nữa?
Tôi thực sự không biết bắt đầu từ đâu, cũng không tìm thấy bất kỳ đoạn mã nào liên quan đến "chức năng bọt biển".
Các Giấy chức năng Keccak Sponge hơi nặng về toán học để có thể thu thập được một triển khai phần mềm rõ ràng từ nó (ít nhất là đối với tôi).
Chỉ cần tìm kiếm những điều cơ bản trần. Có lẽ cái này là đơn giản như nó có thể nhận được?