อ่าน 3 นาที
ฟังก์ชั่นฟองน้ำ
ในการเข้ารหัสลับฟังก์ชันฟองน้ำหรือโครงสร้างฟองน้ำคือกลุ่มของอัลกอริธึม ที่มี สถานะภายในจำกัดซึ่งรับสตรีมบิตอินพุตที่มีความยาวใดๆ และสร้างสตรีมบิตเอาต์พุตที่มีความยาวตามต้องการ
ฟังก์ชั่นฟองน้ำ

ในการเข้ารหัสลับฟังก์ชันฟองน้ำหรือโครงสร้างฟองน้ำคือกลุ่มของอัลกอริธึม ที่มี สถานะภายในจำกัดซึ่งรับสตรีมบิตอินพุตที่มีความยาวใดๆ และสร้างสตรีมบิตเอาต์พุตที่มีความยาวตามต้องการ ฟังก์ชันฟองน้ำมีประโยชน์ทั้งในเชิงทฤษฎีและเชิงปฏิบัติ สามารถใช้ในการจำลองหรือใช้งานฟังก์ชันการเข้ารหัสลับพื้นฐาน หลาย อย่างรวมถึง แฮ ช การเข้ารหัส ลับ รหัส ยืนยันข้อความฟังก์ชันการสร้างมา ส ก์รหัสสตรีมตัวสร้างเลขสุ่มเทียมและ การเข้ารหัส ที่ได้รับการรับรอง[ 1 ]
การก่อสร้าง
ฟังก์ชันฟองน้ำสร้างขึ้นจากส่วนประกอบสามส่วน: [ 2 ]
- หน่วยความจำสถานะSซึ่งประกอบด้วย บิต bบิต
- ฟังก์ชัน
- ฟังก์ชันการเติมP
Sถูกแบ่งออกเป็นสองส่วน: ส่วนหนึ่งมีขนาดr (อัตราบิต) และส่วนที่เหลือมีขนาดc (ความจุ) โดยส่วนทั้งสองนี้จะถูกกำหนดให้เป็นRและCตามลำดับ
fสร้าง การ เรียง สับเปลี่ยนแบบสุ่มเทียมของสถานะจากS
Pจะเพิ่มบิตเข้าไปในสตริงอินพุตมากพอที่จะทำให้ความยาวของอินพุตที่เพิ่มเข้าไปนั้นเป็นจำนวนเต็มเท่าของอัตราบิตrซึ่งหมายความว่าอินพุตจะถูกแบ่งออกเป็นบล็อกขนาดrบิต
การดำเนินการ
ฟังก์ชัน sponge จะ "ดูดซับ" (ในเชิงเปรียบเทียบของฟองน้ำ ) บล็อกทั้งหมดของสตริงอินพุตที่มีการเติมช่องว่างดังนี้:
- Sถูกกำหนดค่าเริ่มต้นเป็นศูนย์
- สำหรับแต่ละบล็อกr บิต BของP (สตริง)
- Rถูกแทนที่ด้วยR XOR B (โดยใช้การดำเนินการXOR ระดับบิต )
- Sถูกแทนที่ด้วยf ( S )
ผลลัพธ์จากฟังก์ชันฟองน้ำพร้อมที่จะแสดงผล ("บีบออกมา") ดังต่อไปนี้:
- ทำซ้ำจนกว่าผลลัพธ์จะเต็ม
- ส่งออก ส่วน RของS
- Sถูกแทนที่ด้วยf ( S )
ถ้า เหลือบิตที่ต้องแสดงผลน้อยกว่าr บิต ค่า R จะถูกตัดทอน ( จะแสดงผล เพียงบางส่วนของR เท่านั้น)
อุปมาอุปไมยอีกประการหนึ่งอธิบายหน่วยความจำสถานะว่าเป็น " สระเอนโทรปี " โดยมีอินพุต "เทลงใน" สระ และฟังก์ชันการแปลงเรียกว่า "กวนสระเอนโทรปี" [ 3 ]
โปรดทราบว่าบิตอินพุตจะไม่ถูก XOR กับ ส่วน Cของหน่วยความจำสถานะ และบิตใดๆ ของC ก็จะ ไม่ถูกส่งออกโดยตรง ระดับ การเปลี่ยนแปลงของ Cโดยอินพุตขึ้นอยู่กับฟังก์ชันการแปลงf อย่างสมบูรณ์ ในแอปพลิเคชันแฮช ความต้านทานต่อการชนกันหรือการโจมตีแบบพรีอิมเมจขึ้นอยู่กับCและขนาดของมัน ("ความจุ" c ) โดยทั่วไปจะมีค่าเป็นสองเท่าของระดับความต้านทานที่ต้องการ
โครงสร้างสองชั้น
นอกจากนี้ยังสามารถดูดซับและบีบอัดสลับกันได้[ 1 ]การดำเนินการนี้เรียกว่าการสร้างแบบดูเพล็กซ์หรือการทำดูเพล็กซ์ ซึ่งสามารถเป็นพื้นฐานของระบบการเข้ารหัสแบบตรวจสอบความถูกต้องผ่านครั้งเดียวได้ นอกจากนี้ยังถูกใช้เป็นรูปแบบที่มีประสิทธิภาพของการแปลง Fiat-Shamirสำหรับโปรโตคอลบางอย่าง[ 4 ]
- สถานะSถูกกำหนดค่าเริ่มต้นเป็นศูนย์
- สำหรับแต่ละบล็อกr บิต Bของอินพุต
- Rถูก XOR กับB
- Sถูกแทนที่ด้วยf ( S )
- ขณะนี้ Rเป็นบล็อกเอาต์พุตที่มีขนาดrบิต
โหมดเขียนทับ
สามารถละเว้นการดำเนินการ XOR ระหว่างการดูดซับได้ ในขณะที่ยังคงรักษาระดับความปลอดภัย ที่เลือก ไว้[ 1 ]ในโหมดนี้ ในขั้นตอนการดูดซับ บล็อกถัดไปของอินพุตจะเขียนทับ ส่วน Rของสถานะ ซึ่งช่วยให้สามารถรักษาสถานะที่เล็กลงระหว่างขั้นตอนได้ เนื่องจาก ส่วน Rจะถูกเขียนทับอยู่แล้ว จึงสามารถทิ้งไปล่วงหน้าได้ เหลือเพียง ส่วน C เท่านั้น ที่ต้องเก็บไว้
แอปพลิเคชัน
ฟังก์ชันฟองน้ำมีประโยชน์ทั้งในเชิงทฤษฎีและเชิงปฏิบัติ ในการวิเคราะห์การเข้ารหัสเชิงทฤษฎีฟังก์ชันฟองน้ำแบบสุ่มคือโครงสร้างฟองน้ำ โดยที่fคือการเรียงสับเปลี่ยนหรือการแปลงแบบสุ่มตามความเหมาะสม ฟังก์ชันฟองน้ำแบบสุ่มสามารถจับข้อจำกัดในทางปฏิบัติของการเข้ารหัสแบบดั้งเดิมได้มากกว่า แบบจำลอง ออราเคิลแบบสุ่มที่ ใช้กันอย่างแพร่หลาย โดยเฉพาะอย่างยิ่งสถานะภายในที่จำกัด[ 5 ]
โครงสร้างฟองน้ำยังสามารถใช้สร้างพรีมิทีฟการเข้ารหัสที่ใช้งานได้จริงได้อีกด้วย ตัวอย่างเช่น ฟองน้ำการเข้ารหัส Keccakที่มีสถานะ 1600 บิต ได้รับเลือกโดยNISTให้เป็นผู้ชนะในการแข่งขัน SHA-3ความแข็งแกร่งของ Keccak มาจากการเรียงสับเปลี่ยนหลายรอบที่ซับซ้อนซึ่งผู้เขียนได้พัฒนาขึ้น[ 6 ]การออกแบบRC4 ใหม่ที่เรียกว่า Spritzอ้างอิงถึงโครงสร้างฟองน้ำเพื่อกำหนดอัลกอริทึม
สำหรับตัวอย่างอื่นๆ ฟังก์ชันฟองน้ำสามารถใช้สร้างการเข้ารหัสที่ตรวจสอบความถูกต้องพร้อมข้อมูลที่เกี่ยวข้อง (AEAD) [ 3 ]รวมถึงรูปแบบการแฮชรหัสผ่าน[ 7 ]
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ฟังก์ชั่นฟองน้ำ
ในการเข้ารหัสลับฟังก์ชันฟองน้ำหรือโครงสร้างฟองน้ำคือกลุ่มของอัลกอริธึม ที่มี สถานะภายในจำกัดซึ่งรับสตรีมบิตอินพุตที่มีความยาวใดๆ และสร้างสตรีมบิตเอาต์พุตที่มีความยาวตามต้องการ
การก่อสร้าง
ฟังก์ชันฟองน้ำสร้างขึ้นจากส่วนประกอบสามส่วน: [ 2 ]
การดำเนินการ
ฟังก์ชัน sponge จะ "ดูดซับ" (ในเชิงเปรียบเทียบของ ฟองน้ำ ) บล็อกทั้งหมดของสตริงอินพุตที่มีการเติมช่องว่างดังนี้:
โครงสร้างสองชั้น
นอกจากนี้ยังสามารถดูดซับและบีบอัดสลับกันได้ [ 1 ] การดำเนินการนี้เรียกว่าการสร้างแบบดูเพล็กซ์หรือการทำดูเพล็กซ์ ซึ่งสามารถเป็นพื้นฐานของระบบการเข้ารหัสแบบตรวจสอบความถูกต้องผ่านครั้งเดียวได้ นอกจากนี้ยังถูกใช้เป็นรูปแบบที่มีประสิทธิภาพของ การแปลง Fiat-Shamir...