อ่าน 5 นาที
ไพ (รหัสลับ)
Py เป็นอั ลกอริทึมการเข้ารหัสแบบสตรีม ที่ Eli Biham และ Jennifer Seberry ส่งเข้าประกวดใน โครงการ eSTREAM เป็นหนึ่งในอัลกอริทึมที่เร็วที่สุดในโครงการ eSTREAM โดยใช้เวลาประมาณ 2.
ไพ (รหัสลับ)
Pyเป็นอัลกอริทึมการเข้ารหัสแบบสตรีมที่Eli BihamและJennifer Seberryส่งเข้าประกวดในโครงการ eSTREAMเป็นหนึ่งในอัลกอริทึมที่เร็วที่สุดในโครงการ eSTREAM โดยใช้เวลาประมาณ 2.6 รอบต่อไบต์บนบางแพลตฟอร์ม โครงสร้างของ Py คล้ายกับRC4 เล็กน้อย แต่เพิ่มอาร์เรย์ของคำ 32 บิตจำนวน 260 คำ ซึ่งถูกจัดทำดัชนีโดยใช้การเรียงสับเปลี่ยนของไบต์ และสร้างข้อมูล 64 บิตในแต่ละรอบ
ผู้เขียนยืนยันว่าชื่อนี้ควรออกเสียงว่า "รู" ซึ่งเป็นการอ้างอิงถึงต้นกำเนิดของรหัสลับนี้ในออสเตรเลีย โดยอ่านตัวอักษร "ไพ" (Py) เป็นอักษรซีริลลิก (Ру) แทนที่จะเป็นอักษรละติน การออกเสียงที่ค่อนข้างแปลกประหลาดนี้เข้าใจกันว่าเป็นคำตอบของพวกเขาในเชิงล้อเลียนต่อชื่อที่ออกเสียงยากอย่าง " ไรน์เด ล" (Rijndael) ซึ่งเป็นชื่อ ของรหัสลับที่ถูกนำมาใช้เป็นมาตรฐานการเข้ารหัสขั้นสูง (Advanced Encryption Standard )
- ข้อเสนอเดิมเมื่อเดือนเมษายน 2548 ประกอบด้วยอัลกอริทึมการเข้ารหัส Py และเวอร์ชันที่เรียบง่ายกว่าคือ Py6 โดยเวอร์ชันหลังนี้ช่วยลดขนาดของตารางภายในบางส่วน ทำให้ต้นทุนในการกำหนดตารางคีย์ลดลงอย่างมาก แต่ก็แลกมาด้วยความยาวเอาต์พุตสูงสุดที่สั้นลง
- ในเดือนมิถุนายน พ.ศ. 2549 ผู้เขียนได้อธิบายถึง Pypy (ซึ่งยิ่งทำให้สับสนมากขึ้นไปอีก เพราะเป็น อักษรซีริลลิก ครึ่งหนึ่งคือ Pyру และออกเสียงว่า "Pyroo") ว่าเป็นอีกทางเลือกหนึ่งที่มีประสิทธิภาพมากกว่า โดยจะตัดคำหนึ่งคำออกจากแต่ละรอบการทำงานของ Py ทำให้ทำงานได้เร็วกว่า Py ประมาณ 0.6 เท่า
- ในเดือนมกราคม พ.ศ. 2550 อัลกอริทึมการจัดตารางคีย์ถูกเปลี่ยนแปลง ทำให้เกิดเวอร์ชัน "ปรับแต่ง" คือ TPy, TPypy และ TPy6 กล่าวคือ ขั้นตอนแรก (ที่ขึ้นอยู่กับคีย์) ยังคงเหมือนเดิม แต่ขั้นตอนที่สอง (การตั้งค่า IV) ได้รับการแก้ไขข้อผิดพลาด ฟังก์ชันรอบที่ใช้ในการสร้างเอาต์พุตนั้นเหมือนกันทุกประการ
- ในงาน Indocrypt 2007 Gautham Sekar , Souradyuti PaulและBart Preneelได้เสนออัลกอริทึมการเข้ารหัสใหม่สองแบบ คือRCR -32และRCR-64โดยอิงตามหลักการออกแบบของ Pypy และ Py ตามลำดับ อัลกอริทึมเหล่านี้แทนที่การหมุนตัวแปรใน Py ด้วยการหมุนคงที่ ซึ่งช่วยกำจัดช่องโหว่การโจมตีและทำให้การเข้ารหัสเร็วขึ้นเล็กน้อย โดยยังคงใช้ตารางกำหนดคีย์ของ TPy โดยไม่มีการแก้ไขใดๆ
การโจมตีตระกูล Py
ณ ปี 2549 การโจมตีการเข้ารหัสที่ดีที่สุดบน Py (โดยHongjun WuและBart Preneel ) สามารถกู้คืนคีย์ได้ภายใต้สถานการณ์บางอย่าง (เช่น ในกรณีที่ IV ยาวกว่าคีย์มาก) โดยให้คีย์สตรีม บางส่วน สำหรับIV ที่เลือก 2 24 ตัว [1 ]
ในสถานการณ์ที่ยากขึ้นจากมุมมองของผู้โจมตี เมื่อทราบเพียงข้อความต้นฉบับ (แทนที่จะเป็นข้อความต้นฉบับที่เลือก) ยังมีการโจมตีแบบแยกแยะบนคีย์สตรีม (โดยPaul Crowley ) ซึ่งต้องใช้เอาต์พุตประมาณ2⁷²ไบต์ และใช้เวลาใกล้เคียงกัน นี่เป็นการปรับปรุงการโจมตีที่นำเสนอโดยGautham Sekar , Souradyuti PaulและBart Preneelซึ่งต้องใช้2⁸⁸ไบต์ ยังคงมีการถกเถียงกันอยู่ว่าการโจมตีเหล่านี้ถือเป็นการเจาะระบบ Py ในเชิงวิชาการหรือไม่ เมื่อผู้โจมตีอ้างว่าการโจมตีข้างต้นสามารถสร้างได้ด้วยภาระงานที่น้อยกว่าการค้นหาแบบครบถ้วนภายใต้ข้อกำหนดการออกแบบของ Py และดังนั้นจึงเป็นการเจาะระบบเข้ารหัสในเชิงทฤษฎีอย่างชัดเจน นักออกแบบจึงปฏิเสธการโจมตีเหล่านี้เนื่องจากขอบเขตความปลอดภัยของ Py จำกัดผู้โจมตีให้ใช้เอาต์พุต ทั้งหมดเพียง 2⁶⁴ ไบต์บนคีย์สตรีมทั้งหมดทุกที่ บทความของ Paul , Preneel และ Sekar ฉบับ ปรับปรุงล่าสุดได้รวมการอภิปรายโดยละเอียดเกี่ยวกับประเด็นนี้ไว้ในส่วนที่ 9 ไม่มีข้อสงสัยใด ๆ เกี่ยวกับความถูกต้องของการโจมตีของ Wu และ Preneel
Py ได้รับการคัดเลือกให้เป็นผู้สมัครเป้าหมายระยะที่ 2 สำหรับโปรไฟล์ 1 (ซอฟต์แวร์) โดยโครงการeSTREAM [2]แต่ไม่ผ่านเข้าสู่ระยะที่ 3 เนื่องจากการโจมตี IV ที่ Wu และ Preneel เลือก[3 ]
ในเดือนมกราคม 2550 นักออกแบบของ Py ได้เสนออัลกอริทึมการเข้ารหัสใหม่ 3 แบบ ได้แก่ TPy, TPypy และ TPy6 เพื่อกำจัดช่องโหว่การโจมตีข้างต้น อย่างไรก็ตาม TPy ยังคงมีความเสี่ยงต่อการโจมตีแบบแยกแยะ (distributing attack) โดยPaul et al. (ความซับซ้อน 2.88 )และ Crowley (ความซับซ้อน 2.72 )ซึ่งไม่ขึ้นอยู่กับตารางคีย์ การโจมตีที่ดีที่สุดเท่าที่เคยมีมาสำหรับ TPypy ซึ่งคาดว่าจะเป็นอัลกอริทึมการเข้ารหัสที่แข็งแกร่งที่สุดในตระกูล Py คือการโจมตีโดย Sekar et al. ซึ่งเป็นการโจมตีแบบแยกแยะที่มีความซับซ้อนของข้อมูล 2.281 การโจมตีนี้จะมีประสิทธิภาพก็ต่อเมื่อขนาดคีย์ของ TPypy ยาวกว่า 281 บิตเท่านั้น
เพื่อกำจัดช่องโหว่การโจมตี TPy และ TPypy นั้นSekar , PaulและPreneelได้เสนอแนวคิดเกี่ยวกับอัลกอริทึมการเข้ารหัสใหม่สองแบบ คือRCR-32และRCR-64ในงาน Indocrypt 2007จนถึงปัจจุบันยังไม่มีการโจมตีใดๆ ต่อRCR-32และRCR- 64
ฟังก์ชันทรงกลม
ภาษา Python ใช้แนวคิดของ "อาร์เรย์แบบเลื่อน" (sliding arrays): อาร์เรย์จะถูกกำหนดดัชนีโดยอ้างอิงจากตัวชี้เริ่มต้น ซึ่งจะเลื่อนไปทีละหนึ่งเวิร์ดในแต่ละรอบ ในกรณีที่สามารถใช้การกำหนดดัชนีแบบโมดูลัสได้ (เช่น ในฮาร์ดแวร์และตัวประมวลผลสัญญาณดิจิทัล จำนวนมาก ) สามารถนำไปใช้ในรูปแบบบัฟเฟอร์แบบวงกลมได้ในซอฟต์แวร์ วิธีที่ง่ายที่สุดคือการใช้อาร์เรย์ขนาดใหญ่ เมื่อถึงจุดสิ้นสุดของอาร์เรย์ ส่วนที่กำลังทำงานอยู่จะถูกคัดลอกกลับไปยังจุดเริ่มต้น และการดำเนินการจะดำเนินต่อไป
อาร์เรย์ P ขนาด 256 ไบต์ ประกอบด้วยการเรียงสับเปลี่ยน 256 รายการ (แต่ละไบต์ปรากฏเพียงครั้งเดียว) ในขณะที่อาร์เรย์ Y ประกอบด้วยคำ 32 บิต จำนวน 260 คำ
#include <stdint.h>#define ROTL32(x, s) ((x)<<(s) | (x)>>(32-(s)))uint8_t * P ; // P[0] ถึง P[255] ทำงานอยู่uint32_t * Y ; // Y[-3] ถึง Y[256] ทำงานอยู่uint32_t s ;uint32_t * output ;ในขณะที่( output_words -- ) {int i = Y [ 185 ] % 256 ;P [ 256 ] = P [ i ]; // นี่เป็นการสลับ P[0] และ P[i] อย่างมีประสิทธิภาพP [ i ] = P [ 0 ]; // จากนั้นคัดลอก P[0] ไปยัง P[256]P ++ ; // P[1] ก่อนหน้าคือ P[0] ใหม่, P[256] ที่เพิ่งเขียนคือ P[255] ใหม่s += Y [ P [ 72 ]] - Y [ P [ 239 ]];s = ROTL32 ( s , ( P [ 116 ] + 18 ) % 32 );* output ++ = ( ROTL32 ( s , 25 ) ^ Y [ 256 ]) + Y [ P [ 26 ]]; // บรรทัดนี้ถูกละเว้นจาก Pypy และ TPypy* output ++ = ( s ^ Y [ -1 ] ) + Y [ P [ 208 ]];Y [ 257 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ] ) + Y [ P [ 153 ]];Y ++ ; // P[-2] ก่อนหน้าคือ P[-3] ใหม่, P[257] ที่เพิ่งเขียนคือ P[256] ใหม่}เมื่อต้องการส่งออกข้อมูลในรูปแบบไบต์ Py จะระบุว่าคำที่ส่งออกจะถูกแปลงเป็นแบบ little-endian
บรรทัดที่ 17 ถูกละเว้นใน Pypy, Tpypy และ RCR-32
RCR-32 และ RCR-64 เหมือนกับข้างต้นทุกประการ ยกเว้นบรรทัดที่ 15 ที่เปลี่ยนเป็นการหมุนซ้ายคงที่ 19 บิต
Py6 มีโครงสร้างเหมือนกัน แต่ขนาดของอาร์เรย์ P และ Y ถูกย่อให้เหลือ 64 ไบต์และ 68 เวิร์ด ตามลำดับ ค่าในอาร์เรย์ P มีความยาวเพียง 6 บิต ซึ่งเป็นการประหยัดพื้นที่ที่สามารถนำไปใช้ประโยชน์ในฮาร์ดแวร์เฉพาะทางได้ แน่นอนว่าค่าออฟเซ็ตต่างๆ ในอาร์เรย์ P P[]และ Y Y[]จะถูกปรับเปลี่ยน ทำให้ลูปภายในมีลักษณะดังนี้:
ในขณะที่( output_words -- ) {int i = Y [ 43 ] % 64 ;P [ 64 ] = P [ i ];P [ i ] = P [ 0 ];พี++ ;s += Y [ P [ 18 ]] - Y [ P [ 57 ]];s = ROTL32 ( s , ( P [ 26 ] + 18 ) % 32 );* output ++ = ( ROTL32 ( s , 25 ) ^ Y [ 64 ]) + Y [ P [ 8 ]];* output ++ = ( s ^ Y [ -1 ]) + Y [ P [ 21 ]];Y [ 65 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ]) + Y [ P [ 48 ]];Y ++ ;}ลิงก์ภายนอก
- Eli Biham , Jennifer Seberry , ข้อกำหนด Py ( PostScript )
- Eli Biham , Jennifer Seberry , การปรับแต่งการตั้งค่า IV ของตระกูลการเข้ารหัสแบบสตรีม Py -- การเข้ารหัส TPy, TPypy และ TPy6
- หน้า eStream บน Py
- พอล โครว์ลีย์ , การวิเคราะห์รหัสลับของ Py
- Souradyuti Paul , Bart Preneel , Gautham Sekar , การโจมตีที่โดดเด่นในรหัสสตรีม Py , FSE 2006
- Gautham Sekar , Souradyuti Paul , Bart Preneel , จุดอ่อนในอัลกอริธึมการสร้างบิตสุ่มเทียมของการเข้ารหัสแบบสตรีม TPypy และ TPy , รายงาน IACR-ePrint
- Souradyuti Paul , Bart Preneel , เกี่ยวกับ (ความไม่) ปลอดภัยของการเข้ารหัสแบบสตรีมโดยใช้ Array และการบวกแบบโมดูลาร์ (ฉบับเต็ม) , Asicrypt 2006
- Gautham Sekar , Souradyuti Paul , Bart Preneel , การโจมตีด้วยคีย์ที่เกี่ยวข้องกับตระกูลรหัสลับ Py และแนวทางในการแก้ไขจุดอ่อน , Indocrypt 2007
- หน้า Rijndael - "คำถามที่พบบ่อยเกี่ยวกับ Rijndael" ถูกนำมาล้อเลียนอย่างสนุกสนานในภาคผนวก B ของข้อกำหนด Py
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ไพ (รหัสลับ)
Py เป็นอั ลกอริทึมการเข้ารหัสแบบสตรีม ที่ Eli Biham และ Jennifer Seberry ส่งเข้าประกวดใน โครงการ eSTREAM เป็นหนึ่งในอัลกอริทึมที่เร็วที่สุดในโครงการ eSTREAM โดยใช้เวลาประมาณ 2.
การโจมตีตระกูล Py
ณ ปี 2549 การโจมตีการเข้ารหัสที่ดีที่สุดบน Py (โดย Hongjun Wu และ Bart Preneel ) สามารถกู้คืนคีย์ได้ภายใต้สถานการณ์บางอย่าง (เช่น ในกรณีที่ IV ยาวกว่าคีย์มาก) โดยให้ คีย์สตรีม บางส่วน สำหรับIV ที่เลือก 2 24 ตัว [1 ]
ฟังก์ชันทรงกลม
ภาษา Python ใช้แนวคิดของ "อาร์เรย์แบบเลื่อน" (sliding arrays): อาร์เรย์จะถูกกำหนดดัชนีโดยอ้างอิงจากตัวชี้เริ่มต้น ซึ่งจะเลื่อนไปทีละหนึ่งเวิร์ดในแต่ละรอบ ในกรณีที่สามารถใช้การกำหนดดัชนีแบบโมดูลัสได้ (เช่น ในฮาร์ดแวร์และ ตัวประมวลผลสัญญาณดิจิทัล จำนวนมาก )...
ลิงก์ภายนอก
Eli Biham , Jennifer Seberry , ข้อกำหนด Py ( PostScript ) Eli Biham , Jennifer Seberry , การปรับแต่งการตั้งค่า IV ของตระกูลการเข้ารหัสแบบสตรีม Py -- การเข้ารหัส TPy, TPypy และ TPy6 หน้า eStream บน Py พอล โครว์ลีย์ , การวิเคราะห์รหัสลับของ Py Souradyuti Paul ,...