Điểm:0

Làm thế nào để thực hiện một "chức năng bọt biển" cơ bản?

lá cờ tn

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:

  1. 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.
  2. 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.
  3. 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ụ.
  4. 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?

Maarten Bodewes avatar
lá cờ in
Tôi đã đặt câu hỏi ít cụ thể hơn về JavaScript, vì điều đó sẽ lạc đề ở đây; các câu hỏi bạn có về việc triển khai phải theo chủ đề. Lưu ý rằng việc cung cấp mã mẫu vẫn chưa được xem xét trong chủ đề ở đây.
Lance avatar
lá cờ tn
Ok tôi đã xóa đoạn trích, cảm ơn. Tôi đã tìm thấy [hàm bọt biển keccak ở dạng có thể đọc được](https://github.com/lancejpollard/hash/blob/make/lib/keccak-sponge.c), nhưng nó khá dày đặc và có liên quan, chức năng bọt biển có thể không chỉ rất đơn giản để chứng minh nó hoạt động như thế nào?
Maarten Bodewes avatar
lá cờ in
Ừ chắc chắn. Có thể có sẵn các triển khai đơn giản (ví dụ: có các thông số kỹ thuật AES được đơn giản hóa được sử dụng cho mục đích học tập), nhưng tôi không biết. Không chắc liệu các chức năng bọt biển khác có được áp dụng nhiều hơn hay không. Spritz chắc chắn là đơn giản một cách có chủ ý, vì vậy có thể hãy xem nó *cho mục đích học tập*. Tuy nhiên, không chắc liệu chức năng miếng bọt biển có được tách ra khỏi mật mã luồng trong quá trình triển khai hay không. SPONGENT trông cũng khá đơn giản. Tôi cũng đã thấy một bài báo trong đó hàm băm được sử dụng làm hàm cơ bản. Tất nhiên, điều đó hơi lạ, nhưng nó có thể hữu ích cho mục đích học tập
kelalaka avatar
lá cờ in
Bạn đã quên một phần quan trọng của điều này 1. Mỗi đội phải gửi mã cho cuộc thi SHA-3, 2. Tiêu chuẩn SHA-3 được đưa ra bởi [NIST](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST .FIPS.202.pdf) và họ cũng có các vectơ kiểm tra. Tôi có thể gọi đây là bản sao của [Làm việc từng bước với đầu vào ví dụ cho Hàm băm NIST như SHA-1, SHA-2 và SHA-3](https://crypto.stackexchange.com/q/95783 /18298)
Maarten Bodewes avatar
lá cờ in
Tôi giả định rằng việc triển khai tham chiếu Keccak sẽ không đủ "đơn giản" và được biết đến, nhưng chắc chắn rằng bạn có thể sử dụng các chức năng của việc triển khai ref hoặc một cổng ngôn ngữ cụ thể - nếu đó là câu trả lời thì chắc chắn ....
lá cờ kr
Điều này có trả lời câu hỏi của bạn không? [Cấu tạo miếng bọt biển theo thuật ngữ đơn giản là gì?](https://crypto.stackexchange.com/questions/83258/what-is-the-sponge-construction-in-simple-terms)
Lance avatar
lá cờ tn
Không, tôi đang tìm cách triển khai kỹ thuật, lý tưởng nhất là bằng mã hoặc mã giả thuộc một số loại.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.