ในบทที่ 6 ของ การเข้ารหัสที่จริงจังพวกเขาเขียนเกี่ยวกับ ฟังก์ชั่นฟองน้ำ:
- XORs บล็อกข้อความแรก M1 ถึง H0 ซึ่งเป็นค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าของสถานะภายใน (เช่น สตริงที่เป็นศูนย์ทั้งหมด) บล็อกข้อความมีขนาดเท่ากันทั้งหมดและเล็กกว่าสถานะภายใน
- การเรียงสับเปลี่ยน P แปลงสถานะภายในเป็นค่าอื่นที่มีขนาดเท่ากัน
- XOR บล็อก M2 และใช้ P อีกครั้ง จากนั้นทำซ้ำสำหรับข้อความบล็อก M3, M4 และอื่นๆ สิ่งนี้เรียกว่า ขั้นตอนการดูดซับ.
- หลังจากฉีดบล็อกข้อความทั้งหมดแล้ว จะใช้ P อีกครั้งและแยกบล็อกบิตออกจากสถานะเพื่อสร้างแฮช (หากคุณต้องการแฮชที่ยาวขึ้น ให้ใช้ P อีกครั้งและแตกบล็อก) สิ่งนี้เรียกว่า บีบเฟส.
ความปลอดภัยของฟังก์ชันฟองน้ำขึ้นอยู่กับความยาวของสถานะภายในและความยาวของบล็อก ถ้าบล็อคข้อความยาว r-bit และสถานะภายในยาว w-bit แสดงว่ามี c = w â r บิตของสถานะภายในที่ไม่สามารถแก้ไขได้โดยบล็อคข้อความ ค่าของ c เรียกว่าความจุของฟองน้ำ และระดับความปลอดภัยที่รับประกันโดยฟังก์ชันฟองน้ำคือ c/2 ตัวอย่างเช่น หากต้องการเข้าถึงการรักษาความปลอดภัย 256 บิตด้วยบล็อกข้อความ 64 บิต สถานะภายในควรเป็น w = 2 Ã 256 + 64 = 576 บิต แน่นอนว่าระดับความปลอดภัยยังขึ้นอยู่กับความยาว n ของค่าแฮชด้วย ดังนั้น ความซับซ้อนของการโจมตีแบบปะทะกันจึงเป็นค่าที่น้อยที่สุดระหว่าง 2^{n/2} ถึง 2^{c/2} ในขณะที่ความซับซ้อนของการโจมตีแบบพรีอิมเมจครั้งที่สองคือค่าที่น้อยที่สุดระหว่าง 2^n ถึง 2^{c/ 2}.
เพื่อความปลอดภัย การเรียงสับเปลี่ยน P ควรมีลักษณะสุ่ม
การเปลี่ยนแปลงโดยไม่มีอคติทางสถิติและไม่มีโครงสร้างทางคณิตศาสตร์
ที่จะทำให้ผู้โจมตีสามารถคาดการณ์ผลลัพธ์ได้ เช่นเดียวกับการบีบอัด
แฮชตาม functionâ ฟังก์ชันฟองน้ำก็แพดข้อความเช่นกัน แต่
การเติมนั้นง่ายกว่าเพราะไม่จำเป็นต้องใส่ข้อความ
ความยาว. บิตข้อความสุดท้ายตามด้วย 1 บิตและมาก
เลขศูนย์เท่าที่จำเป็น
เดอะ หน้าวิกิพีเดีย ทึบเกินไปที่จะเปลี่ยนเป็นรหัสเช่นกัน
สงสัยว่ามีใครสามารถแสดงการสาธิตอย่างง่ายของฟังก์ชันฟองน้ำในโลกแห่งความเป็นจริงได้หรือไม่ เพื่อนำเสนอหัวข้อย่อยทั้ง 4 ข้อนี้เกี่ยวกับวิธีการทำงาน
บาง คำถาม ที่เกี่ยวข้องกับการนำไปใช้:
- ขนาดบล็อกคืออะไร? สมมติว่า 512
- ข้อมูลอินพุตคืออะไร (utf-8 ฯลฯ ) มันสำคัญหรือไม่?
- XOR บล็อกข้อความแรกด้วยอะไร หมายเลขอะไร? และบล็อกในอนาคตด้วย?
ฉันไม่รู้ว่าจะเริ่มจากตรงไหน ไม่พบข้อมูลโค้ดที่เกี่ยวข้องกับ "ฟังก์ชันฟองน้ำ" เช่นกัน
เดอะ กระดาษฟังก์ชั่น Keccak Sponge เป็นคณิตศาสตร์ที่ค่อนข้างหนักเกินไปที่จะสามารถรวบรวมการใช้งานซอฟต์แวร์ที่ชัดเจนได้ (อย่างน้อยสำหรับฉัน)
เพียงแค่มองหาพื้นฐานที่เปลือยเปล่า บางที นี้ ง่ายที่สุดเท่าที่จะทำได้?