กลับไปหน้าบทความ

อ่าน 9 นาที

กระแสน้ำวน (ฟังก์ชันแฮช)

ข้อผิดพลาด CS1: ไม่มีเป็นระยะ/CS1 maint: หลายชื่อ: รายชื่อผู้แต่ง/CS1 maint: ชื่อตัวเลข: รายชื่อผู้แต่ง/ฟังก์ชันแฮชที่เข้ารหัส/ลิงก์ย้อนกลับเทมเพลต Webarchive

ในวิทยาการคอมพิวเตอร์และการเข้ารหัสลับ Whirlpool (บางครั้งเขียนว่าWHIRLPOOL ) เป็นฟังก์ชันแฮชการเข้ารหัสลับออกแบบโดยVincent Rijmen (ผู้ร่วมสร้างมาตรฐานการเข้ารหัสขั้นสูง )...

กระแสน้ำวน (ฟังก์ชันแฮช)

วงเวียนน้ำ
ทั่วไป
นักออกแบบวินเซนต์ ไรจ์เมน , เปาโล เอสแอลเอ็ม บาร์เรโต
เผยแพร่ครั้งแรกปี 2000, 2001, 2003
มาจากสแควร์ , เอเอส
การรับรองเนสซี่
รายละเอียด
ขนาดย่อย512 บิต
การเรียกร้องด้านความปลอดภัยขนาดแฮชซัมใหญ่
โครงสร้างมิยากุจิ-พรีเนล
รอบ10
บริการวิเคราะห์รหัสลับสาธารณะที่ดีที่สุด
ในปี พ.ศ. 2552 มีการประกาศ การโจมตีแบบรีบาวด์ซึ่งนำเสนอการชนเต็มรูปแบบกับ 4.5 รอบของ Whirlpool ใน การดำเนินการ 2,120 ครั้ง การชนแบบกึ่งอิสระกับ 5.5 รอบใน เวลา 2,120วินาที และการชนแบบกึ่งอิสระใกล้กันกับ 7.5 รอบในเวลา2,128 วินาที [ 1 ]

ในวิทยาการคอมพิวเตอร์และการเข้ารหัสลับ Whirlpool (บางครั้งเขียนว่าWHIRLPOOL ) เป็นฟังก์ชันแฮชการเข้ารหัสลับออกแบบโดยVincent Rijmen (ผู้ร่วมสร้างมาตรฐานการเข้ารหัสขั้นสูง ) และPaulo SLM Barretoซึ่งได้อธิบายเป็นครั้งแรกในปี 2000 ตั้งชื่อตามกาแล็กซีWhirlpoolใน กลุ่มดาว Canes Venatici ( M51หรือNGC 5194 ) ซึ่งเป็นกาแล็กซีแรกที่ William Parsons เอิร์ลแห่ง Rosse ที่สาม ค้นพบว่ามีโครงสร้างแบบเกลียวในเดือนเมษายน ค.ศ. 1845 [ 1 ]

เครื่องหมายแฮชนี้ได้รับการแนะนำโดย โครงการ NESSIEและได้รับการรับรองโดยองค์การมาตรฐานสากล (ISO) และคณะกรรมการไฟฟ้าสากล (IEC) ในฐานะส่วนหนึ่งของ มาตรฐานสากลร่วม ISO/IEC 10118-3 ด้วย

คุณสมบัติการออกแบบ

กาแล็กซีWhirlpool (M51) ซึ่งเป็นแรงบันดาลใจให้ตั้งชื่ออัลกอริทึม[ 2 ]

Whirlpool เป็นฟังก์ชันแฮชที่ออกแบบตามแบบการเข้ารหัสแบบบล็อกSquare และจัดอยู่ในกลุ่มฟังก์ชันการเข้ารหัสแบบบล็อกเดียวกัน

Whirlpool เป็น โครงสร้าง Miyaguchi–Preneelที่ดัดแปลงมาจากมาตรฐานการเข้ารหัสขั้นสูง (AES) อย่างมีนัยสำคัญ

Whirlpool รับข้อความที่มีความยาวน้อยกว่า2,256 บิตและส่งคืน ข้อความสรุปขนาด 512 บิต[ 3 ]

ผู้เขียนได้ประกาศว่า

"WHIRLPOOL ไม่ได้รับการจดสิทธิบัตร (และจะไม่มีวันได้รับการจดสิทธิบัตร) สามารถใช้งานได้ฟรีเพื่อวัตถุประสงค์ใดๆ ก็ได้" [ 2 ]

การเปลี่ยนแปลงเวอร์ชัน

ในเวกเตอร์ทดสอบต่อไปนี้Whirlpool รุ่นดั้งเดิมจะถูกเรียกว่าWhirlpool-0 , Whirlpool รุ่นปรับปรุงครั้งแรกจะถูกเรียกว่าWhirlpool-Tและ Whirlpool เวอร์ชันล่าสุดจะถูกเรียกว่าWhirlpool

โครงสร้างภายใน

ฟังก์ชันแฮช Whirlpool เป็นโครงสร้าง Merkle–Damgårdที่อิงตามการเข้ารหัสบล็อก W ที่คล้ายกับAESในโหมดMiyaguchi–Preneel [ 2 ]

การเข้ารหัสแบบบล็อก ประกอบด้วยเมทริกซ์สถานะขนาด 8×8 ไบต์ รวมทั้งหมด 512 บิต

กระบวนการเข้ารหัสประกอบด้วยการอัปเดตสถานะด้วยฟังก์ชันรอบสี่ฟังก์ชันใน 10 รอบ ฟังก์ชันรอบทั้งสี่ได้แก่ SubBytes (SB หรือ), ShiftColumns (SC หรือ), MixRows (MR หรือ) และ AddRoundKey (AK หรือ) ในแต่ละรอบ สถานะใหม่จะถูกคำนวณเป็น

ซับไบต์

การดำเนิน การ SubBytesใช้การเรียงสับเปลี่ยนแบบไม่เชิงเส้น (S-box) กับแต่ละไบต์ของสถานะอย่างอิสระ โดย S-box ขนาด 8 บิตนั้นประกอบด้วย S-box ขนาด 4 บิตที่เล็กกว่า 3 อัน

เลื่อนคอลัมน์

การ ดำเนินการ ShiftColumnsจะเลื่อนไบต์แต่ละตัวในแต่ละคอลัมน์ของสถานะแบบวนรอบ คอลัมน์jจะมีการเลื่อนไบต์ลงมาjตำแหน่ง

มิกซ์ไบต์ในแถว

การ ดำเนินการ MixBytesInRowsคือการคูณแต่ละแถวด้วยเมทริกซ์ 8×8 ทาง ขวา โดยเลือกเมทริกซ์ให้มีจำนวนสาขา (คุณสมบัติสำคัญเมื่อพิจารณาความต้านทานต่อการวิเคราะห์การเข้ารหัสแบบดิฟเฟอเรนเชียล ) เท่ากับ 9 ซึ่งเป็นค่าสูงสุด

เพิ่มคีย์กลม

การ ดำเนินการ AddRoundKeyใช้การดำเนินการXOR ระดับบิต เพื่อเพิ่มคีย์ที่คำนวณโดยตารางกำหนดคีย์ไปยังสถานะปัจจุบัน ตารางกำหนดคีย์นั้นเหมือนกับการเข้ารหัสทุกประการ ยกเว้นฟังก์ชัน AddRoundKey ถูกแทนที่ด้วย ฟังก์ชัน AddRoundConstantที่เพิ่มค่าคงที่ที่กำหนดไว้ล่วงหน้าในแต่ละรอบ

กระบวนการทั้งหมดของอัลกอริทึม Whirlpool

นี่คือคำ อธิบาย โดยละเอียดของ อัลกอริทึม Whirlpool ตามที่อธิบายไว้ในเอกสารเผยแพร่อย่างเป็นทางการ[ 1 ]

ก่อนอื่น เรามาทำความเข้าใจสัญลักษณ์ที่ใช้กันก่อน:

  • ตัวเลข ทุกตัวที่ใช้เป็นจำนวนเต็ม 8 บิต (1 ไบต์ )
  • เป็นสตริงไบนารีขนาดnบิต
  • เป็นเมทริกซ์ไบต์ขนาดn x m
  • เป็นฟังก์ชันที่แปลงองค์ประกอบจากเซต A ไปยังเซต B
  • คือการดำเนินการ XOR ระดับบิตของและถ้าและเป็นเมทริกซ์ การดำเนินการXORจะถูกนำไปใช้แบบทีละองค์ประกอบ ( )
  • คือฟังก์ชันองค์ประกอบของและโดยที่;
  • คือการทำซ้ำจากน้อยไปมากของ;
  • คือการทำซ้ำแบบลดหลั่นของ.

อัลกอริทึม Whirlpool

ข้อความที่จะทำการแฮชจะถูกเติมข้อมูล ก่อน เพื่อให้แน่ใจว่าความยาวของข้อความนั้นเป็นจำนวนเท่าของขนาดบล็อก (512 บิต) โดยใช้ วิธี การเติมข้อมูล มาตรฐาน ที่กำหนดไว้ใน มาตรฐาน ISO/IEC 10118-1 (ซึ่งเป็นวิธีการเดียวกับที่ใช้สำหรับmd5 , sha-2และอื่นๆ):

  1. เพิ่มบิต '1' เข้าไป;
  2. เพิ่มบิต '0' มากเท่าที่จำเป็นเพื่อให้ความยาวเป็นจำนวนเท่าของ 256 ( );
  3. เพิ่มความยาวเดิมของข้อความในหน่วยบิตโดยใช้รูปแบบบิ๊กเอนเดียน 256 บิต

จากนั้น ข้อความที่เติมข้อมูลแล้วจะถูกแบ่งออกเป็นบล็อกขนาด512 บิต

Whirlpool ทำซ้ำรูป แบบการแฮช Miyaguchi-Preneelบนบล็อกเหล่านี้[ส่วนที่ 3.11 และ 3.12] [ 1 ] :

ที่ไหน:

  • คือฟังก์ชันแปลงสตริงเป็นเมทริกซ์
  • คือ ฟังก์ชันแปลง เมทริกซ์เป็นสตริง ;
  • คือเวกเตอร์เริ่มต้นซึ่งเป็นสตริงของบิต 0 จำนวน 512 บิต;
  • คือฟังก์ชันการเข้ารหัสแบบ Whirlpool

รหัสลับ ดับเบิลยู

ฟังก์ชันการเข้ารหัสบล็อกภายใน[ส่วนที่ 3.9] [ 1 ]ทำงานและส่งคืนเมทริกซ์ 8x8 :

ที่ไหน:

  • คือจำนวนรอบ (มาตรฐานที่ Whirlpool ใช้)
  • เป็น คีย์ลำดับ ที่ nของตารางคีย์;
  • คือฟังก์ชันการปัดเศษ

ตารางคีย์จะขยายคีย์เป็นลำดับของคีย์[ส่วนที่ 3.8] [ 1 ] :

ที่ไหน:

  • คือเมทริกซ์คงที่รอบที่r

ค่าคงที่รอบสำหรับ รอบ ที่ r , , คือเมทริกซ์ , ซึ่งกำหนดไว้ดังนี้:

ที่ไหน:

  • คือกล่อง S

ฟังก์ชันปัดเศษ ρ

ฟังก์ชันรอบ[ส่วนที่ 3.7] [ 1 ]ถูกกำหนดดังนี้:

ที่ไหน:

  • คือชั้นที่ไม่เป็นเชิงเส้น
  • คือการเรียงสับเปลี่ยน แบบวนรอบ ;
  • คือชั้นการแพร่กระจาย;
  • เป็นการเพิ่มเติมที่สำคัญ

เลเยอร์ไม่เชิงเส้น γ (ซับไบต์)

ฟังก์ชันนี้ประกอบด้วยการประยุกต์ใช้การแทนที่แบบ ไม่เชิงเส้นแบบขนาน กับแต่ละไบต์ของอาร์กิวเมนต์โดยอิสระ[ส่วนที่ 3.2] [ 1 ] :

การเรียงสับเปลี่ยนแบบวนรอบ π (ShiftColumns)

การเรียงสับเปลี่ยน จะเลื่อนคอลัมน์แต่ละคอลัมน์ของอาร์กิวเมนต์อย่างอิสระเป็นวัฏจักร ดังนั้นคอลัมน์นั้นจึงถูกเลื่อนลงตามตำแหน่ง[ส่วนที่ 3.3] [ 1 ] :

เลเยอร์การแพร่กระจาย θ (MixBytesInRows)

ชั้นการแพร่กระจายเชิงเส้นเป็นการแมปเชิง เส้น ตามเมทริกซ์วงกลม[ส่วนที่ 3.4] [ 1 ] :

เมทริกซ์แบบวงกลม ถูกกำหนดให้เป็นเมทริกซ์ที่แต่ละแถวเป็นการเลื่อนแบบวงกลมของแถวก่อนหน้า[ส่วนที่ 2.2] [ 1 ]ในทางรูปธรรมเมทริกซ์แบบวงกลมสามารถแสดงได้ดังนี้:

ตัวอย่างเช่นเมทริกซ์แบบวงกลม (circulant matrix ) คือเมทริกซ์ดังนี้ :

การเพิ่มคีย์ σ (AddRoundKey)

การบวกคีย์แบบแอฟฟินประกอบด้วยการดำเนินการXOR ระดับบิต ของเมทริกซ์ คีย์ :

กล่องทดแทน S (S-Box)

โดยทั่วไป S-Box จะแสดงเป็นตารางค้นหา โดยที่ ไบต์อินพุตแต่ละ ไบต์จะถูกแมปไปยัง ไบต์เอาต์พุตที่สอดคล้องกันสามารถคำนวณได้โดยใช้เทคนิคการสร้างแผนที่การแพร่กระจายที่เหมาะสมที่สุด[ส่วนที่ 2.4] [ 1 ]แต่ต่อไปนี้เป็นการ แสดง ในรูปแบบเมทริกซ์ :

แฮช Whirlpool

อัลกอริทึมของ Whirlpool ได้รับการปรับปรุงแก้ไขมาแล้วสองครั้งนับตั้งแต่ข้อกำหนดดั้งเดิมในปี 2000

ผู้ที่ใช้งาน Whirlpool มักจะใช้เวอร์ชันล่าสุดของ Whirlpool เนื่องจากเวอร์ชันก่อนหน้าไม่มีช่องโหว่ด้านความปลอดภัยที่ทราบแน่ชัด แต่เวอร์ชันล่าสุดมีประสิทธิภาพในการใช้งานฮาร์ดแวร์ที่ดีกว่า และมีแนวโน้มที่จะปลอดภัยกว่า นอกจากนี้ ยังเป็นเวอร์ชันที่ได้รับการยอมรับในมาตรฐานสากล ISO/IEC 10118-3 อีกด้วย

ค่าแฮช Whirlpool ขนาด 512 บิต (64 ไบต์) (หรือที่เรียกว่าค่าแฮชข้อความ ) โดยทั่วไปจะแสดงเป็น ตัวเลขฐานสิบหก 128 หลัก ตัวอย่าง ต่อไปนี้แสดงข้อมูลป้อนเข้า แบบ ASCII ขนาด 43 ไบต์(ไม่รวมเครื่องหมายคำพูด) และค่าแฮช Whirlpool ที่สอดคล้องกัน:

เวอร์ชั่นสตริงอินพุตแฮชที่คำนวณแล้ว
วอร์ลพูล-0" สุนัขจิ้งจอกสีน้ำตาลที่ว่องไว กระโดดข้ามสุนัขขี้เกียจ"
4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C 3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D
วอร์ลพูล-ที" สุนัขจิ้งจอกสีน้ำตาลที่ว่องไว กระโดดข้ามสุนัขขี้เกียจ"
3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183 AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1
วงเวียนน้ำ" สุนัขจิ้งจอกสีน้ำตาลที่ว่องไว กระโดดข้ามสุนัขขี้เกียจ"
B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F D2B52EB6544EDCACD6F8BEDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

การนำไปใช้

ผู้เขียนได้จัดเตรียมการใช้งานอ้างอิงของอัลกอริทึม Whirlpool รวมถึงเวอร์ชันที่เขียนด้วยภาษาCและเวอร์ชันที่เขียนด้วยภาษาJava [ 2 ]การใช้งานอ้างอิงเหล่านี้ได้รับการเผยแพร่สู่สาธารณะแล้ว[ 2 ]

อย่างไรก็ตาม การวิจัยเกี่ยวกับการวิเคราะห์ความปลอดภัยของฟังก์ชัน Whirlpool ได้เปิดเผยว่าโดยเฉลี่ยแล้ว การแนะนำข้อผิดพลาดแบบสุ่ม 8 ครั้งก็เพียงพอที่จะทำให้ข้อความแฮช Whirlpool 512 บิตที่กำลังประมวลผลและคีย์ลับของ HMAC-Whirlpool ภายในบริบทของ Cloud of Things (CoTs) เสียหายได้ ซึ่งเน้นย้ำถึงความจำเป็นในการเพิ่มมาตรการรักษาความปลอดภัยในการใช้งาน[ 5 ]

รหัสเทียม

ต่อไปนี้เป็นตัวอย่างการใช้งาน อัลก อริทึม Whirlpool มาตรฐาน :

S := 0x18, 0x23, 0xc6, 0xe8, 0x87, 0xb8, 0x01, 0x4f, 0x36, 0xa6, 0xd2, 0xf5, 0x79, 0x6f, 0x91, 0x52, \ 0x60, 0xbc, 0x9b, 0x8e, 0xa3, 0x0c, 0x7b, 0x35, 0x1d, 0xe0, 0xd7, 0xc2, 0x2e, 0x4b, 0xfe, 0x57, \ 0x15, 0x77, 0x37, 0xe5, 0x9f, 0xf0, 0x4a, 0xda, 0x58, 0xc9, 0x29, 0x0a, 0xb1, 0xa0, 0x6b, 0x85, \ 0xbd, 0x5d, 0x10, 0xf4, 0xcb, 0x3e, 0x05, 0x67, 0xe4, 0x27, 0x41, 0x8b, 0xa7, 0x7d, 0x95, 0xd8, \ 0xfb, 0xee, 0x7c, 0x66, 0xdd, 0x17, 0x47, 0x9e, 0xca, 0x2d, 0xbf, 0x07, 0xad, 0x5a, 0x83, 0x33, \ 0x63, 0x02, 0xaa, 0x71, 0xc8, 0x19, 0x49, 0xd9, 0xf2, 0xe3, 0x5b, 0x88, 0x9a, 0x26, 0x32, 0xb0, \ 0xe9, 0x0f, 0xd5, 0x80, 0xbe, 0xcd, 0x34, 0x48, 0xff, 0x7a, 0x90, 0x5f, 0x20, 0x68, 0x1a, 0xae, \ 0xb4, 0x54, 0x93, 0x22, 0x64, 0xf1, 0x73, 0x12, 0x40, 0x08, 0xc3, 0xec, 0xdb, 0xa1, 0x8d, 0x3d, \ 0x97, 0x00, 0xcf, 0x2b, 0x76, 0x82, 0xd6, 0x1b, 0xb5, 0xaf, 0x6a, 0x50, 0x45, 0xf3, 0x30, 0xef, \ 0x3f, 0x55, 0xa2, 0xea, 0x65, 0xba, 0x2f, 0xc0, 0xde, 0x1c, 0xfd, 0x4d, 0x92, 0x75, 0x06, 0x8a, \ 0xb2, 0xe6, 0x0e, 0x1f, 0x62, 0xd4, 0xa8, 0x96, 0xf9, 0xc5, 0x25, 0x59, 0x84, 0x72, 0x39, 0x4c, \ 0x5e, 0x78, 0x38, 0x8c, 0xd1, 0xa5, 0xe2, 0x61, 0xb3, 0x21, 0x9c, 0x1e, 0x43, 0xc7, 0xfc, 0x04, \ 0x51, 0x99, 0x6d, 0x0d, 0xfa, 0xdf, 0x7e, 0x24, 0x3b, 0xab, 0xce, 0x11, 0x8f, 0x4e, 0xb7, 0xeb, \ 0x3c, 0x81, 0x94, 0xf7, 0xb9, 0x13, 0x2c, 0xd3, 0xe7, 0x6e, 0xc4, 0x03, 0x56, 0x44, 0x7f, 0xa9, \ 0x2a, 0xbb, 0xc1, 0x53, 0xdc, 0x0b, 0x9d, 0x6c, 0x31, 0x74, 0xf6, 0x46, 0xac, 0x89, 0x14, 0xe1, \ 0x16, 0x3a, 0x69, 0x09, 0x70, 0xb6, 0xd0, 0xed, 0xcc, 0x42, 0x98, 0xa4, 0x28, 0x5c, 0xf8, 0x86 C := 0x01, 0x01, 0x04, 0x01, 0x08, 0x05, 0x02, 0x09, \ 0x09, 0x01, 0x01, 0x04, 0x01, 0x08, 0x05, 0x02, \ 0x02, 0x09, 0x01, 0x01, 0x04, 0x01, 0x08, 0x05, \ 0x05, 0x02, 0x09, 0x01, 0x01, 0x04, 0x01, 0x08, \ 0x08, 0x05, 0x02, 0x09, 0x01, 0x01, 0x04, 0x01, \ 0x01, 0x08, 0x05, 0x02, 0x09, 0x01, 0x01, 0x04, \ 0x04, 0x01, 0x08, 0x05, 0x02, 0x09, 0x01, 0x01, \ 0x01, 0x04, 0x01, 0x08, 0x05, 0x02, 0x09, 0x01 # เมทริกซ์ที่สร้างจากเวกเตอร์เริ่มต้น IM := 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0 R := 10 func getConstantRoundMatrix(r) cr := IM สำหรับ j ตั้งแต่ 0 ถึง 7 cr[j] := S[8 * (r - 1) + j] สิ้นสุดสำหรับ ส่งคืน cr เอ็นด์ฟันค์ func whirlpoolRound(matrix, key) # ใช้การแปลงแบบไม่เชิงเส้น γ สำหรับ i ตั้งแต่ 0 ถึง 7 สำหรับ j ตั้งแต่ 0 ถึง 7 matrix[i * 8 + j] = S[matrix[i * 8 + j]] สิ้นสุดสำหรับ สิ้นสุดสำหรับ # ใช้การเรียงสับเปลี่ยนแบบวนรอบ π tmp := เมทริกซ์ สำหรับ i ตั้งแต่ 0 ถึง 7 สำหรับ j ตั้งแต่ 0 ถึง 7 # '+ 8' เพื่อป้องกันดัชนีติดลบ matrix[i * 8 + j] = tmp[((i - j + 8) % 8) * 8 + j] สิ้นสุดสำหรับ สิ้นสุดสำหรับ matrix := tmp # ใช้การแพร่เชิงเส้น θ เมทริกซ์ := ผลคูณดอท (เมทริกซ์, C) # ใช้การเพิ่มคีย์ σ[key] เมทริกซ์ := เมทริกซ์ xor คีย์ เมทริกซ์ผลตอบแทน เอ็นด์ฟันค์ ฟังก์ชัน whirlpool(M) m, t := pad(M) # ส่งคืนค่า (paddedMessageDividedInChunks, amountOfChunks) H := IM สำหรับ i ตั้งแต่ 0 ถึง t W := m[t] Kr := H W := W xor H สำหรับ r ตั้งแต่ 1 ถึง R cr := getConstantRoundMatrix(r) Kr := whirlpoolRound(Kr, cr) W := whirlpoolRound(W, Kr) สิ้นสุดสำหรับ H := H xor W H := H xor m[t] สิ้นสุดสำหรับ คืนค่าเมทริกซ์เป็นเลขฐานสิบหก (H) เอ็นด์ฟันค์

สำหรับการแพร่แบบเชิงเส้นจำเป็นต้องใช้การคูณเมทริกซ์สามารถใช้เลขคณิตของฟิลด์กาโลอิส ในการเขียน อัลกอริทึมการคูณ นี้ได้ :

func dotProduct(A, B) tmp: เมทริกซ์ สำหรับ i ตั้งแต่ 0 ถึง 7 สำหรับ j ตั้งแต่ 0 ถึง 7 tmp[i * 8 + j] := 0 สำหรับ k ตั้งแต่ 0 ถึง 7 # การคูณฟิลด์กาโลอิส (2^8) a := A[i * 8 + k]; b := B[k * 8 + j]; ผลิตภัณฑ์ := 0; ในขณะที่ b > 0 ถ้า b และ 1 == 1 ผลิตภัณฑ์ := ผลิตภัณฑ์ xor a จบเงื่อนไข ถ้า a & 0x80 != 0 a := (a << 1) xor 0x11d # x^8 + x^4 + x^3 + x^2 + 1 อื่น a := a << 1 จบเงื่อนไข b := b >> 1 จบในขณะที่ tmp[i * 8 + j] := tmp[i * 8 + j] xor product สิ้นสุดสำหรับ สิ้นสุดสำหรับ สิ้นสุดสำหรับ ส่งคืน tmp เอ็นด์ฟันค์

ต่อไปนี้คือตัวอย่างการใช้งาน การเติมข้อมูลขนาด 512 บิต (ขนาด 64 บิต แบบบิ๊กเอนเดียน ) :

ฟันแพด(M) original_length := len(M) # ในหน่วยไบต์ # 512 บิต (ความยาวทั้งหมด) - 256 บิต (ความยาวตามขนาด) - 1 บิต (บิตสำหรับเติมช่องว่าง) 64 ไบต์ - 32 ไบต์ - 1 ไบต์ = 31 ไบต์ padding := (31 - original_length) % 64 padding := (padding + 64) % 64 # หลีกเลี่ยงการใช้ padding ติดลบ ความยาวทั้งหมด := ความยาวเดิม + 1 + ส่วนเติมเต็ม + 32 # ในหน่วยไบต์ เติมช่องว่าง: ไบต์[ความยาวทั้งหมด] # คัดลอกข้อความต้นฉบับ สำหรับ i ตั้งแต่ 0 ถึง original_length - 1 padded[i] := M[i] สิ้นสุดสำหรับ padded[original_length] := 0x80 # เพิ่มบิต '1' หนึ่งบิต แล้วตามด้วยบิต '0' เจ็ดบิต สำหรับ i ตั้งแต่ original_length + 1 ถึง original_length + padding padded[i] := 0x00 # เพิ่มบิต '0' จำนวน 8 บิต สิ้นสุดสำหรับ สำหรับ i ตั้งแต่ 0 ถึง 31 padded[total_length - 32 + i] := (original_length * 8) >> (8 * (31 - i)) & 0xff สิ้นสุดสำหรับ chunk_amount := total_length / 64 หาร := ไบต์[จำนวนชิ้นส่วน][64] สำหรับ i ตั้งแต่ 0 ถึง chunk_amount - 1 สำหรับ j ตั้งแต่ 0 ถึง 63 divided[i][j] := padded[i * 64 + j] สิ้นสุดสำหรับ สิ้นสุดสำหรับ ส่งคืนแบบแบ่งส่วน, จำนวนชิ้นส่วน เอ็นด์ฟันค์

และนี่คือตัวอย่างของ การแปลง เมทริกซ์เป็นสตริง :

func matrixToHexString(matrix) HEX := "0123456789abcdef" ผลลัพธ์: ไบต์[128] สำหรับ i ตั้งแต่ 0 ถึง 63 ไบต์ := เมทริกซ์[i] ผลลัพธ์[i * 2] := HEX[byte >> 4] result[i * 2 + 1] := HEX[byte & 0xf] สิ้นสุดสำหรับ ส่งคืนผลลัพธ์ เอ็นด์ฟันค์

การรับเลี้ยงบุตรบุญธรรม

สองโปรแกรมเข้ารหัสลับกระแสหลักที่ใช้กันอย่างแพร่หลายเป็นครั้งแรกที่เริ่มใช้ Whirlpool คือFreeOTFEตามมาด้วยTrueCryptในปี 2548

VeraCrypt (ซึ่งเป็นเวอร์ชันแยกของTrueCrypt ) ได้รวม Whirlpool (เวอร์ชันสุดท้าย) ไว้เป็นหนึ่งในอัลกอริธึมแฮชที่รองรับ[ 6 ]

ดูเพิ่มเติม

เอกสารอ้างอิง

  1. 1 2 3 4 5 6 7 8 9 10 11 12 Florian Mendel1, Christian Rechberger, Martin Schläffer, Søren S. Thomsen (2009-02-24). การโจมตีแบบรีบาวด์: การวิเคราะห์การเข้ารหัสของ Reduced Whirlpool และ Grøstl (PDF)การเข้ารหัสซอฟต์แวร์ที่รวดเร็ว: การประชุมเชิงปฏิบัติการนานาชาติครั้งที่ 16{{cite conference}}: CS1 maint: multiple names: authors list (link) CS1 maint: numeric names: authors list (link)
  2. 1 2 3 4 5 Paulo SLM Barreto (25 พฤศจิกายน 2008). "ฟังก์ชันแฮช WHIRLPOOL" . เก็บถาวรจากต้นฉบับเมื่อ 29 พฤศจิกายน 2017 . เรียกดูเมื่อ9 สิงหาคม 2018 .
  3. Barreto, Paulo SLM & Rijmen, Vincent (2003-05-24). "ฟังก์ชันแฮช WHIRLPOOL" . เก็บถาวรจากต้นฉบับ(ZIP)เมื่อ 2017-10-26 . เรียกดูเมื่อ2018-08-09 .{{cite journal}}: การอ้างอิงวารสารต้องใช้|journal=( ความช่วยเหลือ )
  4. Kyoji, Shibutani & Shirai, Taizo (11 มีนาคม 2546). "เกี่ยวกับเมทริกซ์การแพร่กระจายที่ใช้ในฟังก์ชันแฮช Whirlpool" (PDF) . สืบค้นเมื่อ9 สิงหาคม 2561 .{{cite journal}}: การอ้างอิงวารสารต้องใช้|journal=( ความช่วยเหลือ )
  5. Li, W., Gao, Z., Gu, D., Ge, C., Liao, L., Zhou, Z., Liu, Y., & Liu, Z. (2017). การวิเคราะห์ความปลอดภัยของฟังก์ชันแฮช Whirlpool ใน Cloud of Things KSII Transactions on Internet and Information Systems, 11(1), 536–551. https://doi.org/10.3837/tiis.2017.01.028
  6. "Whirlpool" . เอกสารประกอบ VeraCrypt . IDRIX . สืบค้นเมื่อ2018-08-09 .

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ กระแสน้ำวน (ฟังก์ชันแฮช)

ในวิทยาการคอมพิวเตอร์และการเข้ารหัสลับ Whirlpool (บางครั้งเขียนว่าWHIRLPOOL ) เป็นฟังก์ชันแฮชการเข้ารหัสลับออกแบบโดยVincent Rijmen (ผู้ร่วมสร้างมาตรฐานการเข้ารหัสขั้นสูง )...

คุณสมบัติการออกแบบ

กาแล็กซีWhirlpool (M51) ซึ่งเป็นแรงบันดาลใจให้ตั้งชื่ออัลกอริทึม[ 2 ]Whirlpool เป็นฟังก์ชันแฮชที่ออกแบบตามแบบการเข้ารหัสแบบบล็อกSquare และจัดอยู่ในกลุ่มฟังก์ชันการเข้ารหัสแบบบล็อกเดียวกันWhirlpool เป็น โครงสร้าง...

การเปลี่ยนแปลงเวอร์ชัน

ในเวกเตอร์ทดสอบต่อไปนี้Whirlpool รุ่นดั้งเดิมจะถูกเรียกว่าWhirlpool-0 , Whirlpool รุ่นปรับปรุงครั้งแรกจะถูกเรียกว่าWhirlpool-Tและ Whirlpool เวอร์ชันล่าสุดจะถูกเรียกว่าWhirlpoolในการปรับปรุงครั้งแรกในปี 2001...

โครงสร้างภายใน

ฟังก์ชันแฮช Whirlpool เป็นโครงสร้าง Merkle–Damgårdที่อิงตามการเข้ารหัสบล็อก W ที่คล้ายกับAESในโหมดMiyaguchi–Preneel [ 2 ]การเข้ารหัสแบบบล็อก ประกอบด้วยเมทริกซ์สถานะขนาด 8×8 ไบต์ รวมทั้งหมด 512 บิตว{\displaystyle W}เอส{\displaystyle...