ความแตกต่างที่สำคัญระหว่างการเข้ารหัสบล็อกและการเข้ารหัสกระแสคือการเข้ารหัสตัวเลขเข้ารหัสและถอดรหัสบล็อกของข้อความในเวลา ในขณะที่การเข้ารหัสสตรีมเข้ารหัสและถอดรหัสข้อความโดยการหนึ่งไบต์ของข้อความในเวลา
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | บล็อกเลขศูนย์ | สตรีมตัวเลข |
---|---|---|
ขั้นพื้นฐาน | แปลงข้อความธรรมดาโดยการบล็อกในแต่ละครั้ง | แปลงข้อความโดยใช้หนึ่งไบต์ของข้อความธรรมดาในแต่ละครั้ง |
ความซับซ้อน | การออกแบบที่เรียบง่าย | คอมเพล็กซ์ค่อนข้าง |
ไม่ใช้บิต | 64 บิตหรือมากกว่า | 8 บิต |
ความสับสนและการกระจาย | ใช้ทั้งความสับสนและการกระจาย | ต้องอาศัยความสับสนเท่านั้น |
โหมดอัลกอริทึมที่ใช้ | ECB (หนังสือรหัสอิเล็กทรอนิกส์) CBC (Cipher Block Chaining) | CFB (ข้อเสนอแนะการเข้ารหัส) OFB (ข้อเสนอแนะการส่งออก) |
reversibility | การกลับข้อความที่เข้ารหัสยาก | มันใช้ XOR สำหรับการเข้ารหัสซึ่งสามารถย้อนกลับเป็นข้อความธรรมดาได้อย่างง่ายดาย |
การดำเนินงาน | Feistel Cipher | Vernam Cipher |
ความหมายของ Block Cipher
Block Cipher นำข้อความและแบ่งออกเป็นขนาดคงที่ของบล็อกและแปลงหนึ่งบล็อกของข้อความในทันที ตัวอย่างเช่น เรามีข้อความเป็นข้อความธรรมดา“ STREET_BY_STREET” ที่ต้องเข้ารหัส การใช้รหัสลับ“ STREET” จะต้องถูกเข้ารหัสในตอนแรกตามด้วย“ _BY_” และสุดท้ายคือ“ STREET” ในที่สุด
ในทางปฏิบัติจริงการสื่อสารจะเกิดขึ้นในบิตเท่านั้น ดังนั้น STREET จริง ๆ แล้วหมายถึงไบนารีเทียบเท่าของอักขระ ASCII ของ STREET จากนั้นอัลกอริทึมใด ๆ จะเข้ารหัสสิ่งเหล่านี้ บิตผลลัพธ์จะถูกแปลงกลับเป็นค่า ASCII ที่เท่ากัน
ปัญหาที่เห็นได้ชัดเกี่ยวกับการใช้ Block Ciphers กำลัง ทำซ้ำข้อความ ซึ่งสร้างรหัสลับเดียวกัน ดังนั้นมันจะให้คำแนะนำแก่ cryptanalyst ซึ่งทำให้ง่ายต่อการเข้าใจสตริงที่เกิดขึ้นประจำของข้อความธรรมดา เป็นผลให้มันสามารถเปิดเผยข้อความทั้งหมด
เพื่อเอาชนะจากปัญหานี้จะใช้ โหมดการโยง ในเทคนิคนี้บล็อกก่อนหน้าของข้อความตัวเลขจะถูกผสมกับบล็อกปัจจุบันเพื่อให้ข้อความข้อความตัวเลขนั้นคลุมเครือสิ่งนี้จะหลีกเลี่ยงรูปแบบที่เกิดซ้ำของบล็อกที่มีเนื้อหาเดียวกัน
ความหมายของการเข้ารหัสกระแส
โดยทั่วไปสตรีมเข้ารหัสจะเข้ารหัสหนึ่งไบต์ของข้อความในขณะนั้นแทนที่จะใช้บล็อก ลอง ยกตัวอย่าง สมมติว่าข้อความต้นฉบับ (ข้อความธรรมดา) คือ“ ท้องฟ้าสีฟ้า” ใน ASCII (เช่นรูปแบบข้อความ) เมื่อคุณแปลง ASCII เหล่านี้เป็นค่าไบนารีที่เทียบเท่ากันมันจะให้ผลลัพธ์ในรูปแบบ 0 และ 1 ปล่อยให้มันแปลใน 010111001
สำหรับการเข้ารหัสและการถอดรหัสจะใช้ตัวสร้าง บิตเทียมเทียม ซึ่งมีการโหลดคีย์และข้อความธรรมดา ตัวสร้างบิตหลอกเทียมสร้างกระแสข้อมูลจำนวน 8 บิตที่รู้จักกันในชื่อ keystream ปล่อยให้อินพุตคีย์คือ 100101011 ตอนนี้คีย์และเท็กซ์เท็กซ์คือ XORed ตรรกะ XOR นั้นง่ายต่อการเข้าใจ
XOR สร้างเอาต์พุต 1 เมื่ออินพุตหนึ่งเป็น 0 และอีกอันคือ 1 เอาต์พุตคือ 0 ถ้าทั้งอินพุตเป็น 0 หรือทั้งสองอินพุตเป็น 1
ความสับสน เป็นวิธีการที่รับประกันได้ว่าข้อความตัวเลขไม่ให้เงื่อนงำเกี่ยวกับข้อความธรรมดาเดิม
การแพร่กระจาย เป็นกลยุทธ์ที่ใช้เพื่อเพิ่มความซ้ำซ้อนของข้อความธรรมดาโดยการแพร่กระจายไปตามแถวและคอลัมน์
ความแตกต่างที่สำคัญระหว่างการเข้ารหัสตัวเลขและการเข้ารหัสแบบสตรีม
- เทคนิคการเข้ารหัสบล็อคเกี่ยวข้องกับการเข้ารหัสของข้อความหนึ่งบล็อกในแต่ละครั้งเช่นเดี่ยว ในทำนองเดียวกันถอดรหัสข้อความโดยการบล็อกหนึ่งหลังจากที่อื่น ในทางกลับกันเทคนิคการเข้ารหัสแบบสตรีมเกี่ยวข้องกับการเข้ารหัสและถอดรหัสหนึ่งไบต์ของข้อความในแต่ละครั้ง
- Block cipher ใช้ทั้งความสับสนและการแพร่กระจายในขณะที่ stream cipher อาศัยความสับสนเท่านั้น
- ขนาดปกติของบล็อกอาจเป็น 64 หรือ 128 บิตในรหัสบล็อก เทียบกับ 1 ไบต์ (8 บิต) ในแต่ละครั้งจะถูกแปลงเป็นเลขศูนย์
- Block cipher ใช้โหมดอัลกอริทึม ECB (Electronic Code Book) และ CBC (Cipher Block Chaining) ในทางกลับกัน Stream cipher ใช้โหมดอัลกอริทึม CFB (Feedback Feedback) และ OFB (Output Feedback)
- Stream cipher ใช้ฟังก์ชั่น XOR ในการแปลงข้อความธรรมดาเป็นข้อความตัวเลขซึ่งเป็นเหตุผลว่าทำไมการกลับบิต XORed เป็นเรื่องง่าย ในขณะที่ Block ตัวเลขไม่ใช้ XOR ในการทำเช่นนั้น
- Block cipher ใช้คีย์เดียวกันเพื่อเข้ารหัสแต่ละบล็อคในขณะที่ stream cipher ใช้คีย์ที่แตกต่างกันสำหรับแต่ละไบต์
สรุป:
Block Cipher และ Stream Cipher นั้นแตกต่างกันไปตามการเข้ารหัสและถอดรหัสข้อความธรรมดา แนวคิดเบื้องหลังการเข้ารหัสบล็อกคือการแบ่งข้อความธรรมดาออกเป็นบล็อกเพิ่มเติมเข้ารหัสบล็อกเหล่านั้น ในขณะที่การเข้ารหัสสตรีมจะแปลงข้อความธรรมดาเป็นบิตคล้ายกับสตรีม