อัลกอริทึมการเข้ารหัสข้อมูล IDEA อัลกอริทึมการเข้ารหัส IDEA

ส่งงานที่ดีของคุณในฐานความรู้เป็นเรื่องง่าย ใช้แบบฟอร์มด้านล่าง

การทำงานที่ดีไปที่ไซต์">

นักศึกษา บัณฑิต นักวิทยาศาสตร์รุ่นเยาว์ที่ใช้ฐานความรู้ในการศึกษาและการทำงานจะขอบคุณมาก

โฮสต์ที่ http://www.allbest.ru/

การแนะนำ

1. ส่วนวิเคราะห์

1.1 อัลกอริทึม IDEA

1.2.1 อัลกอริทึม DES

1.2.2 อัลกอริทึม RC6

1.2.3 อัลกอริทึม GOST 28147-89

1.2.4 ข้อดีของ IDEA เหนือแอนะล็อก

1.4.1 สมุดรหัสอิเล็กทรอนิกส์ - สมุดรหัสอิเล็กทรอนิกส์

1.4.2 Cipher ฟีดกลับ

1.4.3 เอาต์พุตป้อนกลับ

1.4.4 ตัวนับ - การเข้ารหัสด้วยตัวนับ

1.4.5 ข้อดีของ Cipher Block Chaining มากกว่าแอนะล็อก

2. ส่วนการออกแบบ

2.3 การใช้งานซอฟต์แวร์

3. การทดลอง

บทสรุป

บรรณานุกรม

การแนะนำ

ระบบเข้ารหัสลับแบบสมมาตร (เช่น การเข้ารหัสแบบสมมาตร, การเข้ารหัสแบบสมมาตร) - วิธีการเข้ารหัสซึ่งใช้รหัสเดียวกันสำหรับการเข้ารหัสและถอดรหัส คีย์เข้ารหัส. ก่อนการประดิษฐ์โครงการ การเข้ารหัสแบบสมมาตรวิธีเดียวที่มีอยู่คือการเข้ารหัสแบบสมมาตร คีย์อัลกอริทึมจะต้องถูกเก็บเป็นความลับโดยทั้งสองฝ่าย ฝ่ายต่างๆเลือกคีย์ของอัลกอริทึมก่อนเริ่มการแลกเปลี่ยนข้อความ

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

ตัวอย่างคลาสสิกของอัลกอริทึมดังกล่าวคืออัลกอริธึมการเข้ารหัสแบบสมมาตรที่แสดงไว้ด้านล่าง: - การแทนที่อย่างง่าย;

- การเรียงสับเปลี่ยนทีละคีย์

- การเปลี่ยนแปลงสองครั้ง

- การเปลี่ยนแปลง "Magic Square";

เป็นการเรียงสับเปลี่ยนอย่างง่าย

การสูญเสียความสม่ำเสมอทางสถิติทั้งหมดของข้อความต้นฉบับเป็นข้อกำหนดที่สำคัญสำหรับการเข้ารหัสแบบสมมาตร ในการทำเช่นนี้ รหัสจะต้องมี "เอฟเฟกต์หิมะถล่ม" นั่นคือ ควรเกิดขึ้น การเปลี่ยนแปลงที่แข็งแกร่งบล็อกรหัสที่มีการเปลี่ยนแปลง 1 บิตในข้อมูลอินพุต (ควรเปลี่ยนค่าของ 1/2 บิตของบล็อกรหัส)

ปัจจุบัน ciphers สมมาตรคือ:

· บล็อกยันต์. ประมวลผลข้อมูลในบล็อกที่มีความยาวตามที่กำหนด (ปกติคือ 64, 128 บิต) โดยใช้คีย์กับบล็อกใน เมื่อถึงเวลาที่เหมาะสม, โดยปกติโดยการสับเปลี่ยนและเปลี่ยนตัวหลายรอบ เรียกว่า รอบ. ผลลัพธ์ของการทำซ้ำของรอบคือเอฟเฟกต์หิมะถล่ม - การสูญเสียการติดต่อบิตที่เพิ่มขึ้นระหว่างบล็อกของข้อมูลเปิดและข้อมูลที่เข้ารหัส

การเข้ารหัสสตรีมซึ่งดำเนินการเข้ารหัสผ่านแต่ละบิตหรือไบต์ของข้อความต้นทาง (ธรรมดา) โดยใช้แกมมา สามารถสร้างรหัสสตรีมได้อย่างง่ายดายโดยใช้รหัสบล็อก (เช่น GOST 28147-89 ในโหมดแกมมา) ที่เปิดตัวในโหมดพิเศษ

มีอัลกอริทึมมากมาย ยันต์สมมาตรซึ่งพารามิเตอร์ที่สำคัญได้แก่:

ความแข็งแกร่ง;

ความยาวของคีย์

จำนวนรอบ

ความยาวของบล็อกที่ประมวลผล

ความซับซ้อนของการใช้งานฮาร์ดแวร์/ซอฟต์แวร์

ความซับซ้อนของการแปลง

1. ส่วนวิเคราะห์

1.1 อัลกอริทึม IDEA

IDEA (อังกฤษ อัลกอริธึมการเข้ารหัสข้อมูลระหว่างประเทศ อัลกอริธึมระหว่างประเทศการเข้ารหัสข้อมูล) เป็นอัลกอริธึมการเข้ารหัสข้อมูลบล็อกสมมาตรที่จดสิทธิบัตรโดยบริษัท Ascom ของสวิส นี่คืออัลกอริธึมการเข้ารหัสแบบสมมาตรบล็อกที่ถูกเสนอให้แทนที่มาตรฐาน DES รุ่นเริ่มต้น อัลกอริทึม IDEAปรากฏในปี 1990 ผู้พัฒนาอัลกอริทึม Xuejia Lai และ James Massey จาก Swiss ETH Zurich Institute ได้ตั้งชื่อ PES (Proposed Encryption Standard)

เนื่องจาก IDEA ใช้คีย์ 128 บิตและขนาดบล็อก 64 บิต ข้อความธรรมดาแบ่งออกเป็นบล็อก 64 บิต หากไม่สามารถแบ่งพาร์ติชันได้ บล็อกสุดท้ายจะถูกเสริม วิธีทางที่แตกต่างลำดับบิตที่แน่นอน เพื่อหลีกเลี่ยงการรั่วไหลของข้อมูลเกี่ยวกับแต่ละบล็อก เราใช้ โหมดต่างๆการเข้ารหัส บล็อก 64 บิตดั้งเดิมที่ไม่ได้เข้ารหัสแต่ละบล็อกแบ่งออกเป็นสี่บล็อกย่อย บล็อกละ 16 บิต เนื่องจากการดำเนินการเกี่ยวกับพีชคณิตทั้งหมดที่ใช้ในกระบวนการเข้ารหัสจะดำเนินการกับตัวเลข 16 บิต IDEA ใช้อัลกอริทึมเดียวกันสำหรับการเข้ารหัสและถอดรหัส

IDEA ใช้การดำเนินการทางคณิตศาสตร์ต่อไปนี้:

? โมดูโล 2 การเพิ่มระดับบิต (การดำเนินการ "พิเศษ OR");

? การบวกจำนวนเต็มที่ไม่มีเครื่องหมาย โมดูโล 2 16 ;

? การคูณโมดูโลจำนวนเต็มที่ไม่มีเครื่องหมาย (2 16 + 1) ด้วยบล็อก 16 ศูนย์ถือเป็น 2 16 ;

ข้อเสียที่สำคัญคือ IDEA ได้รับการจดสิทธิบัตร เนื่องจากจะทำให้ไม่สามารถเผยแพร่ได้ฟรี IDEA ไม่ได้กำหนดให้เพิ่มความยาวของคีย์ ข้อเท็จจริงที่ว่างานเกี่ยวกับการเข้ารหัสลับไม่ได้ถูกเผยแพร่ทั้งหมดก็ถือเป็นข้อเสียได้เช่นกัน กล่าวคือ มีความเป็นไปได้ค่อนข้างมากที่รหัสจะถูกทำลายหรือจะถูกทำลายในอนาคต

โครงสร้างของอัลกอริทึม IDEA แสดงไว้ด้านล่าง (รูปที่ 1)

ข้าว. 1. อัลกอริทึมการเข้ารหัส IDEA

โหมดของสมุดรหัสอิเล็กทรอนิกส์ (ECB -- Electronic Code Book)

โหมดบล็อกเชน (CBC - Cipher Block Chaining)

· โหมด ข้อเสนอแนะโดยข้อความเข้ารหัส (CFB -- Cipher Feed Back)

โหมดป้อนกลับเอาต์พุต (OFB - ป้อนกลับเอาต์พุต)

ในเรื่องนี้ ภาคนิพนธ์ที่พิจารณา การใช้งานซอฟต์แวร์อัลกอริทึมการเข้ารหัส IDEA (โหมด Cipher Feed Back)

1.2 การเปรียบเทียบแอนะล็อกของอัลกอริทึม IDEA

1.2.1 อัลกอริทึม เดส

DES (มาตรฐานการเข้ารหัสข้อมูล) -- อัลกอริธึมการเข้ารหัสแบบสมมาตรที่ใช้คีย์เดียวกันในการเข้ารหัสและถอดรหัสข้อมูล DES มีบล็อก 64 บิตและโครงสร้างเครือข่าย Feistel 16 รอบ ซึ่งใช้คีย์ 56 บิตสำหรับการเข้ารหัส

อัลกอริทึมใช้การรวมกันของการแปลงที่ไม่ใช่เชิงเส้น (S-boxes) และการแปลงเชิงเส้น (E, IP, IP-1)

เนื่องจาก DES ทำงานในบล็อก 64 บิตและใช้คีย์ 56 บิต ความยาวของคีย์นี้จึงสอดคล้องกับชุดค่าผสม 256 ชุด ซึ่งก่อนหน้านี้มีระดับความปลอดภัยที่เพียงพอ (คีย์ 64 บิตเต็มแม้แต่ 8 บิตจะไม่ถูกใช้ แพริตีบิต มีขนาดเล็กที่สุด บิตที่สำคัญคีย์ไบต์) บล็อกข้อมูลอินพุตขนาด 64 บิตจะถูกแปลงเป็นบล็อกเอาต์พุตที่มีความยาวเท่ากัน

เนื่องจากการใช้คีย์เข้ารหัส 56 บิต อัลกอริทึม DES สามารถถูกทำลายได้โดยการแจงนับทั้งหมดบนระบบคอมพิวเตอร์ที่ทันสมัยในเวลาจริง - หลายวัน

เดส ระบบเข้ารหัสแบบสมมาตรซึ่งถูกกำหนดให้เป็นรหัส Feistel 16 รอบ เดิมทีมีไว้สำหรับการใช้งานฮาร์ดแวร์ เมื่อใช้ DES เพื่อส่งข้อมูล ผู้ส่งและผู้รับจะต้องทราบคีย์ลับเพื่อเข้ารหัสและถอดรหัสข้อความ หรือเพื่อสร้างและตรวจสอบรหัสยืนยันข้อความ (MAC)

กระบวนการเข้ารหัสของอัลกอริทึม DES ประกอบด้วยการสลับบิตเริ่มต้นของบล็อก 64 บิต การเข้ารหัสสิบหกรอบ และสุดท้ายการสลับบิตย้อนกลับ (รูปที่ 2)

รูปที่ 2 อัลกอริทึมการเข้ารหัส DES

1.2.2 อัลกอริทึม RC6

อัลกอริทึม RC6 เป็นอัลกอริธึมการเข้ารหัสบล็อกสมมาตรที่ได้มาจากอัลกอริทึม RC5

ตัวแปร AES ของ RC6 cipher รองรับบล็อก 128 บิตและคีย์ 128-, 192- และ 256-บิต แต่ตัวอัลกอริทึมสามารถกำหนดค่าให้รองรับช่วงกว้างของทั้งบล็อกและความยาวของคีย์ (ตั้งแต่ 0 ถึง 2040 บิต) .

เป็นผู้เข้ารอบสุดท้ายของ AES และใช้เกือบทุกอย่าง เทคโนโลยีที่มีอยู่ใช้ในอัลกอริทึมการเข้ารหัสลับ แต่หนึ่งในการดำเนินการดั้งเดิมคือการดำเนินการคูณ ซึ่งช้าในฮาร์ดแวร์บางตัว และทำให้ยากต่อการนำรหัสไปใช้บนแพลตฟอร์มฮาร์ดแวร์จำนวนมาก และกลายเป็นเรื่องน่าประหลาดใจสำหรับผู้เขียนในระบบ กับ สถาปัตยกรรมของอินเทล IA-64 ยังใช้งานค่อนข้างไม่ดี ใน กรณีนี้อัลกอริทึมสูญเสียหนึ่งในนั้น ประโยชน์ที่สำคัญ -- ความเร็วสูงซึ่งเป็นเหตุให้ถูกวิพากษ์วิจารณ์และเป็นอุปสรรคอย่างหนึ่งในการได้รับเลือกให้เป็นมาตรฐานใหม่

ข้าว. 3. อัลกอริทึมการเข้ารหัส RC6

โครงสร้างการเข้ารหัสของอัลกอริทึม RC6 แสดงในรูปที่ 3 คำอธิบายสั้น ๆ ของอัลกอริทึม: อัลกอริทึมใช้การแปลง 20 รอบ ก่อนที่จะทำการไวท์เทนนิ่งอินพุตบางส่วน:

o B = B + K 0 สมัย 2 32

o D = D + K 1 สมัย 2 32 ,

โดยที่ A, B, C, D เป็นค่าปัจจุบันของบล็อกย่อย 32 บิตที่ประมวลผลและ K 0 ...K 43 - ส่วนย่อยของคีย์เพิ่มเติม

ในทำนองเดียวกัน การฟอกขาวบางส่วนจะดำเนินการ:

o A = A + K 42 สมัย 2 32

o C = C + K 43 สมัย 2 32 .

ในแต่ละรอบของอัลกอริทึม จะมีการดำเนินการต่อไปนี้:

เสื้อ 1 = ฉ(B)<<< 5,

เสื้อ 2 = f(D)<<< 5,

o A \u003d ((A E เสื้อ 1)<<< t 2) + K 2i mod 2 32 ,

o C \u003d ((CE เสื้อ 2)<<< t 1) + K 2i+1 mod 2 32 ,

โดยที่ t 1 และ t 2 เป็นตัวแปรชั่วคราว จำนวนบิตการหมุนต่อจำนวนบิตตัวแปรถูกกำหนดโดยค่าของ 5 บิตที่มีนัยสำคัญน้อยที่สุดของพารามิเตอร์ (t 1 หรือ t 2) ฟังก์ชัน f() ดำเนินการดังต่อไปนี้ การแปลงกำลังสอง:

f(x) = x * (2x + 1) สมัย 2 32 .

ในตอนท้ายของแต่ละรอบ บล็อกย่อยจะถูกเลื่อน

ข้อดีของอัลกอริทึม:

· โครงสร้างอย่างง่ายของอัลกอริทึมช่วยอำนวยความสะดวกในการวิเคราะห์

· อัลกอริทึมที่เข้ารอบสุดท้ายของ AES ที่เร็วที่สุดบนแพลตฟอร์ม 32 บิต

· การเข้ารหัสและถอดรหัสในอัลกอริทึม RC6 เกือบจะเหมือนกันทุกประการ ข้อเสียของอัลกอริทึม:

· ความเร็วในการเข้ารหัสเมื่อใช้งานในซอฟต์แวร์นั้นขึ้นอยู่กับว่าแพลตฟอร์มนั้นรองรับการคูณและการหมุนแบบ 32 บิตด้วยจำนวนบิตที่แปรผันได้หรือไม่

· RC6 ใช้งานยากในฮาร์ดแวร์และภายใต้ทรัพยากรที่จำกัด

· ค่อนข้างยากที่จะป้องกันการโจมตีตามเวลาดำเนินการและการใช้พลังงาน

· การสนับสนุนไม่เพียงพอสำหรับการขยายคีย์แบบ on-the-fly

· การคำนวณแบบคู่ขนานระหว่างการเข้ารหัสโดยอัลกอริทึม RC6 นั้นมีข้อจำกัด

1.2.3 อัลกอริทึม GOST 28147-89

GOST 28147-89 เป็นมาตรฐานการเข้ารหัสแบบสมมาตรของโซเวียตและรัสเซียที่เปิดตัวในปี 1990 เช่นเดียวกับมาตรฐาน CIS ชื่อเต็ม - "GOST 28147-89 ระบบประมวลผลข้อมูล การป้องกันการเข้ารหัส อัลกอริทึมการแปลงการเข้ารหัสลับ”

โครงสร้างของอัลกอริทึมแสดงไว้ด้านล่าง (รูปที่ 4)

ข้าว. 4. อัลกอริทึมการเข้ารหัส GOST 28147-89

อัลกอริทึมการเข้ารหัสบล็อก เมื่อใช้วิธีการเข้ารหัสด้วยแกมมา มันสามารถทำหน้าที่ของอัลกอริทึมการเข้ารหัสสตรีมได้ GOST 28147-89 เป็นรหัสบล็อกที่มีคีย์ 256 บิตและรอบการแปลง 32 รอบ ซึ่งทำงานกับบล็อก 64 บิต พื้นฐานของอัลกอริทึมการเข้ารหัสคือเครือข่าย Feistel มีสี่โหมดการทำงานของ GOST 28147-89: การเปลี่ยนอย่างง่าย, การปรับขนาด, การปรับขนาดด้วยข้อเสนอแนะ, โหมดการสร้างเม็ดมีดเลียนแบบ

ข้อดีของอัลกอริทึม: ความไร้ประโยชน์ของการโจมตีด้วยพลัง, ประสิทธิภาพของการใช้งานและดังนั้น, ความเร็วสูงในคอมพิวเตอร์สมัยใหม่, การปรากฏตัวของการป้องกันการจัดเก็บข้อมูลเท็จ (การพัฒนาของการแทรกปลอม) และวงจรการเข้ารหัสเดียวกันใน อัลกอริทึม GOST ทั้งสี่ซึ่งเป็นคีย์ที่ใหญ่กว่าเมื่อเทียบกับอัลกอริทึม DESX

ข้อเสียของอัลกอริทึม: ปัญหาหลักของ GOST เกี่ยวข้องกับความไม่สมบูรณ์ของมาตรฐานในแง่ของการสร้างคีย์และตารางการแทนที่ เป็นที่เชื่อกันว่า GOST มีคีย์และตารางการทดแทนที่ "อ่อนแอ" แต่มาตรฐานไม่ได้อธิบายเกณฑ์สำหรับการเลือกและคัดกรองรายการที่ "อ่อนแอ" นอกจากนี้ มาตรฐานไม่ได้ระบุอัลกอริทึมสำหรับสร้างตารางการแทนที่ (S-boxes) ในแง่หนึ่ง นี่อาจเป็นข้อมูลลับเพิ่มเติม (นอกเหนือจากคีย์) และในทางกลับกัน มันทำให้เกิดปัญหาหลายประการ: เป็นไปไม่ได้ที่จะระบุความแข็งแกร่งของการเข้ารหัสของอัลกอริทึมโดยไม่ทราบตารางแทนที่ล่วงหน้า การใช้อัลกอริทึมจากผู้ผลิตที่แตกต่างกันอาจใช้ตารางการแทนที่ที่แตกต่างกันและอาจเข้ากันไม่ได้ ความเป็นไปได้ของการจัดหาตารางทดแทนที่อ่อนแอโดยเจตนาโดยหน่วยงานออกใบอนุญาตของสหพันธรัฐรัสเซีย

1.2.4 ข้อดี ความคิด ก่อนแอนะล็อก

ในการใช้งานซอฟต์แวร์บน Intel486SX เร็วกว่า DES IDEA สองเท่า ซึ่งเป็นความเร็วที่เพิ่มขึ้นอย่างมาก IDEA มีความยาวคีย์ 128 บิต เทียบกับ 56 บิตสำหรับ DES ซึ่งเป็นการปรับปรุงที่ดีต่อกำลังเดรัจฉาน ความน่าจะเป็นของการใช้คีย์ที่อ่อนแอนั้นน้อยมากและมีจำนวนถึง 1/2 64 IDEA เร็วกว่าอัลกอริทึม GOST 28147-89 (ในการใช้งานซอฟต์แวร์บน Intel486SX) การใช้ IDEA ในโหมดการเข้ารหัสแบบขนานบนโปรเซสเซอร์ Pentium III และ Pentium MMX ช่วยให้คุณได้รับความเร็วสูง เมื่อเปรียบเทียบกับผู้เข้ารอบสุดท้ายของ AES แล้ว 4-way IDEA จะช้ากว่า RC6 และ Rijndael บน Pentium II เพียงเล็กน้อย แต่เร็วกว่า Twofish และ MARS บน Pentium III 4-way IDEA นั้นเร็วกว่า RC6 และ Rijndael ข้อได้เปรียบคือความรู้ที่ดีและความต้านทานต่อวิธีการเข้ารหัสที่รู้จักกันดี

1.3 โหมด Cipher Block Chaining - บล็อกลูกโซ่ด้วยข้อความเข้ารหัส

ในโหมดการเข้ารหัส CBC บล็อกทั้งหมดของข้อความจะ "เชื่อมติดกัน" ตามแนวไซเฟอร์เท็กซ์

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

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

ดังนั้น สำหรับ i = 1...n ทั้งหมด บล็อกข้อความเข้ารหัส C(i) ถูกกำหนดดังนี้:

C(i) = IDEA(M(i) xor C(i-1)),

การถอดรหัสดำเนินการดังนี้:

M(i) = C(i-1)xหรือ IDEA-1(C(i)),

บล็อก M(i) เป็นฟังก์ชันของ C(i-1) และ C(i) เท่านั้น ดังนั้น ข้อผิดพลาดในการส่งจะส่งผลให้ข้อความต้นฉบับหายไปเพียงสองบล็อก

1.4 การเปรียบเทียบแอนะล็อกของโหมดการเข้ารหัส CBC

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

1.4.1 สมุดรหัสอิเล็กทรอนิกส์ - สมุดรหัสอิเล็กทรอนิกส์

โหมดนี้เป็นอะนาล็อกอิเล็กทรอนิกส์ของโหมดที่ตัวแทนใช้ในการส่งข้อความที่เข้ารหัสเมื่อเริ่มต้น ศตวรรษที่ XX ตัวแทนได้รับสมุดบันทึกซึ่งแต่ละหน้ามีลำดับที่ไม่ซ้ำกัน - รหัสที่เข้ารหัสข้อความ หลังใช้งาน หน้าดังกล่าวถูกฉีกออกจากสมุดบันทึกและถูกทำลาย หากจำเป็น ข้อความจะถูกเสริมเพื่อให้ไม่มีรหัสที่ไม่ได้ใช้หลงเหลืออยู่ในหน้าที่ฉีกขาด ฝ่ายรับมีสำเนาของแผ่นจดบันทึก ดังนั้น หากเพจถูกใช้งานพร้อมกัน โหมดการเข้ารหัสนี้ให้ทั้งการเข้ารหัสและถอดรหัสข้อความ ใน ECB การใช้สมุดรหัสหนึ่งหน้าสำหรับการเข้ารหัสสอดคล้องกับการใช้การแปลงข้อมูลอินพุตโดยฟังก์ชัน CIPH k และสำหรับการถอดรหัส - CIPH -1 k . ในการซิงโครไนซ์ทั้งสองฝ่ายก็เพียงพอแล้วที่จะตกลงเกี่ยวกับมูลค่าของคีย์ลับ K

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

C j = CIPH K (P j) ,

โดยที่ j=1…n

การถอดรหัส ECB:

P j = CIPH K (C j),

โดยที่ j=1…n

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

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

1.4.2 Cipher ฟีดกลับ

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

ในโหมดนี้ ขนาดบล็อกอาจแตกต่างจาก 64 ไฟล์ต้นฉบับ M จะถูกอ่านในบล็อก t-bit ที่ต่อเนื่องกัน (t<= 64): M = M(1)M(2)...M(n) (остаток дописывается нулями или пробелами).

การลงทะเบียนกะ 64 บิต (บล็อกอินพุต) อันดับแรกประกอบด้วยเวกเตอร์เริ่มต้น IV ซึ่งจัดชิดขวา เวกเตอร์การเริ่มต้นใหม่ใช้สำหรับแต่ละเซสชันการเข้ารหัส

สำหรับ i = 1...n ทั้งหมด บล็อกข้อความเข้ารหัส C(i) ถูกกำหนดดังนี้:

C(i) = M(i)xor P(i-1),

โดยที่ P(i-1) เป็นบิตบนสุดของการดำเนินการ IDEA(C(i-1)) นอกจากนี้ C(0) = IV

shift register ได้รับการอัปเดตโดยการลบ t บิตที่สูงกว่าและเพิ่ม C(i) ทางด้านขวา

การกู้คืนข้อมูลที่เข้ารหัสทำได้ง่ายเช่นกัน: P(i-1) และ C(i) คำนวณในลักษณะเดียวกัน และ M(i) = C(i) xor P(i-1)

1.4.3 เอาต์พุตฟีดกลับ

โหมด OFB เช่น CFB กำลังสตรีม นั่นคือฟังก์ชัน เรียกในอัลกอริทึม pre-stack ด้วยก้อนข้อความธรรมดา แต่คราวนี้ อินพุตไม่ใช่ไซเฟอร์เท็กซ์จากการวนซ้ำครั้งก่อน แต่เป็นเพียงเอาต์พุตของมันเอง นั่นคือฟังก์ชันวนซ้ำ

ในสถานการณ์เช่นนี้ สิ่งสำคัญคือต้องใช้เวกเตอร์การเริ่มต้นเพียงครั้งเดียว สมมติว่าสองข้อความที่ต่างกันถูกเข้ารหัสในโหมด OFB โดยใช้เวกเตอร์การเริ่มต้นเดียวกัน จากนั้น หากฝ่ายตรงข้ามรับรู้บล็อก j-th ใดๆ ของข้อความธรรมดาของข้อความแรก ดังนั้น เมื่อมีบล็อก j-th ของข้อความไซเฟอร์ เขาก็สามารถคำนวณ Oj - ข้อมูลเอาต์พุตได้อย่างง่ายดาย และเนื่องจากข้อมูลเหล่านี้ขึ้นอยู่กับการเริ่มต้นเท่านั้น vector ซึ่งเหมือนกันสำหรับทั้งสองข้อความ จากนั้นอาจโต้แย้งได้ว่าในข้อความที่สองจะเป็นข้อความเดียวกัน Oj ดังนั้นการมีบล็อก j ของข้อความรหัสของข้อความที่สอง ฝ่ายตรงข้ามจะได้รับข้อความธรรมดาของ j ทันที -th บล็อกของข้อความที่สอง

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

ฉัน j = O j -1 , j = 1,2, … n

C j = P j + O j , j = 1,2, … n-1

C n = P n + MSB เสื้อ (O n)

ถอดรหัส OFB:

ฉัน j = O j - 1 , j = 2, … n

O j = CIPH K (I j), j = 1,2, … n

P j = C j + O j , j = 1,2, … n-1

P n = Cn + MSB เสื้อ (O n) ,

โดยที่ "+" คือการดำเนินการ xor

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

1.4.4 เคาน์เตอร์ - การเข้ารหัสเคาน์เตอร์

ในโหมดการเข้ารหัสแบบสตรีมมิ่งพร้อมตัวนับในแต่ละการวนซ้ำของอัลกอริทึมการเข้ารหัสที่อินพุตของฟังก์ชัน ได้รับค่าสุ่ม T อินพุตนี้จะต้องแตกต่างกันสำหรับการวนซ้ำทั้งหมดของอัลกอริทึมซึ่งการเข้ารหัสบล็อกใช้คีย์การเข้ารหัสเดียวกันดังนั้นบางครั้งตัวสร้างค่าดังกล่าวจึงเรียกว่าตัวนับ ค่าเฉพาะของ T)

ในความเป็นจริง ข้อกำหนดสำหรับความเป็นเอกลักษณ์ของข้อมูลอินพุตของฟังก์ชันสำหรับค่า K ที่แน่นอนจะเป็นไปตามข้อกำหนดเช่นกัน หากใช้ PRC (ตัวสร้างรหัสสุ่มหลอก) แต่จากนั้น จำเป็นต้องใช้เวกเตอร์การเริ่มต้นเริ่มต้นสำหรับ PRC ส่วนของผู้ส่งและผู้รับข้อความ

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

ถอดรหัส CTR:

โหมด CTR มีข้อดีทั้งหมดของโหมด ECB (การทำงานแบบคู่ขนาน ความเรียบง่าย และความสามารถในการเข้ารหัสบล็อกข้อความใดๆ โดยตรงโดยแยกจากกันและไม่ขึ้นกับบล็อกอื่นๆ) แต่นอกจากนี้ โหมด CTR ยังแก้ไขข้อบกพร่องทั้งหมดของการเข้ารหัสในโหมดสมุดรหัสอิเล็กทรอนิกส์: บล็อกข้อความธรรมดาเดียวกันจะไม่ถูกแปลงเป็นบล็อกข้อความรหัสเดียวกันอีกต่อไป ไม่จำเป็นต้องรองบล็อกไซเฟอร์เท็กซ์สุดท้าย นอกจากนี้ ในโหมดนี้ (เช่นเดียวกับโหมดการสตรีมใดๆ) จะใช้เฉพาะฟังก์ชันการเข้ารหัสเท่านั้น และสำหรับการเข้ารหัสแบบบล็อกบางตัว (เช่น สำหรับ AES ซึ่งเป็นมาตรฐานการเข้ารหัสแบบใหม่ของอเมริกา) การดำเนินการนี้จะช่วยเพิ่มประสิทธิภาพบางอย่าง นั่นคือเหตุผลที่โหมดนี้มักจะมีประสิทธิภาพมากที่สุด

1.4.5 ข้อดีของ Cipher Block Chaining เหนือแอนะล็อก

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

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

2. ส่วนการออกแบบ

2.1 การสร้างแบบจำลองการทำงาน

ตามข้อกำหนดสำหรับเครื่องมือซอฟต์แวร์ มีการกำหนดฟังก์ชันต่อไปนี้:

การลงทะเบียนผู้ใช้ด้วยฟิลด์:

· การเข้ารหัสข้อความต้นฉบับ

· การถอดรหัสของไซเฟอร์เท็กซ์

· แสดงขั้นตอนสุดท้ายของการเข้ารหัสและถอดรหัสแก่ผู้ใช้เมื่ออนุญาตสำเร็จ

2.2 การออกแบบอัลกอริทึม

อัลกอริธึมการเข้ารหัส IDEA แบบทั่วไปแสดงอยู่ด้านล่าง (รูปที่ 5)

หลังจากเริ่มโปรแกรม ผู้ใช้ต้องป้อนคู่: ล็อกอิน + รหัสผ่านในแบบฟอร์มการให้สิทธิ์หรือกรอกแบบฟอร์มลงทะเบียน หลังจากป้อนอักขระในแบบฟอร์มแล้ว ฟังก์ชันการเข้ารหัสจะเริ่มทำงานเมื่อคุณคลิกที่ปุ่ม "เข้าสู่ระบบ" หรือ "ลงทะเบียน" ตามลำดับ

บล็อกข้อมูล 64 บิตถูกอ่านจากไฟล์และแบ่งออกเป็นสี่บล็อกย่อย 16 บิต บล็อกย่อยทั้งสี่นี้กลายเป็นอินพุตของวงจรแรกของอัลกอริทึม ในภาพ บล็อกย่อยเหล่านี้ถูกกำหนดให้เป็น D 1, D 2, D 3, D 4 แต่ละรอบจะใช้คีย์ย่อยของตัวเองตามตารางคีย์ย่อย (รูปที่ 6) การดำเนินการที่อธิบายไว้ก่อนหน้านี้และนำเสนอในไดอะแกรมอัลกอริทึมดำเนินการบนคีย์ย่อย 16 บิตและบล็อกย่อยข้อความล้วน

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

จากนั้นบล็อกข้อความธรรมดา 64 บิตถัดไปจะถูกนำมาใช้และอัลกอริทึมการเข้ารหัสซ้ำ สิ่งนี้จะดำเนินต่อไปจนกว่าบล็อก 64 บิตทั้งหมดของข้อความต้นฉบับจะได้รับการเข้ารหัส

ผู้ใช้จะเห็นข้อความที่เข้ารหัสหลังจากการให้สิทธิ์สำเร็จ

วิธีการคำนวณที่ใช้ในการถอดรหัสข้อความโดยพื้นฐานแล้วจะเหมือนกับที่ใช้ในการเข้ารหัส ข้อแตกต่างเพียงอย่างเดียวคือใช้คีย์ย่อยที่แตกต่างกันสำหรับการถอดรหัส ในระหว่างกระบวนการถอดรหัส ต้องใช้คีย์ย่อยในลำดับย้อนกลับ คีย์ย่อยที่หนึ่งและสี่ของการถอดรหัสรอบที่ i ได้มาจากคีย์ย่อยที่หนึ่งและสี่ของการเข้ารหัสรอบที่ (10-i) โดยการผกผันแบบทวีคูณ สำหรับรอบที่ 1 และ 9 คีย์ย่อยการถอดรหัสที่สองและสามจะได้รับจากคีย์ย่อยที่สองและสามของรอบการเข้ารหัสที่ 9 และ 1 โดยการผกผันเพิ่มเติม สำหรับรอบที่ 2 ถึง 8 คีย์ย่อยการถอดรหัสที่สองและสามจะได้รับจากคีย์ย่อยที่สามและสองของการเข้ารหัสรอบ 8 ถึง 2 โดยการผกผันเพิ่มเติม คีย์ย่อยสองตัวสุดท้ายของการถอดรหัสรอบที่ i มีค่าเท่ากับคีย์ย่อยสองตัวสุดท้ายของการเข้ารหัสรอบที่ (9-i)

ผู้ใช้จะเห็นข้อความถอดรหัสหลังจากกรอกแบบฟอร์มการให้สิทธิ์เรียบร้อยแล้ว โดยป้อนชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง

ข้าว. 5. โครงสร้างของอัลกอริทึม IDEA

ข้าว. 6. เสียบอัลกอริทึมการเข้ารหัสและถอดรหัส IDEA

2.3 การใช้งานซอฟต์แวร์

งานของหลักสูตรถูกนำมาใช้ในสภาพแวดล้อมการเขียนโปรแกรม Microsoft Visual Studio 2012 ภาษาโปรแกรมที่ใช้ในการเขียนงานคือ C #

รายการขั้นตอนหลัก - ตัวจัดการซึ่งมีฟังก์ชันการทำงานของโปรแกรมที่พัฒนาขึ้น:

· public static int idea_hash_cbc (char *s, int len, int k, int iv) ฟังก์ชันการคำนวณแฮช CBC ในฟังก์ชันนี้ เราได้รับค่าปัจจุบันสำหรับ XOR "a (iv) สร้างตัวชี้ไปยังอาร์เรย์ของข้อมูลที่แฮช แบ่งขนาดอาร์เรย์ด้วย 8 (เราตรวจสอบการคูณด้วย 8) เข้ารหัสตามสูตร: C (i) = IDEA (C (i- 1) ^ S(i), KEY) และส่งคืนแฮชผลลัพธ์

สตริงสแตติกส่วนตัว ShiftByteLeft(string s) เลื่อนไปทางซ้าย 25 บิตเป็นวงกลม

สตริงสแตติกส่วนตัว ShiftbyteRight(string s) เลื่อน 25 บิตวนไปทางขวา

สตริงสแตติกส่วนตัว Sum (สตริง a1, สตริง a2) การรวมโมดูโล 2^16

สตริงสแตติกส่วนตัว Multi(สตริง a1, สตริง a2) โมดูโลการคูณ 2^16+1 สตริงสแตติกส่วนตัว XOR(สตริง a1, สตริง a2) XOR

· อินไลน์ T setBit (T v, int nBitNumber) ฟังก์ชันการตั้งค่าบิต บิตจะนับจาก 0 เลขเริ่มจากซ้ายไปขวา

· ฟังก์ชัน inline bool getBit (T v, int nBitNumber) เพื่อรับค่าบิต (จริง/เท็จ)

แผนที่ *>keys_archive; การเก็บถาวรของตารางของคีย์ "กลม" เพื่อให้แต่ละครั้งไม่มีการสร้างคีย์ใหม่ (ฟังก์ชันประกอบด้วย: การเปลี่ยนคีย์เริ่มต้นของคีย์ การเปลี่ยนคีย์สุดท้ายของคีย์ กะ เปลี่ยนตาราง) โมฆะส่วนตัว idea_Encryption (สตริง st1, สตริง st2) อัลกอริทึม IDEA อินพุต - 2 บรรทัด: 1) ชุดบิตของบล็อกการอ่าน (ความยาว 64) 2) ชุดบิตของคีย์ของเรา (ความยาว 128) เอาต์พุตคือบล็อกรหัส (64 อักขระ) สตริงสาธารณะ idea_Decryption (สตริง st1, สตริง st2) ฟังก์ชันถอดรหัส IDEA

· ฟังก์ชันบูล CheckLogin(int hash) อ่านการเข้าสู่ระบบ ถ้าแฮชจากอาร์กิวเมนต์เท่ากับการอ่านการเข้าสู่ระบบ จากนั้นปิดไฟล์และส่งกลับผลลัพธ์ที่เป็นบวก หากไม่มีจะแสดงข้อความว่า "เข้าสู่ระบบไม่ถูกต้อง"

· บูล CheckPass(int login_hash, int pass_hash) ฟังก์ชันจะอ่านชื่อล็อกอินและรหัสผ่าน ถ้าล็อกอินเท่ากับที่ขอ แต่รหัสผ่านไม่ตรงกัน จะปิดไฟล์และแสดงข้อความ "รหัสผ่านผิด" หากชื่อผู้ใช้และรหัสผ่านตรงกัน ฟังก์ชันจะส่งกลับ "จริง"

โปรแกรมประกอบด้วยสามรูปแบบ: แบบฟอร์มการลงทะเบียน (รูปที่ 7.) แบบฟอร์มการอนุญาต (รูปที่ 8.) และแบบฟอร์มที่มีเอาต์พุตของข้อความที่เข้ารหัสและถอดรหัส (รูปที่ 9.) แบบฟอร์มเหล่านี้แสดงไว้ด้านล่าง

การตรวจสอบสิทธิ์การเข้ารหัสบล็อกซอฟต์แวร์

รูปที่ 8 แบบฟอร์มลงทะเบียน

รูปที่ 9 แบบฟอร์มข้อมูลออก

3. การทดลอง

ทดสอบ 1. ทดสอบการมีอยู่ของการเข้าสู่ระบบของผู้ใช้

ข้อมูลอินพุต:

คลิกที่ปุ่มเข้าสู่ระบบโดยไม่ได้เข้าสู่ระบบ

ผลลัพธ์:

· ข้อความผิดพลาด. กรุณาเข้าสู่ระบบ

ทดสอบ 2. ทดสอบการยืนยันรหัสผ่านผู้ใช้ที่ป้อน

ข้อมูลอินพุต:

กดปุ่มเข้าสู่ระบบโดยไม่ต้องใส่รหัสผ่าน

ผลลัพธ์:

· ข้อความผิดพลาด. กรุณาใส่รหัสผ่าน

สรุป: ฟังก์ชันตรวจสอบทำงานได้อย่างถูกต้อง

ทดสอบ 3. ทดสอบฟังก์ชันการเข้ารหัสด้วยความยาวข้อความไม่เกิน 50 อักขระ

ข้อมูลอินพุต:

ชื่อ: ข้อความบางส่วน

ทดสอบ 4. ทดสอบฟังก์ชันการเข้ารหัสด้วยความยาวข้อความมากกว่า 50 อักขระ

ข้อมูลอินพุต:

ชื่อ: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua.

สรุป: ฟังก์ชันการเข้ารหัสทำงานได้อย่างถูกต้อง

ทดสอบ 4. การเพิ่มอักขระที่จุดเริ่มต้นของแฮชที่เข้ารหัส

ทดสอบ 5. การเพิ่มอักขระที่ตรงกลางของแฮชที่เข้ารหัส

สรุป: ข้อความบางส่วนจะไม่ถูกถอดรหัส

บทสรุป

ในระหว่างการทำงานในส่วนการวิเคราะห์ของหลักสูตร มีการวิเคราะห์อัลกอริธึมการเข้ารหัสบล็อกแบบสมมาตรต่างๆ และนำเสนอข้อดีข้อเสียของอัลกอริทึม IDEA มีการกำหนดงานและข้อกำหนดสำหรับโปรแกรมที่พัฒนาขึ้นซึ่งนำไปใช้อย่างเต็มรูปแบบ

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

ในส่วนการทดลองซอฟต์แวร์ได้ทดสอบด้วยการทดสอบ 5 ครั้ง ไม่พบข้อผิดพลาดในการใช้งานอัลกอริทึมและการทำงานของซอฟต์แวร์

บรรณานุกรม

1. วิกิพีเดีย. อัลกอริทึม IDEA [ทรัพยากรอิเล็กทรอนิกส์] - โหมดการเข้าถึง: - http://ru.wikipedia.org/wiki/IDEA

2. MSDN [ทรัพยากรอิเล็กทรอนิกส์]. - โหมดการเข้าถึง: - http://msdn.microsoft.com/ru-ru/

3. วิกิพีเดีย. โหมด Ciphertext block chaining [ทรัพยากรอิเล็กทรอนิกส์] - โหมดการเข้าถึง: - https://ru.wikipedia.org/wiki/Ciphertext_block_chaining_mode

4. [ทรัพยากรอิเล็กทรอนิกส์] - Oleg Zenzin - โหมดการเข้ารหัส ส่วน การสะสมข้อผิดพลาดในโหมดการเข้ารหัสต่างๆ - โหมดการเข้าถึง: - http://citforum.ru/security/cryptography/rejim_shifrov/

5. [แหล่งข้อมูลอิเล็กทรอนิกส์] - การตรวจสอบเปรียบเทียบอัลกอริทึม PGP - โหมดการเข้าถึง: - https://www.pgpru.com/biblioteka/statji/sravniteljnyjjobzoralgoritmovpgp

โฮสต์บน Allbest.ru

เอกสารที่คล้ายกัน

    การใช้อัลกอริทึม DES และโหมดการเข้ารหัสสำหรับความยาวของข้อความและความยาวของคีย์ การเข้ารหัสข้อความที่มีความยาวและคีย์ต่างๆ พร้อมการวัดเวลาและความเร็วการเข้ารหัส การดำเนินการของอัลกอริทึม RSA บันทึกไฟล์ที่เข้ารหัสลงในดิสก์

    ภาคนิพนธ์ เพิ่ม 01/26/2010

    การพัฒนาแอปพลิเคชันสำหรับการเข้ารหัสข้อมูลโดยใช้อัลกอริธึม DES5: กระบวนการเข้ารหัส ถอดรหัส การรับคีย์ ข้อกำหนดของโปรแกรม ขั้นตอน และฟังก์ชั่น; คำอธิบายของอินเทอร์เฟซผู้ใช้ การดำเนินงานในสภาพแวดล้อมการเขียนโปรแกรม DELPHI

    ภาคนิพนธ์ เพิ่ม 03/27/2012

    ประวัติความเป็นมาของอัลกอริธึมการเข้ารหัสแบบสมมาตร บทบาทของคีย์สมมาตรในการรับรองระดับความลับของข้อความ การแพร่กระจายและความสับสนเป็นวิธีการแปลงบิตข้อมูล อัลกอริทึมการเข้ารหัส DES และ IDEA ข้อดีและข้อเสียหลัก

    งานห้องปฏิบัติการ เพิ่ม 03/18/2013

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

    ภาคนิพนธ์ เพิ่ม 02/17/2011

    ประวัติความเป็นมาของอัลกอริธึมการเข้ารหัสแบบสมมาตร เงื่อนไขและคุณลักษณะของแอปพลิเคชันในขั้นตอนปัจจุบัน หลักการและหน้าที่ของเทคโนโลยีที่ศึกษา การวิเคราะห์ข้อดีและข้อเสียของการใช้อัลกอริทึมการประเมินช่องโหว่

    ภาคนิพนธ์ เพิ่ม 10/29/2017

    การตรวจสอบระบบการกระจายคีย์ตามการแปลงเชิงเส้น คำอธิบายส่วนประกอบของเครือข่ายการสื่อสารที่เป็นความลับ ลักษณะของอัลกอริธึมการเข้ารหัสข้อมูลภายในประเทศ ทบทวนผลการคำนวณความแข็งแกร่งของการเข้ารหัสของอัลกอริทึมการเข้ารหัส

    ทดสอบเพิ่ม 09/26/2012

    การพัฒนาโปรแกรมที่ใช้ขั้นตอนการเข้ารหัสและถอดรหัสข้อความตามมาตรฐาน DES (Data Encryption Standard) โครงสร้างของอัลกอริทึมการเข้ารหัส โครงร่างสำหรับสร้างองค์ประกอบหลัก การใช้ซอฟต์แวร์เข้ารหัส

    ภาคนิพนธ์ เพิ่ม 06/15/2013

    การพัฒนาอัลกอริธึมการเข้ารหัสสำหรับโปรแกรมเข้ารหัสด้วยตนเองโดยใช้ตารางVigenère การพัฒนาโปรแกรมที่ทำการเข้ารหัสและถอดรหัส ลักษณะเฉพาะของการใช้ข้อความธรรมดาเป็นคีย์ อัลกอริทึมสำหรับการแก้ปัญหา "ผกผัน"

    ภาคนิพนธ์ เพิ่ม 11/13/2552

    ระบบการเข้ารหัสลับแบบสมมาตรเป็นวิธีการเข้ารหัสซึ่งใช้คีย์การเข้ารหัสเดียวกันสำหรับการเข้ารหัสและถอดรหัส การแยกวิเคราะห์และการนำอัลกอริทึมการเข้ารหัสไปใช้: การเปลี่ยนลำดับอย่างง่ายและสองครั้ง การเปลี่ยนรูป "magic square"

    ภาคนิพนธ์ เพิ่ม 03/11/2013

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

การแนะนำ

ส่วนวิเคราะห์

1 อัลกอริทึม IDEA

2 การเปรียบเทียบแอนะล็อกของอัลกอริทึม IDEA

2.1 อัลกอริทึม DES

2.2 อัลกอริทึม RC6

2.3 อัลกอริทึม GOST 28147-89

2.4 ข้อดีของ IDEA เหนือแอนะล็อก

3 โหมด Cipher Block Chaining - บล็อกการผูกมัดด้วยข้อความเข้ารหัส

4 การเปรียบเทียบแอนะล็อกของโหมดการเข้ารหัส CBC

4.1 สมุดรหัสอิเล็กทรอนิกส์ - สมุดรหัสอิเล็กทรอนิกส์

4.2 Cipher ป้อนกลับ

4.3 เอาต์พุตป้อนกลับ

4.4 ตัวนับ - การเข้ารหัสด้วยตัวนับ

4.5 ข้อดีของ Cipher Block Chaining ที่เหนือกว่าแอนะล็อก

ส่วนการออกแบบ

1 การสร้างแบบจำลองการทำงาน

2 การออกแบบอัลกอริทึม

3 การใช้งานซอฟต์แวร์

ส่วนทดลอง

บทสรุป

บรรณานุกรม

การแนะนำ

ระบบเข้ารหัสลับแบบสมมาตร (เช่น การเข้ารหัสแบบสมมาตร, การเข้ารหัสแบบสมมาตร) - วิธีการเข้ารหัสซึ่งใช้คีย์การเข้ารหัสเดียวกันสำหรับการเข้ารหัสและถอดรหัส ก่อนการประดิษฐ์โครงร่าง การเข้ารหัสแบบไม่สมมาตรวิธีเดียวที่มีอยู่คือการเข้ารหัสแบบสมมาตร คีย์อัลกอริทึมจะต้องถูกเก็บเป็นความลับโดยทั้งสองฝ่าย ฝ่ายต่างๆเลือกคีย์ของอัลกอริทึมก่อนเริ่มการแลกเปลี่ยนข้อความ

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

ตัวอย่างคลาสสิกของอัลกอริทึมดังกล่าวคืออัลกอริธึมการเข้ารหัสแบบสมมาตรที่แสดงไว้ด้านล่าง: - การแทนที่อย่างง่าย;

การเรียงสับเปลี่ยนทีละคีย์

การเปลี่ยนแปลงสองครั้ง

การเปลี่ยนแปลง "Magic Square";

การเปลี่ยนแปลงอย่างง่าย

การสูญเสียความสม่ำเสมอทางสถิติทั้งหมดของข้อความต้นฉบับเป็นข้อกำหนดที่สำคัญสำหรับการเข้ารหัสแบบสมมาตร ในการทำเช่นนี้ รหัสจะต้องมี "เอฟเฟกต์หิมะถล่ม" นั่นคือ ควรมีการเปลี่ยนแปลงอย่างมากในบล็อกรหัสโดยมีการเปลี่ยนแปลง 1 บิตในข้อมูลอินพุต (ตามหลักการแล้ว ค่าของ 1/2 บิตของบล็อกรหัสควรเปลี่ยน)

ปัจจุบัน ciphers สมมาตรคือ:

· บล็อกยันต์ พวกเขาประมวลผลข้อมูลในบล็อกที่มีความยาวแน่นอน (ปกติคือ 64, 128 บิต) โดยใช้คีย์กับบล็อกตามลำดับที่กำหนด ตามกฎแล้ว การผสมและการแทนที่หลายรอบเรียกว่ารอบ ผลลัพธ์ของการทำซ้ำของรอบคือเอฟเฟกต์หิมะถล่ม - การสูญเสียการติดต่อบิตที่เพิ่มขึ้นระหว่างบล็อกของข้อมูลเปิดและข้อมูลที่เข้ารหัส

· การเข้ารหัสสตรีมซึ่งดำเนินการเข้ารหัสผ่านแต่ละบิตหรือไบต์ของข้อความต้นทาง (ธรรมดา) โดยใช้แกมมา สามารถสร้างรหัสสตรีมได้อย่างง่ายดายโดยใช้รหัสบล็อก (เช่น GOST 28147-89 ในโหมดแกมมา) ที่เปิดตัวในโหมดพิเศษ

มีอัลกอริธึมการเข้ารหัสแบบสมมาตรมากมาย พารามิเตอร์ที่สำคัญได้แก่:

· ความต้านทาน;

· ความยาวของคีย์

· จำนวนรอบ;

· ความยาวของบล็อกที่ประมวลผล

· ความซับซ้อนของการใช้งานฮาร์ดแวร์/ซอฟต์แวร์

· ความซับซ้อนของการแปลง

1.ส่วนวิเคราะห์

1อัลกอริทึม IDEA

IDEA (English International Data Encryption Algorithm, International Data Encryption Algorithm) เป็นอัลกอริธึมการเข้ารหัสข้อมูลแบบบล็อกสมมาตรที่จดสิทธิบัตรโดยบริษัท Ascom ของสวิส นี่คืออัลกอริธึมการเข้ารหัสแบบสมมาตรบล็อกที่ถูกเสนอให้แทนที่มาตรฐาน DES อัลกอริทึม IDEA เวอร์ชันเริ่มต้นปรากฏในปี 1990 ผู้พัฒนาอัลกอริทึม Xuejia Lai และ James Massey จาก Swiss ETH Zurich Institute ได้ตั้งชื่อ PES (Proposed Encryption Standard)

เนื่องจาก IDEA ใช้คีย์ 128 บิตและขนาดบล็อก 64 บิต ข้อความธรรมดาจึงถูกแบ่งออกเป็นบล็อกขนาด 64 บิต หากไม่สามารถแบ่งพาร์ติชันดังกล่าวได้ บล็อกสุดท้ายจะถูกเสริมด้วยวิธีต่างๆ ด้วยลำดับบิตที่แน่นอน เพื่อหลีกเลี่ยงการรั่วไหลของข้อมูลเกี่ยวกับแต่ละบล็อก จะใช้โหมดการเข้ารหัสต่างๆ บล็อก 64 บิตดั้งเดิมที่ไม่ได้เข้ารหัสแต่ละบล็อกแบ่งออกเป็นสี่บล็อกย่อย บล็อกละ 16 บิต เนื่องจากการดำเนินการเกี่ยวกับพีชคณิตทั้งหมดที่ใช้ในกระบวนการเข้ารหัสจะดำเนินการกับตัวเลข 16 บิต IDEA ใช้อัลกอริทึมเดียวกันสำหรับการเข้ารหัสและถอดรหัส

IDEA ใช้สิ่งต่อไปนี้ การดำเนินการทางคณิตศาสตร์:

 โมดูโล 2 การเพิ่มระดับบิต (การดำเนินการ "exclusive OR");

 การบวกโมดูโลจำนวนเต็มที่ไม่มีเครื่องหมาย 2 16;

 การคูณโมดูโลจำนวนเต็มไม่มีเครื่องหมาย (2 16+1) โดยบล็อก 16 ศูนย์ถือเป็น 2 16;

ข้อเสียที่สำคัญคือ IDEA ได้รับการจดสิทธิบัตร เนื่องจากจะทำให้ไม่สามารถเผยแพร่ได้ฟรี IDEA ไม่ได้กำหนดให้เพิ่มความยาวของคีย์ ข้อเท็จจริงที่ว่างานเกี่ยวกับการเข้ารหัสลับไม่ได้ถูกเผยแพร่ทั้งหมดก็ถือเป็นข้อเสียได้เช่นกัน กล่าวคือ มีความเป็นไปได้ค่อนข้างมากที่รหัสจะถูกทำลายหรือจะถูกทำลายในอนาคต

โครงสร้างของอัลกอริทึม IDEA แสดงไว้ด้านล่าง (รูปที่ 1)

ข้าว. 1. อัลกอริทึมการเข้ารหัส IDEA

· โหมดสมุดรหัสอิเล็กทรอนิกส์ (ECB - สมุดรหัสอิเล็กทรอนิกส์)

· โหมดบล็อกเชน (CBC - Cipher Block Chaining)

· โหมด Cipher Feed Back (CFB)

· โหมดป้อนกลับเอาต์พุต (OFB - ป้อนกลับเอาต์พุต)

งานหลักสูตรนี้กล่าวถึงการใช้งานซอฟต์แวร์ของอัลกอริธึมการเข้ารหัส IDEA (โหมด Cipher Feed Back)

1.2การเปรียบเทียบแอนะล็อกของอัลกอริทึม IDEA

1.2.1อัลกอริทึม DES

DES (มาตรฐานการเข้ารหัสข้อมูล) - อัลกอริทึมการเข้ารหัสแบบสมมาตรซึ่งใช้คีย์เดียวในการเข้ารหัสและถอดรหัสข้อมูล DES มีบล็อก 64 บิตและโครงสร้างเครือข่าย Feistel 16 รอบ ซึ่งใช้คีย์ 56 บิตสำหรับการเข้ารหัส

อัลกอริทึมใช้การรวมกันของการแปลงที่ไม่ใช่เชิงเส้น (S-boxes) และการแปลงเชิงเส้น (E, IP, IP-1)

เนื่องจาก DES ทำงานในบล็อก 64 บิตและใช้คีย์ 56 บิต ความยาวของคีย์นี้จึงสอดคล้องกับชุดค่าผสม 256 ชุด ซึ่งก่อนหน้านี้มีระดับความปลอดภัยที่เพียงพอ (คีย์ 64 บิตเต็มแม้แต่ 8 บิตจะไม่ถูกใช้ แพริตีบิต เป็นไบต์คีย์บิตที่มีนัยสำคัญน้อยที่สุด) บล็อกข้อมูลอินพุตขนาด 64 บิตจะถูกแปลงเป็นบล็อกเอาต์พุตที่มีความยาวเท่ากัน

เนื่องจากการใช้คีย์เข้ารหัส 56 บิต อัลกอริทึม DES จึงสามารถถูกทำลายได้โดยใช้กำลังดุร้ายในสมัยใหม่ใดๆ ระบบคอมพิวเตอร์สำหรับเงื่อนไขที่ค่อนข้างจริง - หลายวัน ระบบเข้ารหัสแบบสมมาตรซึ่งกำหนดเป็นรหัส Feistel 16 รอบ (Feistel) เดิมทีมีไว้สำหรับการติดตั้งฮาร์ดแวร์ เมื่อใช้ DES เพื่อส่งข้อมูล ผู้ส่งและผู้รับจะต้องทราบคีย์ลับเพื่อเข้ารหัสและถอดรหัสข้อความ หรือเพื่อสร้างและตรวจสอบรหัสยืนยันข้อความ (MAC)

กระบวนการเข้ารหัสของอัลกอริทึม DES ประกอบด้วยการสลับบิตเริ่มต้นของบล็อก 64 บิต การเข้ารหัสสิบหกรอบ และสุดท้ายการสลับบิตย้อนกลับ (รูปที่ 2)

รูปที่ 2 อัลกอริทึมการเข้ารหัส DES

1.2.2อัลกอริทึม RC6

ตัวแปร AES ของ RC6 cipher รองรับบล็อก 128 บิตและคีย์ 128-, 192- และ 256-บิต แต่อัลกอริทึมสามารถกำหนดค่าให้รองรับเพิ่มเติมได้ หลากหลายความยาวของบล็อกและคีย์ (ตั้งแต่ 0 ถึง 2040 บิต)

เป็นผู้เข้ารอบสุดท้ายของ AES และใช้เทคโนโลยีที่มีอยู่เกือบทั้งหมดที่ใช้ในอัลกอริทึมการเข้ารหัสลับ อย่างไรก็ตาม หนึ่งในการดำเนินการดั้งเดิมคือการดำเนินการคูณ ซึ่งช้าในฮาร์ดแวร์บางตัว และทำให้ยากต่อการนำรหัสไปใช้บนแพลตฟอร์มฮาร์ดแวร์จำนวนมาก ซึ่ง กลายเป็นเรื่องน่าประหลาดใจสำหรับผู้เขียน ระบบที่มีสถาปัตยกรรม Intel IA-64 นั้นใช้งานค่อนข้างแย่เช่นกัน ในกรณีนี้ อัลกอริทึมจะสูญเสียข้อดีหลักประการหนึ่งไป นั่นคือ ความเร็วในการดำเนินการที่สูง ซึ่งกลายเป็นเหตุผลในการวิจารณ์และหนึ่งในอุปสรรคในการได้รับเลือกให้เป็นมาตรฐานใหม่

ข้าว. 3. อัลกอริทึมการเข้ารหัส RC6

โครงสร้างการเข้ารหัสของอัลกอริทึม RC6 แสดงในรูปที่ 3 คำอธิบายสั้นอัลกอริทึม: อัลกอริทึมใช้การแปลง 20 รอบก่อนที่จะทำการฟอกข้อมูลอินพุตบางส่วน:

โอ B=B+เค 0สมัยที่ 2 32

โอ D=D+K 1สมัยที่ 2 32,

โดยที่ A, B, C, D คือค่าปัจจุบันของบล็อกย่อย 32 บิตที่กำลังประมวลผล และ K 0...เค 43- ส่วนของคีย์เสริม

ในทำนองเดียวกัน การฟอกขาวบางส่วนจะดำเนินการ:

โอ A=เอ+เค 42สมัยที่ 2 32

โอ C=ซี+เค 43สมัยที่ 2 32.

ในแต่ละรอบของอัลกอริทึม จะมีการดำเนินการต่อไปนี้:

โอ ที 1= ฉ(ข)<<< 5,

โอ ที 2= ฉ(ดี)<<< 5,

โอ A = ((A Å t 1) <<< t2) + พ 2i สมัยที่ 2 32,

โอ C = ((C Å t 2) <<< t1) + พ 2i+1 สมัยที่ 2 32,

ที่ไหน 1และที 2- ตัวแปรชั่วคราว จำนวนบิตการหมุนต่อจำนวนบิตตัวแปรถูกกำหนดโดยค่าของพารามิเตอร์ 5 บิตที่มีนัยสำคัญน้อยที่สุด (t 1หรือ t 2) ฟังก์ชัน f() ดำเนินการแปลงกำลังสองต่อไปนี้:

(x) = x * (2x + 1) สมัยที่ 2 32.

ในตอนท้ายของแต่ละรอบ บล็อกย่อยจะถูกเลื่อน

ข้อดีของอัลกอริทึม:

· โครงสร้างอย่างง่ายของอัลกอริทึมช่วยอำนวยความสะดวกในการวิเคราะห์

· อัลกอริทึมที่เร็วที่สุด - AES เข้ารอบสุดท้ายบนแพลตฟอร์ม 32 บิต

· การเข้ารหัสและถอดรหัสในอัลกอริทึม RC6 นั้นแทบจะเหมือนกันทุกประการ ข้อเสียของอัลกอริทึม:

· ความเร็วในการเข้ารหัสเมื่อใช้งานในซอฟต์แวร์นั้นขึ้นอยู่กับว่าแพลตฟอร์มนั้นรองรับการคูณและการหมุนแบบ 32 บิตด้วยจำนวนบิตที่แปรผันได้หรือไม่

· RC6 นั้นติดตั้งได้ยากในฮาร์ดแวร์และด้วยทรัพยากรที่จำกัด

· ค่อนข้างยากที่จะป้องกันการโจมตีในเวลาดำเนินการและการใช้พลังงาน

· ไม่รองรับการขยายคีย์แบบ on-the-fly อย่างเต็มที่

· การคำนวณแบบขนานระหว่างการเข้ารหัสโดยอัลกอริธึม RC6 นั้นถูกนำไปใช้โดยมีข้อจำกัด

1.2.3อัลกอริทึม GOST 28147-89

GOST 28147-89 - มาตรฐานการเข้ารหัสแบบสมมาตรของโซเวียตและรัสเซียซึ่งเปิดตัวในปี 1990 เป็นมาตรฐาน CIS เช่นกัน ชื่อเต็ม - "GOST 28147-89 ระบบประมวลผลข้อมูล การป้องกันการเข้ารหัส อัลกอริทึมการแปลงการเข้ารหัสลับ”

ข้าว. 4. อัลกอริทึมการเข้ารหัส GOST 28147-89

อัลกอริทึมการเข้ารหัสบล็อก เมื่อใช้วิธีการเข้ารหัสด้วยแกมมา มันสามารถทำหน้าที่ของอัลกอริทึมการเข้ารหัสสตรีมได้ GOST 28147-89 เป็นรหัสบล็อกที่มีคีย์ 256 บิตและรอบการแปลง 32 รอบ ซึ่งทำงานกับบล็อก 64 บิต พื้นฐานของอัลกอริทึมการเข้ารหัสคือเครือข่าย Feistel มีสี่โหมดการทำงานของ GOST 28147-89: การเปลี่ยนอย่างง่าย, การปรับขนาด, การปรับขนาดด้วยข้อเสนอแนะ, โหมดการสร้างเม็ดมีดเลียนแบบ

ข้อดีของอัลกอริทึม: ความไร้ประโยชน์ของการโจมตีด้วยพลัง, ประสิทธิภาพของการใช้งานและดังนั้น, ความเร็วสูงในคอมพิวเตอร์สมัยใหม่, การปรากฏตัวของการป้องกันการจัดเก็บข้อมูลเท็จ (การพัฒนาของการแทรกปลอม) และวงจรการเข้ารหัสเดียวกันใน อัลกอริทึม GOST ทั้งสี่ซึ่งเป็นคีย์ที่ใหญ่กว่าเมื่อเทียบกับอัลกอริทึม DESX

ข้อเสียของอัลกอริทึม: ปัญหาหลักของ GOST เกี่ยวข้องกับความไม่สมบูรณ์ของมาตรฐานในแง่ของการสร้างคีย์และตารางการแทนที่ เป็นที่เชื่อกันว่า GOST มีคีย์และตารางการทดแทนที่ "อ่อนแอ" แต่มาตรฐานไม่ได้อธิบายเกณฑ์สำหรับการเลือกและคัดกรองรายการที่ "อ่อนแอ" นอกจากนี้ มาตรฐานไม่ได้ระบุอัลกอริทึมสำหรับสร้างตารางการแทนที่ (S-boxes) ในแง่หนึ่ง นี่อาจเป็นข้อมูลลับเพิ่มเติม (นอกเหนือจากคีย์) และในทางกลับกัน มันทำให้เกิดปัญหาหลายประการ: เป็นไปไม่ได้ที่จะระบุความแข็งแกร่งของการเข้ารหัสของอัลกอริทึมโดยไม่ทราบตารางแทนที่ล่วงหน้า การใช้อัลกอริทึมจากผู้ผลิตที่แตกต่างกันอาจใช้ตารางการแทนที่ที่แตกต่างกันและอาจเข้ากันไม่ได้ ความเป็นไปได้ของการจัดหาตารางทดแทนที่อ่อนแอโดยเจตนาโดยหน่วยงานออกใบอนุญาตของสหพันธรัฐรัสเซีย

1.2.4ข้อดีของ IDEA เหนือแอนะล็อก

ในการใช้งานซอฟต์แวร์บน Intel486SX เทียบกับ DES IDEA เร็วกว่าสองเท่า ซึ่งเป็นการเร่งความเร็วที่สำคัญ ความยาวคีย์ของ IDEA คือ 128 บิต เทียบกับ 56 บิตของ DES ซึ่งเป็นการปรับปรุงที่ดีกว่าการบังคับเดรัจฉาน ความน่าจะเป็นของการใช้คีย์ที่อ่อนแอนั้นน้อยมากและเป็น 1/264 IDEA เร็วกว่าอัลกอริทึม GOST 28147-89 (ในการใช้งานซอฟต์แวร์บน Intel486SX ). การใช้ IDEA ในโหมดการเข้ารหัสแบบขนานบนโปรเซสเซอร์ Pentium III และเพนเทียมเอ็มเอ็มเอ็กซ์ ช่วยให้คุณได้รับความเร็วสูง เมื่อเทียบกับผู้เข้ารอบสุดท้ายของ AES แล้ว 4-way IDEA จะช้ากว่า RC6 เพียงเล็กน้อยเท่านั้น และรินเดล บน Pentium II แต่เร็วกว่าทูฟิช และดาวอังคาร . บน Pentium III 4-way IDEA เร็วกว่า RC6 และรินเดล . ข้อได้เปรียบคือความรู้ที่ดีและความต้านทานต่อวิธีการเข้ารหัสที่รู้จักกันดี

1.3โหมด Cipher Block Chaining - บล็อกการผูกมัดด้วยข้อความเข้ารหัส

ในโหมดการเข้ารหัส CBC บล็อกทั้งหมดของข้อความจะ "เชื่อมติดกัน" ตามแนวไซเฟอร์เท็กซ์

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

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

ดังนั้น สำหรับ i = 1...n ทั้งหมด บล็อกข้อความเข้ารหัส C(i) ถูกกำหนดดังนี้:

C(i) = IDEA(M(i) xor C(i-1)),

การถอดรหัสดำเนินการดังนี้:

M(i) = C(i-1)xหรือ IDEA-1(C(i)),

บล็อก M(i) เป็นฟังก์ชันของ C(i-1) และ C(i) เท่านั้น ดังนั้น ข้อผิดพลาดในการส่งจะส่งผลให้ข้อความต้นฉบับหายไปเพียงสองบล็อก

1.4การเปรียบเทียบแอนะล็อกของโหมดการเข้ารหัส CBC

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

1.4.1 สมุดรหัสอิเล็กทรอนิกส์ - สมุดรหัสอิเล็กทรอนิกส์

โหมดนี้เป็นอะนาล็อกอิเล็กทรอนิกส์ของโหมดที่ตัวแทนใช้เพื่อส่งข้อความเข้ารหัสตั้งแต่ต้นศตวรรษที่ 20 ตัวแทนได้รับสมุดบันทึกซึ่งแต่ละหน้ามีลำดับที่ไม่ซ้ำกัน - รหัสที่เข้ารหัสข้อความ หลังใช้งาน หน้าดังกล่าวถูกฉีกออกจากสมุดบันทึกและถูกทำลาย หากจำเป็น ข้อความจะถูกเสริมเพื่อให้ไม่มีรหัสที่ไม่ได้ใช้หลงเหลืออยู่ในหน้าที่ฉีกขาด ฝ่ายรับมีสำเนาของแผ่นจดบันทึก ดังนั้น หากเพจถูกใช้งานพร้อมกัน โหมดการเข้ารหัสนี้ให้ทั้งการเข้ารหัสและถอดรหัสข้อความ ใน ECB การใช้สมุดรหัสหนึ่งหน้าสำหรับการเข้ารหัสสอดคล้องกับการประยุกต์ใช้การแปลงข้อมูลอินพุตโดยฟังก์ชัน CIPH เค และเมื่อถอดรหัส - CIPH -1เค . ในการซิงโครไนซ์ทั้งสองฝ่ายก็เพียงพอแล้วที่จะตกลงเกี่ยวกับมูลค่าของคีย์ลับ K

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

กับ เจ = CIPH เค (ป เจ ) ,

การถอดรหัส ECB:

พี เจ = CIPH เค (ค เจ ),

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

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

1.4.2 Cipher ฟีดกลับ

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

ในโหมดนี้ ขนาดบล็อกอาจแตกต่างจาก 64 ไฟล์ต้นฉบับ M จะถูกอ่านในบล็อก t-bit ที่ต่อเนื่องกัน (t<= 64): M = M(1)M(2)...M(n) (остаток дописывается нулями или пробелами).

บิตชิฟต์รีจิสเตอร์ (บล็อกอินพุต) ในขั้นต้นประกอบด้วยเวกเตอร์การเริ่มต้น IV ซึ่งจัดชิดขวา เวกเตอร์การเริ่มต้นใหม่ใช้สำหรับแต่ละเซสชันการเข้ารหัส

สำหรับ i = 1...n ทั้งหมด บล็อกข้อความเข้ารหัส C(i) ถูกกำหนดดังนี้:

(i) = M(i)xor P(i-1),

โดยที่ P(i-1) เป็นบิตบนสุดของการดำเนินการ IDEA(C(i-1)) นอกจากนี้ C(0) = IV

shift register ได้รับการอัปเดตโดยการลบ t บิตที่สูงกว่าและเพิ่ม C(i) ทางด้านขวา

การกู้คืนข้อมูลที่เข้ารหัสทำได้ง่ายเช่นกัน: P(i-1) และ C(i) คำนวณในลักษณะเดียวกัน และ M(i) = C(i) xor P(i-1)

1.4.3 เอาต์พุตป้อนกลับ

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

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

ฉัน 1= IV

ฉัน เจ = อ จ-1 , j = 1,2, …น

เจ = CIPH เค (ฉัน เจ ), j = 1,2, …น

เจ = พี เจ + อ เจ , j = 1,2, … n-1 = พี +MSB ที (อ )

ถอดรหัส OFB:

ฉัน 1= IV เจ = อ เจ -1, j = 2, …น เจ = CIPH เค (ฉัน เจ ), j = 1,2, …น เจ = ค เจ + อ เจ , j = 1,2, … n-1 = ค +MSB ที (อ ) ,

โดยที่ "+" คือการดำเนินการ xor

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

1.4.4 ตัวนับ - การเข้ารหัสด้วยตัวนับ

ในการสตรีมการเข้ารหัสด้วยตัวนับ ในการวนซ้ำของอัลกอริทึมการเข้ารหัสแต่ละครั้ง ค่าสุ่ม T จำนวนหนึ่งจะถูกส่งไปยังอินพุตของฟังก์ชัน อินพุตเหล่านี้จะต้องแตกต่างกันสำหรับการวนซ้ำทั้งหมดของอัลกอริทึมซึ่งการเข้ารหัสแบบบล็อกใช้คีย์การเข้ารหัสเดียวกัน ดังนั้นบางครั้งตัวสร้างค่าดังกล่าวจึงเรียกว่าตัวนับ ( ซึ่งให้วิธีที่ง่ายที่สุดในการสร้างค่า T ที่ไม่ซ้ำใคร)

ในความเป็นจริง ข้อกำหนดสำหรับความเป็นเอกลักษณ์ของข้อมูลอินพุตของฟังก์ชันสำหรับค่า K ที่แน่นอนจะเป็นไปตามข้อกำหนดเช่นกัน หากใช้ PRC (ตัวสร้างรหัสสุ่มหลอก) แต่จากนั้น จำเป็นต้องใช้เวกเตอร์การเริ่มต้นเริ่มต้นสำหรับ PRC ส่วนของผู้ส่งและผู้รับข้อความ

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

ถอดรหัส:

โหมด CTR มีข้อดีทั้งหมดของโหมด ECB (การทำงานแบบคู่ขนาน ความเรียบง่าย และความสามารถในการเข้ารหัสบล็อกข้อความใดๆ โดยตรงโดยแยกจากกันและไม่ขึ้นกับบล็อกอื่นๆ) แต่นอกจากนี้ โหมด CTR ยังแก้ไขข้อบกพร่องทั้งหมดของการเข้ารหัสในโหมดสมุดรหัสอิเล็กทรอนิกส์: บล็อกข้อความธรรมดาเดียวกันจะไม่ถูกแปลงเป็นบล็อกข้อความรหัสเดียวกันอีกต่อไป ไม่จำเป็นต้องรองบล็อกไซเฟอร์เท็กซ์สุดท้าย นอกจากนี้ ในโหมดนี้ (เช่นเดียวกับโหมดการสตรีมใดๆ) จะใช้เฉพาะฟังก์ชันการเข้ารหัสเท่านั้น และสำหรับการเข้ารหัสแบบบล็อกบางตัว (เช่น สำหรับ AES ซึ่งเป็นมาตรฐานการเข้ารหัสแบบใหม่ของอเมริกา) การดำเนินการนี้จะช่วยเพิ่มประสิทธิภาพบางอย่าง นั่นคือเหตุผลที่โหมดนี้มักจะมีประสิทธิภาพมากที่สุด

1.4.5 ข้อดีของ Cipher Block Chaining มากกว่าแอนะล็อก

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

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

2. ส่วนการออกแบบ

1 การสร้างแบบจำลองการทำงาน

ตามข้อกำหนดสำหรับเครื่องมือซอฟต์แวร์ มีการกำหนดฟังก์ชันต่อไปนี้:

· การลงทะเบียนผู้ใช้ด้วยฟิลด์:

โอ เข้าสู่ระบบ,

โอ รหัสผ่าน,

โอ ชื่อเต็ม,

โอ วันเกิด,

· การอนุญาตผู้ใช้พร้อมฟิลด์:

โอ เข้าสู่ระบบ,

โอ รหัสผ่าน;

· การเข้ารหัสข้อความต้นฉบับ

· ถอดรหัสไซเฟอร์เท็กซ์

· แสดงขั้นตอนสุดท้ายของการเข้ารหัสและถอดรหัสแก่ผู้ใช้เมื่ออนุญาตสำเร็จ

2 การออกแบบอัลกอริทึม

อัลกอริธึมการเข้ารหัส IDEA แบบทั่วไปแสดงอยู่ด้านล่าง (รูปที่ 5)

หลังจากเริ่มโปรแกรม ผู้ใช้ต้องป้อนคู่: ล็อกอิน + รหัสผ่านในแบบฟอร์มการให้สิทธิ์หรือกรอกแบบฟอร์มลงทะเบียน หลังจากป้อนอักขระในแบบฟอร์มแล้ว ฟังก์ชันการเข้ารหัสจะเริ่มทำงานเมื่อคุณคลิกที่ปุ่ม "เข้าสู่ระบบ" หรือ "ลงทะเบียน" ตามลำดับ

บล็อกข้อมูล 64 บิตถูกอ่านจากไฟล์และแบ่งออกเป็นสี่บล็อกย่อย 16 บิต บล็อกย่อยทั้งสี่นี้กลายเป็นอินพุตของวงจรแรกของอัลกอริทึม ในรูป บล็อกย่อยเหล่านี้เรียกว่า D 1, ง 2, ง 3, ง 4แต่ละรอบจะใช้คีย์ย่อยของตัวเองตามตารางคีย์ย่อย (รูปที่ 6) การดำเนินการที่อธิบายไว้ก่อนหน้านี้และนำเสนอในไดอะแกรมอัลกอริทึมดำเนินการบนคีย์ย่อย 16 บิตและบล็อกย่อยข้อความล้วน

มันเป็นบทเรียนที่ยากมาก เพราะระบบเข้ารหัสลับเหล่านี้กำลังปกป้องความลับของรัฐ คุณบอกฉันได้ไหมว่ามันฉลาดแค่ไหน? แต่นี่ขอเถอะ! อันที่จริง คุณไม่ควรกลัว ครั้งนี้เราจะไม่ลงลึกในวิชาคณิตศาสตร์และพิจารณาโหมดการเข้ารหัส - คุณได้เรียนรู้หลักการของมันแล้ว (จะดีหรือไม่ได้เรียนรู้ก็ตาม) มาดูรหัสต่างประเทศชั้นนำและดูว่าพวกเขาใช้อย่างไรในทางปฏิบัติ

อัลกอริทึมการเข้ารหัส 3DES

เรามาพิจารณา 3DES หรือ DES (Data Encryption Standard) ญาติที่ใกล้เคียงที่สุด ซึ่งแม้ว่าจะไม่ได้ใช้ในลักษณะนี้อีกต่อไป แต่เป็นบรรพบุรุษของ 3DES

DES ได้รับการพัฒนาโดยทีมนักคณิตศาสตร์ที่ IBM Science Lab ซึ่งรวมถึง Feistel ที่คุ้นเคยอยู่แล้ว รหัสเวอร์ชันแรกมีชื่อว่า "ลูซิเฟอร์" แต่หลังจากนั้นก็ได้รับการแก้ไขและเป็นผลให้นำมาใช้เป็นอัลกอริธึมการเข้ารหัสข้อมูลอย่างเป็นทางการ (DEA) มันยังคงเป็นมาตรฐานโลกมานานกว่ายี่สิบปีก่อนที่จะถูกแทนที่ด้วย Triple DES

พิจารณาวิธีการทำงานของอัลกอริทึมการเข้ารหัส DES สำหรับสิ่งนี้จำเป็นต้องเรียกคืนการทำงานของเครือข่าย Feistel DES เป็นเครือข่าย Feistel 16 รอบพร้อมคีย์การเข้ารหัสแบบสมมาตร ความยาวของบล็อกข้อความคือ 64 บิต ความยาวของแป้นกลมคือ 48 บิต มาดูขั้นตอนหลักของการเข้ารหัส DES กัน ละเว้นด้านคณิตศาสตร์ที่รุนแรง:

  1. ข้อความเช่นเดียวกับการเข้ารหัสอื่น ๆ แบ่งออกเป็นบล็อก 64 บิต
  2. จากคีย์ 56 บิต จะมีการสร้างคีย์กลม 48 บิต 16 อัน
  3. แต่ละบล็อกเรียงสับเปลี่ยน นั่นคือ บิตทั้งหมดของบล็อกอินพุตจะถูกผสมตามตารางที่กำหนด
  4. บล็อกถูกแบ่งออกเป็นครึ่ง ๆ และเข้าสู่เครือข่าย Feistel ที่คุ้นเคยซึ่งมีการเลื่อน 16 รอบ
  5. เราเชื่อมต่อครึ่ง
  6. และอีกหนึ่งการเปลี่ยนแปลง

การเรียงสับเปลี่ยนเริ่มต้นและสุดท้ายไม่มีความหมายสำหรับการเข้ารหัสใน DES การเรียงสับเปลี่ยนทั้งสองแบบไม่มีคีย์ และตารางสำหรับพวกมันจะถูกกำหนดไว้ล่วงหน้า เหตุผลที่รวมอยู่ใน DES นั้นไม่ชัดเจน และผู้ออกแบบของ DES ก็ไม่ได้พูดอะไรเกี่ยวกับมัน สามารถสันนิษฐานได้ว่าอัลกอริทึมได้รับการวางแผนให้ใช้งานในฮาร์ดแวร์ (บนชิป) และการเรียงสับเปลี่ยนที่ซับซ้อนทั้งสองนี้น่าจะทำให้ยากต่อการจำลองกลไกการเข้ารหัสในซอฟต์แวร์

อันที่จริงแล้วทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับการทำงานของอัลกอริทึม DES หากคุณเจาะลึกลงไปว่าฟังก์ชันที่กำหนดไว้ในเครือข่าย Feistel ทำงานอย่างไร ทุกอย่างก็เรียบร้อยดี มันดำเนินการทั้งการเรียงสับเปลี่ยนและการแทนที่ (S-boxes ดังที่คุณจำได้จากบทความที่แล้ว) และการบวกด้วยแป้นกลม

แต่กลับไปที่ Triple DES หรือ Triple DES กลายเป็นสิ่งจำเป็น เนื่องจากคีย์ DES 56 บิตมีความเสี่ยงต่อกำลังดุร้าย และด้วยการเติบโตของพลังการประมวลผล ปัญหานี้จึงทวีความรุนแรงมากขึ้นเรื่อยๆ โดยใช้เทคโนโลยีที่มีอยู่ในปัจจุบัน สามารถตรวจสอบได้หนึ่งล้านคีย์ต่อวินาที ซึ่งหมายความว่าจะใช้เวลามากกว่าสองพันปีในการถอดรหัส DES โดยใช้คอมพิวเตอร์ที่มีโปรเซสเซอร์เพียงตัวเดียว

แต่ถ้าเราใช้คอมพิวเตอร์ที่มีแกนประมวลผลหนึ่งล้านคอร์ที่ประมวลผลคีย์พร้อมกัน เราจะสามารถตรวจสอบคีย์ทั้งชุดได้ภายในเวลาประมาณ 20 ชั่วโมง เมื่อเปิดตัว DES คอมพิวเตอร์ดังกล่าวมีราคาหลายล้านดอลลาร์ แต่ก็ลดลงอย่างรวดเร็ว คอมพิวเตอร์พิเศษถูกสร้างขึ้นในปี 1998 และพบรหัสใน 112 ชั่วโมง

เพื่อแก้ปัญหาการค้นหาคีย์อย่างรวดเร็ว นักเข้ารหัสอัจฉริยะจากต่างประเทศแนะนำให้ใช้คีย์สองคีย์และใช้ DES สองครั้ง อย่างไรก็ตาม DES สองเท่ามีความเสี่ยงต่อการโจมตี "พบกันตรงกลาง" ในการใช้การโจมตีนี้ ผู้โจมตีจำเป็นต้องมีข้อความธรรมดาและข้อความเข้ารหัสที่สอดคล้องกัน

ผู้โจมตีเข้ารหัสข้อความธรรมดาด้วยคีย์ที่เป็นไปได้ทั้งหมด เขียนผลลัพธ์ลงในตารางที่ 1 จากนั้นเขาจะถอดรหัสข้อความเข้ารหัสด้วยคีย์ที่เป็นไปได้ทั้งหมด และเขียนผลลัพธ์ลงในตารางที่ 2 จากนั้น ผู้โจมตีจะมองหาข้อมูลที่ตรงกันในตารางที่ 1 และ 2 การโจมตีประเภทนี้เกี่ยวข้องกับการแคร็กคีย์ในฝั่งไซเฟอร์เท็กซ์และเพลนเท็กซ์ และต้องใช้การคำนวณมากกว่าการแคร็กคีย์ DES ปกติถึงสี่เท่า และใช้หน่วยความจำค่อนข้างมากเพื่อเก็บผลลัพธ์ระดับกลาง

อย่างไรก็ตาม ในทางปฏิบัติ การโจมตีเป็นไปได้ ซึ่งทำให้อัลกอริทึม Double DES ไม่สามารถใช้งานได้

สิ่งต่าง ๆ ค่อนข้างแตกต่างกับ Triple DES การใช้ปุ่มสามปุ่มและการใช้อัลกอริธึมตามลำดับที่ระบุในแผนภาพช่วยยืดอายุของ DES ได้อีกหลายปี

อัลกอริทึมการเข้ารหัส DES

แล้ว DES มีอะไรดี? อัลกอริธึมการเข้ารหัสนี้ได้รับการวิเคราะห์อย่างรอบคอบ DES มีคุณสมบัติที่สำคัญมากสองประการของการเข้ารหัสบล็อก - หิมะถล่มและความสมบูรณ์ ได้เวลาขยายคำศัพท์การเข้ารหัสของคุณแล้ว!

DES นำไปใช้ที่ไหน ใช่ เกือบทุกที่ การใช้งานมีอยู่ในไลบรารีซอฟต์แวร์ส่วนใหญ่ อย่างไรก็ตาม ใครจะรู้ว่าการใช้ DES ในทุกวันนี้ปลอดภัยแค่ไหน ในขณะที่ IBM อ้างว่าอัลกอริทึมเป็นผลมาจากการวิเคราะห์การเข้ารหัสอย่างเข้มข้นเป็นเวลา 17 ปี บางคนกลัวว่า NSA ได้แทรกช่องโหว่ในอัลกอริทึมที่จะทำให้หน่วยงานสามารถถอดรหัสข้อความที่ถูกสกัดกั้นได้อย่างง่ายดาย

คณะกรรมาธิการข่าวกรองของวุฒิสภาสหรัฐฯ ศึกษาประเด็นนี้อย่างรอบคอบ และแน่นอนว่าไม่พบสิ่งใด ข้อกล่าวหาต่อ NSA จึงตกไป ผลการศึกษายังคงถูกจัดประเภท กล่าวอีกนัยหนึ่ง ข่าวลือและการคาดเดาแพร่สะพัดในอเมริกามาช้านานเกี่ยวกับว่า DES ควรเชื่อถือได้หรือไม่ แต่ในความคิดของฉัน สถานการณ์ที่นี่อธิบายได้ด้วยคำพูดที่ว่า "คนฉลาดจะไม่บอก คนโง่จะไม่เข้าใจ" ในท้ายที่สุด NSA ยอมรับว่าพวกเขาไม่สามารถไว้วางใจ IBM ในภารกิจที่สำคัญเช่นนี้ได้ และได้ทำการปรับเปลี่ยนหลายอย่าง เช่น การตั้งค่า S-box

ตลอดการดำรงอยู่ของ DES มันเป็นเป้าหมายสำหรับวิธีการเข้ารหัสที่หลากหลาย นักเข้ารหัสลับไม่เคยหยุดที่จะวัดเครื่องสำหรับการเปิด DES - ระยะเวลาที่คนสามารถถอดรหัสข้อความได้ ในเรื่องนี้มีการแก้ไขอัลกอริทึมที่แตกต่างกันจำนวนนับไม่ถ้วนปรากฏขึ้นและ 3DES นั้นยังห่างไกลจากความซับซ้อนที่สุดของพวกเขา

อัลกอริทึมการเข้ารหัส AES

ผู้ชนะการแข่งขัน AES ซึ่งประกาศเมื่อปลายปี 2540 อัลกอริทึม Rijndael ได้รับการพัฒนาโดยนักเข้ารหัสลับชาวเบลเยียมสองคน ได้แก่ Joan Daemen และ Vincent Rijmen

เพื่อให้มั่นใจถึงความแข็งแกร่งของการเข้ารหัส อัลกอริทึม Rijndael ได้รวมการวนซ้ำ ซึ่งแต่ละรอบประกอบด้วยการแทนที่ การเรียงสับเปลี่ยน และการเพิ่มคีย์ อย่างไรก็ตาม ไม่เหมือนกับ DES การเข้ารหัสและถอดรหัสในอัลกอริทึมนี้เป็นขั้นตอนที่แตกต่างกัน

AES ทำงานกับบล็อกข้อมูล 128 บิตและคีย์ 128, 192 และ 256 บิต ตามแนวคิดแล้วมันแตกต่างจาก DES เนื่องจากไม่ได้ขึ้นอยู่กับเครือข่าย Feistel แต่เป็นเครือข่ายการเปลี่ยนรูปแบบทดแทน (SP-network) ซึ่งเราจะพิจารณาในรายละเอียดเพิ่มเติม

ใน AES ไบต์ของข้อความธรรมดาจะไม่ถูกแบ่งออกเป็นสองส่วนเหมือนในเครือข่าย Feistel แต่เขียนในรูปแบบเมทริกซ์ (อาร์เรย์สองมิติ) ของไบต์ที่จัดเรียงในลักษณะนี้:

AES ดำเนินการผ่านการดำเนินการต่อไปนี้:
1. ExpandKey - การคำนวณรอบคีย์สำหรับทุกรอบ
2. SubBytes - การแทนที่บิตตามตารางการแทนที่ (S-box)
3. ShiftRows - การเปลี่ยนแถวเป็นวงกลมในแบบฟอร์มตามค่าต่างๆ 4. MixColumns - การผสมข้อมูลในแต่ละคอลัมน์ของแบบฟอร์ม
5. AddRoundKey - การเพิ่มปุ่มกลมด้วยแบบฟอร์ม

ปัจจุบัน AES เป็นมาตรฐานของรัฐบาลสหรัฐอย่างเป็นทางการสำหรับการเข้ารหัสแบบสมมาตรและใช้กันอย่างแพร่หลาย อันที่จริง นี่เป็นหนึ่งในรหัสลับต่างประเทศที่หลากหลายที่สุดในขณะนี้ สำหรับการรักษาความปลอดภัยของ AES นั้นก็เหมือนกับรหัสลับส่วนใหญ่ที่มีช่องโหว่ และนักเข้ารหัสลับยังคงค้นหาช่องโหว่เหล่านั้นต่อไป อย่างไรก็ตาม ถึงกระนั้นก็ตาม AES ก็ยังมีชีวิตมากกว่าทุกชีวิต

อัลกอริทึมการเข้ารหัส IDEA

IDEA (International Data Encryption Algorithm) เป็นอัลกอริธึมการเข้ารหัสแบบสมมาตรบล็อกที่ถูกเสนอเพื่อแทนที่มาตรฐาน DES อัลกอริทึม IDEA เวอร์ชันเริ่มต้นปรากฏในปี 1990 อัลกอริทึมได้รับการจดสิทธิบัตรในสหรัฐอเมริกาและประเทศในยุโรปส่วนใหญ่ เขาเป็นเจ้าของสิทธิบัตร Ascom Tech แต่สามารถใช้อัลกอริทึมได้ฟรีสำหรับวัตถุประสงค์ที่ไม่ใช่เชิงพาณิชย์

ขนาดบล็อกในรหัสนี้คือ 64 บิต ความยาวคีย์คือ 128 ควรกล่าวทันทีว่าอัลกอริทึม IDEA นั้นอายุน้อยที่สุดในรายการและคณิตศาสตร์นั้นซับซ้อนมาก ช่วงเวลาของพจนานุกรมเข้ารหัส

ใน IDEA คุณสมบัติเหล่านี้ทำได้โดยใช้การดำเนินการทางคณิตศาสตร์อิสระ ซึ่งแตกต่างจาก DES ซึ่งการดำเนินการหลักคือ XOR (การเพิ่มโมดูลาร์ 2) IDEA จัดเตรียม:

เอ็กซ์ออร์;
โมดูลเพิ่มเติม 2¹6;
โมดูลการคูณ (2¹6; + 1)

การรวมกันของการดำเนินการทั้งสามนี้ทำให้เกิดการแปลงข้อมูลอินพุตที่ซับซ้อน ทำให้ IDEA เข้ารหัสได้ยากกว่า DES

การเข้ารหัสของ IDEA ทำงานแปดรอบ และในแต่ละรอบ บล็อกข้อความธรรมดาจะถูกแปลงผ่านการดำเนินการทางคณิตศาสตร์ แฟน ๆ ของ "มองลึกลงไปถึงต้นตอ" สามารถดูโครงร่างของ IDEA cipher หนึ่งรอบตามที่ระบุด้านล่าง บล็อกข้อความยาว 64 บิต แบ่งออกเป็นบล็อกย่อย 16 บิต แต่ละบล็อกที่ได้รับจะเข้าสู่อินพุตของรอบและผ่านการเปลี่ยนแปลงที่ซับซ้อน

ไอเดียที่ไม่ซ้ำใคร

“ฉันคิดว่านี่เป็นอัลกอริธึมบล็อกที่ดีที่สุดและน่าเชื่อถือที่สุดที่เผยแพร่จนถึงปัจจุบัน” Bruce Schneier กล่าวเกี่ยวกับอัลกอริทึม IDEA

แท้จริงแล้ว IDEA มีความทนทานสูงเนื่องจากมีการดำเนินการทางคณิตศาสตร์มากมาย นอกจากนี้ ข้อดีของอัลกอริทึมนี้ยังรวมถึงความเร็วในการเข้ารหัสที่สูง ซึ่งสูงกว่าอัลกอริทึม DES เกือบสองเท่า (ขึ้นอยู่กับแพลตฟอร์มที่ทำการเข้ารหัส) อย่างไรก็ตาม ความเร็วในการถอดรหัสจะช้าลงเนื่องจากการดำเนินการคำนวณจำนวนมาก ซึ่งเป็นการผกผันของโมดูโลการคูณ (216 + 1)

แน่นอนว่านักเข้ารหัสที่ชาญฉลาดพยายามทำการโจมตีทุกรูปแบบกับรหัสลับที่ซับซ้อนนี้ ประสบความสำเร็จโดย Paul Hawker ซึ่งเป็นผู้ดำเนินการโจมตี โดยสมมติว่า cryptanalyst ไม่สามารถเข้าถึงคีย์ที่ต้องการได้โดยตรง (เช่น คีย์ถูกฝังอยู่ในตัวเข้ารหัสฮาร์ดแวร์หรือสมาร์ทการ์ดบางตัว) แต่สามารถเปลี่ยนส่วนย่อยของคีย์ต่างๆ ใน วิธีการบางอย่าง.

อัลกอริทึมของ IDEA ไม่ได้กลายเป็นมาตรฐานการเข้ารหัสระหว่างประเทศตามที่ผู้เขียนต้องการ อย่างไรก็ตาม ถือได้ว่าเป็นหนึ่งในอัลกอริธึมการเข้ารหัสที่ใช้กันอย่างแพร่หลายมากที่สุดในโลก IDEA ถูกนำไปใช้ในแอพพลิเคชั่นที่หลากหลาย รวมถึงโปรโตคอลการป้องกันข้อมูล PGP ที่เป็นที่รู้จักและใช้กันอย่างแพร่หลาย

ปลาบรูซชเนเยอร์

Bruce Schneier เป็นบุคคลสำคัญในการเข้ารหัสในปัจจุบัน เขาเดินทางไปครึ่งโลกเพื่อบรรยายและสัมมนา และหนังสือของเขาได้รับการแนะนำอย่างยิ่งสำหรับผู้ที่ปรารถนาจะรู้จักวิทยาการเข้ารหัสลับ และแน่นอนว่าบุคคลที่มีชื่อเสียงเช่นนี้ย่อมไม่ต้องการให้เป็นที่รู้จักในฐานะช่างทำรองเท้าที่ไม่มีรองเท้าบู๊ต - ตัวเขาเองเป็นสมาชิกของกลุ่มนักพัฒนาคริปโต (crypto)

เราจะทำความคุ้นเคยกับผลงานผลิตผลที่มีชื่อเสียงที่สุดของเขาโดยสังเขป นั่นคือ อัลกอริธึมการเข้ารหัส Blowfish, Twofish และ Threefish

อัลกอริทึมการเข้ารหัสปักเป้า

ปักเป้าเป็นคนแรกที่ถือกำเนิดขึ้น Schneier กล่าวว่าอัลกอริทึมนี้ได้รับการออกแบบให้ใช้กับไมโครโปรเซสเซอร์ขนาดใหญ่ ดังนั้นจึงมีขนาดกะทัดรัด (หน่วยความจำเพียง 5 KB) และเรียบง่าย (ใช้การดำเนินการทางคณิตศาสตร์อย่างง่าย - การบวก XOR และการดึงข้อมูลจากตาราง) อัลกอริทึมยังช่วยให้คุณปรับความยาวของคีย์ (สูงสุด 448 บิต)

บนโปรเซสเซอร์ 32 บิต Blowfish ทำการเข้ารหัสได้เร็วกว่า DES มาก แต่บนกระดานอัจฉริยะ เนื่องจากความเรียบง่าย จึงไม่สามารถใช้ได้เป็นพิเศษ Blowfish ขึ้นอยู่กับเครือข่าย Feistel 16 รอบ ซึ่งคุณน่าจะเข้าใจดีอยู่แล้ว

อัลกอริทึมถูกนำมาใช้ในผลิตภัณฑ์ซอฟต์แวร์บางตัว (FolderBolt, Nautilus, PGPfone) แต่ตอนนี้สูญเสียความเกี่ยวข้องไปแล้ว

อัลกอริทึมการเข้ารหัส Twofish

หลังจากปลาตัวแรก มีอีกสองตัวปรากฏขึ้น - อัลกอริทึม Twofish ใหม่ได้รับการพัฒนาโดย Schneier และบริษัทสำหรับการแข่งขัน AES ผลงานของ Schneier ทำให้เข้ารอบห้าอันดับแรก แต่ไม่ได้เป็นผู้ชนะแม้ว่าจะมีข้อได้เปรียบที่เป็นไปได้ทั้งหมดสำหรับสิ่งนี้ นี้:

การเข้ารหัสแบบสมมาตรบล็อก 128 บิต;
ความยาวคีย์: 128, 192 และ 256 บิต;
ซอฟต์แวร์ที่มีประสิทธิภาพ (ใช้โปรเซสเซอร์ 32 บิตเป็นหลัก) และการใช้งานฮาร์ดแวร์
ความยืดหยุ่น (ความสามารถในการใช้คีย์ที่ยาวขึ้น การบังคับใช้สำหรับการสตรีมการเข้ารหัส ฟังก์ชันแฮช และอื่นๆ) ความเรียบง่ายของอัลกอริทึม - สะดวกในการวิเคราะห์

อย่างไรก็ตาม เมื่อเทียบกับ Rijndael ซึ่งใช้แท่น AES แล้ว Twofish นั้นแยกวิเคราะห์ได้ยากกว่าและมีความเร็วในการเข้ารหัสที่ช้ากว่า อัลกอริทึมนี้อิงกับ Blowfish โดยมีส่วนเพิ่มเติมและยังเป็นเครือข่าย Feistel

ในการแข่งขัน การเข้ารหัสนั้นอยู่ภายใต้การเข้ารหัสประเภทต่างๆ เมื่อเทียบกับผู้เข้ารอบสุดท้ายของการแข่งขัน AES คนอื่น ๆ เขากลายเป็นคนที่ยืนหยัดที่สุด อย่างไรก็ตาม โครงสร้างที่ผิดปกติและความซับซ้อนสัมพัทธ์ทำให้เกิดข้อสงสัยเกี่ยวกับคุณภาพของความแข็งแกร่งนี้ ในขณะนี้ Twofish ถูกใช้งานน้อยกว่ารุ่นก่อนด้วยซ้ำ

อัลกอริทึมการเข้ารหัส Threefish

“เป็นครั้งที่สามที่ชายชราโยนอวนลงทะเล…” และอีกสิบปีต่อมาก็ได้รับรหัส Threefish ครั้งนี้ Schneier ตัดสินใจที่จะก้าวข้าม AES และคำนึงถึงข้อบกพร่องทั้งหมดของประสบการณ์ก่อนหน้านี้ นักเข้ารหัสไม่ได้ใช้เครือข่าย Feistel เป็นพื้นฐาน แต่ใช้การเข้ารหัสตามเครือข่ายการแทนที่การเปลี่ยนแปลง (SP-network) เช่นเดียวกับใน AES เครือข่ายดังกล่าวขึ้นอยู่กับการรวมกันของ XOR, การเพิ่มและการดำเนินการหมุนเวียน ในรูปแบบที่เรียบง่าย ทุกอย่างจะมีลักษณะดังนี้:

เนื่องจากการใช้งานง่าย Threefish จึงมีประสิทธิภาพเหนือกว่า AES ในด้านความเร็วอย่างมาก นอกจากนี้ ตามที่ผู้เขียนระบุว่า อัลกอริทึมมีระดับความปลอดภัยที่สูงกว่า AES มีการโจมตี 25 จาก 72 รอบของ Threefish ในขณะที่ AES - 6 จาก 10 ดังนั้น Bruce Schneier จึงได้รับชัยชนะแม้ว่าจะล่าช้าก็ตาม

ตัวเลขทำหน้าที่เป็นพื้นฐานสำหรับการสร้างฟังก์ชันแฮชของ Skein ซึ่งแข่งขันกันเพื่อชิงตำแหน่งของ SHA-3 ตัว Threefish นั้นถูกใช้อย่างกว้างขวางและใช้งานในไลบรารีสำหรับภาษาโปรแกรมต่างๆ

บทสรุป

โดยสรุปแล้วควรกล่าวได้ว่านักเข้ารหัสลับชาวตะวันตกทุกคนทำได้ดีแน่นอนได้พัฒนาเกวียนและเกวียนเล็ก ๆ ของอัลกอริทึมการเข้ารหัสต่างๆ บางคนแข็งแรงกว่า บางคนเร็วกว่า แต่ตอนนี้ทุกคนจะเปรียบเทียบกับ DES และ AES เพราะสิ่งเหล่านี้เป็นแบบคลาสสิก

ในบทความหน้า เราจะทำความคุ้นเคยกับลายเซ็นอิเล็กทรอนิกส์ ซึ่งเป็นวิธีการเข้ารหัสที่ยอดเยี่ยมและสำคัญมาก

ลิงค์:

นี่เป็นบทเรียนแรกในชุด Diving to Crypto บทเรียนทั้งหมดของวัฏจักรตามลำดับเวลา:

  • ข้อมูลพื้นฐาน รหัสลับในอดีต วิธีเปลี่ยนรหัส รหัสเปลี่ยน รหัส Richard Sorge รหัส Vernam และเครื่องเข้ารหัสทำงานอย่างไร (และวิเคราะห์) (คุณอยู่ที่นี่ไหม)
  • . ตอนที่ 2คืออะไร วิธีกระจายคีย์ และวิธีเลือกคีย์ที่แข็งแกร่ง
  • เครือข่าย Feistel คืออะไร รหัสบล็อกภายในประเทศที่ใช้ในโปรโตคอลสมัยใหม่คืออะไร - GOST 28147-89, Grasshopper
  • ยันต์ต่างประเทศสมัยใหม่. ตอนที่ 4มันคืออะไร ทำงานอย่างไร และอะไรคือความแตกต่างระหว่าง 3DES, AES, Blowfish, IDEA, Threefish โดย Bruce Schneider
  • ลายเซนต์อิเล็กทรอนิกส์. ประเภทของ EPs วิธีการทำงานและวิธีใช้
  • การเข้ารหัสแบบควอนตัม. คืออะไร ใช้ที่ไหน และมีประโยชน์อย่างไรในการแจกจ่ายรหัสลับ การสร้างหมายเลขสุ่ม และลายเซ็นอิเล็กทรอนิกส์

อัปเดตล่าสุดเมื่อวันที่ 12 กรกฎาคม 2016

อัลกอริทึม IDEA เวอร์ชันดั้งเดิมปรากฏในปี 1990 ผู้พัฒนาอัลกอริทึม Xuejia Lai และ James Massey จาก Swiss ETH Zurich Institute ตั้งชื่อ PES (Proposed Encryption Standard - มาตรฐานการเข้ารหัสที่เสนอ) เนื่องจากอัลกอริทึมนี้ถูกเสนอให้ แทนที่มาตรฐาน DES เป็นที่น่าสังเกตว่า ETH Zurich Institute และศาสตราจารย์ James Massey ยังเป็นที่รู้จักในด้านอัลกอริทึมของตระกูล SAFER/SAFER+/SAFER++ ที่พวกเขาพัฒนาขึ้น

หนึ่งปีต่อมา อัลกอริทึมได้รับการแก้ไขเพื่อเพิ่มความต้านทานการเข้ารหัสต่อการเข้ารหัสเชิงอนุพันธ์ เวอร์ชันใหม่เรียกว่า IPES (PES ที่ปรับปรุงแล้ว - PES ที่ปรับปรุงแล้ว) และอีกหนึ่งปีต่อมาอัลกอริทึมได้เปลี่ยนชื่อเป็น IDEA (International Data Encryption Algorithm - อัลกอริทึมการเข้ารหัสข้อมูลระหว่างประเทศ)

ลักษณะและโครงสร้างหลัก

อัลกอริทึม IDEA เข้ารหัสข้อมูลเป็นบล็อกขนาด 64 บิต และคีย์เข้ารหัสของอัลกอริทึมมีขนาด 128 บิต บล็อกของข้อมูลที่เข้ารหัสถูกแบ่งออกเป็นสี่บล็อกย่อย 16 บิต A, B, C และ D (รูปที่ 1) ซึ่งดำเนินการแปลงแปดรอบ:

A = A [x] Kr1 B = B + Kr2 C = C + Kr3 D = D [x] Kr4 T1 = A [+] C T2 = B [+] D T1 = T1 [x] Kr5 T2 = T1 + T2 T2 = T2 [x] Kr6 T1 = T1 + T2 A = A [+] T2 B = B [+] T1 C = C [+] T2 D = D [+] T1,

โดยที่ Krn - คีย์ย่อย n ของรอบ r, "+" - การเพิ่มตัวถูกดำเนินการ 16 บิต modulo 2 (เป็นกำลัง 16), [+] - การดำเนินการเชิงตรรกะระดับบิต "พิเศษหรือ" (XOR), [x] - การคูณ 16 - บิตถูกดำเนินการโมดูโล (2(กำลัง 16) + 1) และค่าของบล็อกย่อยที่ประกอบด้วยศูนย์เท่านั้นจะถือเป็น 2(กำลัง 16)

หลังจากทำตามขั้นตอนด้านบนแล้ว บล็อกย่อยทั้งสองด้านใน (B และ C) จะถูกสลับ - ในทุกรอบ ยกเว้นรอบสุดท้าย หลังจากแปดรอบ การแปลงเพิ่มเติมจะดำเนินการ (บางครั้งเรียกว่ารอบที่เก้าของอัลกอริทึม):

A" = A[x] K91 B" = B + K92 C" = C + K93 D" = D[x] K94

ไซเฟอร์เท็กซ์เป็นผลมาจากการต่อค่าที่ได้รับ A", B", C" และ D"

การดำเนินการถอดรหัสจะคล้ายกับการเข้ารหัส โดยมีข้อแตกต่างที่คีย์ย่อยที่แก้ไขจะถูกใช้ระหว่างการถอดรหัสและในลำดับที่ต่างกัน:

K"r1 = (K(10-r)1)-1 K"r2 = -K(10-r)3 K"r3 = -K(10-r)2 K"r4 = (K(10-r) 4) -1 K "r5 \u003d K (9-r) 5 K "r6 \u003d K (9-r) 6,

ยกเว้นรอบที่ 1 และ 9 ซึ่งมีการสลับคีย์ย่อย K"r2 และ K"r3 ที่นี่ K "rn เป็นคีย์ย่อยของรอบ n ของการถอดรหัส r, -x และ x-1 เป็นส่วนกลับของ x ที่เกี่ยวข้องกับการดำเนินการที่อธิบายไว้ข้างต้น การเพิ่มโมดูโล 2 (ถึงระดับ 16) และการคูณโมดูโล (2 (ถึง องศาที่ 16) + 1) ตามลำดับ โดยที่ 0(ยกกำลัง -1) = 0

ขั้นตอนการขยายคีย์

งานของขั้นตอนการขยายคีย์คือการสร้างคีย์ย่อย 16 บิต 52 รายการที่ใช้ในรอบการเข้ารหัสและการแปลงเพิ่มเติม (เช่น ข้อมูลคีย์ทั้งหมด 832 บิต) ขั้นตอนนี้ง่ายมาก และดำเนินการดังนี้:

  1. คีย์การเข้ารหัส 128 บิตแบ่งออกเป็นแปดคีย์ย่อย 16 บิต พวกมันกลายเป็นแปดคีย์ย่อยแรกของอัลกอริทึม (K11, K12, K13, K14, K15, K16, K21, K22)
  2. คีย์เข้ารหัสถูกหมุนไปทางซ้าย 25 บิต
  3. ผลลัพธ์จะถูกแบ่งออกเป็นแปดคีย์ย่อยดังต่อไปนี้
  4. คีย์การเข้ารหัสจะถูกเลื่อนไปทางซ้ายทีละ 25 บิต ไปเรื่อยๆ จนกว่าจะสร้างคีย์ย่อยตามจำนวนที่ต้องการ

ความแข็งแกร่งของการเข้ารหัสลับของอัลกอริทึม

ในปีต่อไปหลังจากการปรากฏตัวของอัลกอริทึม PES ผู้เขียนได้ตีพิมพ์บทความที่พิสูจน์จุดอ่อนของอัลกอริทึมที่เกี่ยวข้องกับการเข้ารหัสเชิงอนุพันธ์ (ดูตัวอย่างบทความ "BYTE / Russia" No 11 "2004) : เพื่อกำหนดคีย์การเข้ารหัสก็เพียงพอแล้วที่จะดำเนินการเข้ารหัส 2 (กำลัง 64) ในขณะที่การแจงนับค่าของคีย์ 128 บิตทั้งหมดจะต้องมีการดำเนินการ 2 (กำลัง 128)

อัลกอริทึม IDEA ปรากฏขึ้นเนื่องจากการแก้ไขเล็กน้อยของอัลกอริทึม PES (รูปที่ 2) หากเราเปรียบเทียบโครงร่างอัลกอริทึมของ IDEA และ PES จะไม่มีความแตกต่างมากนัก:

  • การดำเนินการคูณของ subblock B ด้วยคีย์ย่อยที่สองของรอบจะถูกแทนที่ด้วยการดำเนินการของการบวก
  • การดำเนินการเพิ่มเติมของบล็อกย่อย D ด้วยคีย์ย่อยที่สี่ของรอบจะถูกแทนที่ด้วยการดำเนินการคูณ
  • มิฉะนั้น บล็อกย่อยจะเลื่อนเมื่อสิ้นสุดรอบ

ดังที่ Bruce Schneier หนึ่งในนักวิทยาการเข้ารหัสลับที่มีชื่อเสียงที่สุดในโลกได้กล่าวไว้ในหนังสือ Applied Cryptography ว่า "...มันน่าทึ่งมากที่การเปลี่ยนแปลงเล็กๆ น้อยๆ ดังกล่าวสามารถนำไปสู่ความแตกต่างที่ยิ่งใหญ่ได้" อัลกอริทึมของ IDEA แทบไม่มีภูมิคุ้มกันต่อการเข้ารหัสแบบดิฟเฟอเรนเชียล และในหนังสือเล่มเดียวกัน (ตีพิมพ์ในปี 1996) Bruce Schneier ให้ความเห็นเกี่ยวกับสิ่งนี้ดังนี้: "ฉันคิดว่านี่เป็นอัลกอริธึมบล็อกที่ดีที่สุดและน่าเชื่อถือที่สุดที่เผยแพร่จนถึงปัจจุบัน"

อย่างไรก็ตาม ในปี 1996 เดียวกัน Paul Kocher (พอล โคเชอร์) นักวิทยาการเข้ารหัสลับที่มีชื่อเสียงได้คิดค้นการโจมตีที่ค่อนข้างยากต่อการดำเนินการ ซึ่งผ่านการตรวจวัดเวลาดำเนินการเข้ารหัสที่มีความแม่นยำสูงซ้ำๆ 2 ครั้ง (ถึงระดับที่ 20) แบบสุ่ม ข้อความธรรมดาที่เลือกบนคีย์ที่เกี่ยวข้องโดยอัตราส่วนที่แน่นอนกับคีย์ที่ต้องการ และการวิเคราะห์ผลลัพธ์ที่ตามมาเพื่อคำนวณคีย์การเข้ารหัสที่ต้องการ การโจมตีนี้ (เช่นเดียวกับการโจมตีคีย์เชื่อมโยงอื่นๆ) ถือว่าผู้เข้ารหัสไม่มีสิทธิ์เข้าถึงคีย์ที่ต้องการโดยตรง (เช่น คีย์นั้นฝังอยู่ในตัวเข้ารหัสฮาร์ดแวร์หรือสมาร์ทการ์ดบางตัว) แต่สามารถแก้ไขส่วนย่อยของคีย์ต่างๆ ได้ด้วยวิธีหนึ่ง .

และก่อนหน้านี้ในปี 1993 นักวิทยาการเข้ารหัสลับหลายคนจากเบลเยียมได้ค้นพบคีย์ที่อ่อนแอหลายคลาสในอัลกอริทึม IDEA (มีเพียง 2 (ยกกำลัง 23) + 2 (ยกกำลัง 35) + 2 (ยกกำลัง 51) ที่มีระดับต่างกัน จุดอ่อน) ซึ่งบางอย่างสามารถคำนวณได้โดยการโจมตีแบบเข้ารหัสด้วยข้อความธรรมดาที่เลือก อย่างไรก็ตาม ผู้เขียนการโจมตีนี้ได้เสนอ "ยาแก้พิษ" ด้วยตนเอง - คีย์ที่อ่อนแอจะถูกแยกออกโดย XORing ค่าคงที่เลขฐานสิบหกพิเศษ 0DAE ในแต่ละคีย์ย่อยก่อนที่จะใช้งาน

ดังนั้น แม้ว่าจะมีข้อบกพร่องที่ระบุได้ แต่อัลกอริทึม IDEA ก็ถือเป็นอัลกอริทึมที่มีความเข้มงวดในการเข้ารหัสสูง ข้อได้เปรียบที่ปฏิเสธไม่ได้ของอัลกอริทึมนี้คือความเร็วการเข้ารหัสที่สูง ไม่น้อยกว่าสองเท่าของอัลกอริทึม DES (ขึ้นอยู่กับแพลตฟอร์มที่ใช้เข้ารหัส) และความสามารถในการดำเนินการขยายคีย์ "ทันที" (นั่นคือควบคู่ไปกับการดำเนินการรอบการเข้ารหัส) ก็ยินดีต้อนรับในอัลกอริทึมการเข้ารหัสที่ทันสมัยกว่าเช่นกัน อย่างไรก็ตาม ควรกล่าวว่าความเร็วในการถอดรหัสนั้นค่อนข้างลดลงเนื่องจากมีการดำเนินการที่ใช้ทรัพยากรมากสำหรับการคำนวณโมดูโลแบบส่วนกลับแบบทวีคูณ (2 (กำลัง 16) + 1)

***

อัลกอริทึมของ IDEA ไม่ได้กลายเป็นมาตรฐานการเข้ารหัสระหว่างประเทศตามที่ผู้เขียนต้องการ อย่างไรก็ตาม ถือได้ว่าเป็นหนึ่งในอัลกอริธึมการเข้ารหัสที่ใช้กันอย่างแพร่หลายมากที่สุดในโลก ปัจจุบัน IDEA ยังคงใช้ในแอปพลิเคชันต่างๆ มากมาย รวมถึงโปรแกรมปกป้องข้อมูล PGP ที่เป็นที่รู้จักและใช้กันอย่างแพร่หลาย

อัลกอริทึมสมมาตรการเข้ารหัสที่พัฒนาโดย Xuejia Lai และ James Massey จาก Swiss Federal Institute of Technology ฉบับดั้งเดิมตีพิมพ์ในปี 1990 เวอร์ชันแก้ไขของอัลกอริทึมซึ่งได้รับการเสริมความแข็งแกร่งด้วยวิธีการป้องกันการโจมตีการเข้ารหัสแบบแยกส่วนถูกนำเสนอในปี 1991 และอธิบายในรายละเอียดในปี 1992

IDEA เป็นหนึ่งในอัลกอริธึมการเข้ารหัสแบบสมมาตรหลายตัวที่เดิมมีจุดประสงค์เพื่อแทนที่ DES

หลักการพัฒนา

IDEA เป็นอัลกอริทึมบล็อกที่ใช้ 128 บิต คีย์การเข้ารหัสข้อมูลในบล็อก 64 บิต

เป้าหมายของการพัฒนา IDEA คือการสร้างอัลกอริธึมการเข้ารหัสที่ค่อนข้างแข็งแกร่งพร้อมการใช้งานที่ค่อนข้างง่าย

ความแข็งแกร่งของการเข้ารหัส

คุณลักษณะต่อไปนี้ของ IDEA บ่งบอกถึงความแข็งแกร่งของการเข้ารหัส:

  1. ความยาวบล็อก: ความยาวของบล็อกต้องเพียงพอที่จะซ่อนลักษณะทางสถิติทั้งหมดของข้อความต้นฉบับ ในทางกลับกัน ความซับซ้อนของการนำฟังก์ชันการเข้ารหัสไปใช้นั้นเพิ่มขึ้นแบบทวีคูณตามขนาดบล็อก การใช้บล็อก 64 บิตในยุค 90 หมายถึงพลังงานที่เพียงพอ ยิ่งไปกว่านั้น การใช้โหมดการเข้ารหัส CBC บ่งชี้ถึงความแข็งแกร่งของอัลกอริทึมในด้านนี้
  2. ความยาวของคีย์: ความยาวของคีย์ต้องใหญ่พอที่จะป้องกันการแจงนับคีย์อย่างง่าย ด้วยความยาวของคีย์ 128 บิต IDEA จึงถือว่ามีความปลอดภัยพอสมควร
  3. ความสับสน: ciphertext ต้องขึ้นอยู่กับคีย์ด้วยวิธีที่ซับซ้อนและสับสน
  4. การแพร่กระจาย: แต่ละบิตของข้อความล้วนต้องส่งผลต่อแต่ละบิตของข้อความไซเฟอร์ การแพร่กระจายบิตที่ไม่ได้เข้ารหัสหนึ่งบิตไปยังบิตเข้ารหัสจำนวนมากจะบดบังโครงสร้างทางสถิติของข้อความธรรมดา การกำหนดลักษณะทางสถิติของข้อความไซเฟอร์ขึ้นอยู่กับลักษณะทางสถิติของข้อความธรรมดานั้นไม่ใช่เรื่องง่าย ความคิดจากมุมมองนี้เป็นอย่างมาก อัลกอริทึมที่มีประสิทธิภาพ.

ใน IDEA สองขั้นตอนสุดท้ายดำเนินการสามขั้นตอน สิ่งนี้แตกต่างจาก DES ซึ่งทุกอย่างสร้างขึ้นจากการใช้การดำเนินการ เอ็กซ์ออร์และ S-box ขนาดเล็กที่ไม่ใช่เชิงเส้น

การดำเนินการแต่ละครั้งจะดำเนินการกับอินพุต 16 บิตสองตัวและสร้างเอาต์พุต 16 บิตหนึ่งตัว การดำเนินการเหล่านี้คือ:

การดำเนินการทั้งสามนี้เข้ากันไม่ได้ในแง่ที่ว่า:

การใช้การดำเนินการทั้งสามนี้ร่วมกันทำให้เกิดการเปลี่ยนแปลงที่ซับซ้อนของอินพุต ทำให้การเข้ารหัสลับทำได้ยากกว่าในอัลกอริทึม เช่น DES ซึ่งขึ้นอยู่กับฟังก์ชันเพียงอย่างเดียว เอ็กซ์ออร์.

การเข้ารหัส

พิจารณาโครงร่างการเข้ารหัส IDEA ทั่วไป เช่นเดียวกับอัลกอริธึมการเข้ารหัสใดๆ อินพุตมีสองอินพุต: บล็อกข้อความธรรมดาและคีย์ ในกรณีนี้ บล็อกที่ไม่ได้เข้ารหัสมีความยาว 64 บิต ส่วนคีย์ยาว 128 บิต

ประกอบด้วยแปดรอบตามด้วยการแปลงร่างครั้งสุดท้าย อัลกอริทึมแบ่งบล็อกออกเป็นสี่บล็อกย่อย 16 บิต แต่ละรอบจะใช้บล็อกย่อย 16 บิตสี่บล็อกเป็นอินพุตและสร้างบล็อกย่อยเอาต์พุต 16 บิตสี่บล็อก การแปลงขั้นสุดท้ายยังใช้บล็อกย่อย 16 บิตสี่บล็อกเป็นอินพุตและสร้างบล็อกย่อย 16 บิตสี่บล็อก แต่ละรอบใช้คีย์ 16 บิตหกคีย์ การแปลงสุดท้ายใช้สี่คีย์ย่อย เช่น โดยรวมแล้ว 52 คีย์ย่อยถูกใช้ในอัลกอริทึม


ข้าว. 3.1.
ลำดับการเปลี่ยนแปลงของรอบเดียว

พิจารณาลำดับของการเปลี่ยนแปลงของรอบเดียว

หนึ่งในองค์ประกอบหลักของอัลกอริทึมที่ให้การแพร่กระจายคือโครงสร้างที่เรียกว่า MA (การคูณ / การบวก):


ข้าว. 3.2.

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

รอบเริ่มต้นด้วยการแปลงที่รวมบล็อกย่อยอินพุตสี่บล็อกเข้ากับสี่บล็อกย่อยโดยใช้การบวกและการคูณ บล็อกเอาต์พุตทั้งสี่ของการแปลงนี้จะรวมกันโดยใช้การดำเนินการ เอ็กซ์ออร์เพื่อสร้างบล็อก 16 บิตสองบล็อกที่เป็นอินพุตให้กับโครงสร้าง MA นอกจากนี้ โครงสร้าง MA ยังมีอินพุตอีกสองตัวและสร้างเอาต์พุต 16 บิตสองตัว


ข้าว. 3.3.

สุดท้าย บล็อกย่อยเอาต์พุตทั้งสี่ของการแปลงครั้งแรกจะรวมกับบล็อกย่อยเอาต์พุตสองบล็อกของโครงสร้าง MA โดยใช้ เอ็กซ์ออร์เพื่อสร้างสี่บล็อกย่อยเอาต์พุตของการวนซ้ำนี้ โปรดทราบว่าช่องจ่ายไฟสองช่องที่สร้างขึ้นบางส่วนโดยอินพุตที่สองและสาม (X 2 และ X 3 ) จะถูกสลับเพื่อสร้างช่องสัญญาณที่สองและสาม (W 12 และ W 13 ) สิ่งนี้จะเพิ่มการสับบิตและทำให้อัลกอริทึมแข็งแกร่งขึ้น การเข้ารหัสที่แตกต่างกัน.

พิจารณารอบที่เก้าของอัลกอริทึม ซึ่งกำหนดให้เป็นการแปลงขั้นสุดท้าย นี่คือโครงสร้างเดียวกับที่อธิบายไว้ข้างต้น ข้อแตกต่างเพียงอย่างเดียวคืออินพุตที่สองและสามจะกลับด้าน สิ่งนี้ทำเพื่อให้การถอดรหัสมีโครงสร้างเดียวกันกับการเข้ารหัส โปรดทราบว่าขั้นตอนที่เก้าต้องการเพียงสี่อินพุต