บล็อกโหมดการเข้ารหัสของการทำงาน
ในบทนี้เราจะพูดถึงโหมดต่างๆของการทำงานของรหัสบล็อก นี่คือกฎขั้นตอนสำหรับการเข้ารหัสบล็อกทั่วไป ที่น่าสนใจคือโหมดที่แตกต่างกันส่งผลให้เกิดคุณสมบัติที่แตกต่างกันซึ่งจะเพิ่มความปลอดภัยของรหัสบล็อกที่อยู่เบื้องหลัง
รหัสบล็อกจะประมวลผลบล็อกข้อมูลที่มีขนาดคงที่ โดยปกติขนาดของข้อความจะใหญ่กว่าขนาดบล็อก ดังนั้นข้อความขนาดยาวจะถูกแบ่งออกเป็นชุดของบล็อกข้อความตามลำดับและการเข้ารหัสจะดำเนินการกับบล็อกเหล่านี้ทีละบล็อก
โหมด Electronic Code Book (ECB)
โหมดนี้เป็นวิธีที่ตรงไปตรงมาที่สุดในการประมวลผลชุดบล็อกข้อความตามลำดับ
การดำเนินการ
ผู้ใช้รับบล็อกแรกของข้อความธรรมดาและเข้ารหัสด้วยคีย์เพื่อสร้างไซเฟอร์เท็กซ์บล็อกแรก
จากนั้นเขาก็ใช้ข้อความธรรมดาบล็อกที่สองและทำตามขั้นตอนเดียวกันด้วยคีย์เดียวกันไปเรื่อย ๆ
โหมด ECB คือ deterministicนั่นคือถ้าบล็อกข้อความธรรมดา P1, P2, …, Pm ถูกเข้ารหัสสองครั้งภายใต้คีย์เดียวกันบล็อกการเข้ารหัสเอาต์พุตจะเหมือนกัน
ในความเป็นจริงสำหรับคีย์ที่กำหนดในทางเทคนิคเราสามารถสร้าง codebook ของ ciphertexts สำหรับบล็อกข้อความธรรมดาทั้งหมดที่เป็นไปได้ จากนั้นการเข้ารหัสจะนำมาซึ่งการค้นหาเฉพาะข้อความธรรมดาที่จำเป็นและเลือกไซเฟอร์เท็กซ์ที่เกี่ยวข้อง ดังนั้นการดำเนินการจึงคล้ายคลึงกับการกำหนดคำรหัสใน Codebook และด้วยเหตุนี้จึงได้รับชื่ออย่างเป็นทางการ - โหมดการทำงานของ Electronic Codebook (ECB) มีภาพประกอบดังนี้ -
การวิเคราะห์โหมด ECB
ในความเป็นจริงข้อมูลแอปพลิเคชันใด ๆ มักจะมีข้อมูลบางส่วนซึ่งสามารถเดาได้ ตัวอย่างเช่นช่วงของเงินเดือนสามารถเดาได้ การเข้ารหัสจาก ECB สามารถทำให้ผู้โจมตีสามารถเดาข้อความธรรมดาได้โดยการลองผิดลองถูกหากข้อความธรรมดาอยู่ในสภาพที่คาดเดาได้
ตัวอย่างเช่นหากทราบว่าไซเฟอร์เท็กซ์จากโหมด ECB เข้ารหัสตัวเลขเงินเดือนการทดลองจำนวนเล็กน้อยจะทำให้ผู้โจมตีสามารถกู้คืนตัวเลขได้ โดยทั่วไปเราไม่ต้องการใช้การเข้ารหัสแบบกำหนดและด้วยเหตุนี้จึงไม่ควรใช้โหมด ECB ในแอปพลิเคชันส่วนใหญ่
โหมด Cipher Block Chaining (CBC)
โหมดการทำงานของ CBC ให้การพึ่งพาข้อความสำหรับการสร้าง ciphertext และทำให้ระบบไม่ถูกกำหนด
การดำเนินการ
การทำงานของโหมด CBC แสดงอยู่ในภาพประกอบต่อไปนี้ ขั้นตอนมีดังนี้ -
โหลด n-bit Initialization Vector (IV) ในรีจิสเตอร์ด้านบน
XOR บล็อกข้อความธรรมดา n-bit ที่มีค่าข้อมูลใน top register
เข้ารหัสผลลัพธ์ของการดำเนินการ XOR ด้วยการเข้ารหัสบล็อกที่มีคีย์ K
ป้อนบล็อก ciphertext ในรีจิสเตอร์ด้านบนและดำเนินการต่อไปจนกว่าบล็อกข้อความธรรมดาทั้งหมดจะถูกประมวลผล
สำหรับการถอดรหัสข้อมูล IV จะถูก XORed โดยมีการถอดรหัสบล็อกไซเฟอร์เท็กซ์แรก บล็อกไซเฟอร์เท็กซ์แรกยังถูกป้อนเพื่อรีจิสเตอร์แทนที่ IV สำหรับการถอดรหัสบล็อกไซเฟอร์เท็กซ์ถัดไป
การวิเคราะห์โหมด CBC
ในโหมด CBC บล็อกข้อความธรรมดาปัจจุบันจะถูกเพิ่มลงในบล็อกไซเฟอร์เท็กซ์ก่อนหน้าจากนั้นผลลัพธ์จะถูกเข้ารหัสด้วยคีย์ การถอดรหัสจึงเป็นกระบวนการย้อนกลับซึ่งเกี่ยวข้องกับการถอดรหัสรหัสลับปัจจุบันแล้วเพิ่มบล็อกการเข้ารหัสก่อนหน้าลงในผลลัพธ์
ข้อดีของ CBC มากกว่า ECB คือการเปลี่ยน IV ทำให้เกิดการเข้ารหัสที่แตกต่างกันสำหรับข้อความที่เหมือนกัน ในด้านเสียเปรียบข้อผิดพลาดในการส่งข้อมูลจะแพร่กระจายไปยังบล็อกถัดไปอีกสองสามบล็อกระหว่างการถอดรหัสเนื่องจากเอฟเฟกต์โซ่
เป็นมูลค่าการกล่าวขวัญว่าโหมด CBC เป็นพื้นฐานสำหรับกลไกการตรวจสอบแหล่งที่มาของข้อมูลที่รู้จักกันดี ดังนั้นจึงมีข้อได้เปรียบสำหรับแอปพลิเคชันที่ต้องการทั้งการเข้ารหัสแบบสมมาตรและการตรวจสอบแหล่งที่มาของข้อมูล
โหมด Cipher Feedback (CFB)
ในโหมดนี้บล็อกไซเฟอร์เท็กซ์แต่ละบล็อกจะ 'ป้อนกลับ' ในกระบวนการเข้ารหัสเพื่อเข้ารหัสบล็อกข้อความธรรมดาถัดไป
การดำเนินการ
การทำงานของโหมด CFB แสดงอยู่ในภาพประกอบต่อไปนี้ ตัวอย่างเช่นในระบบปัจจุบันบล็อกข้อความมีบิตขนาดโดยที่ 1 <s <n. โหมด CFB ต้องใช้เวกเตอร์เริ่มต้น (IV) เป็นบล็อกอินพุต n-bit แบบสุ่มเริ่มต้น IV ไม่จำเป็นต้องเป็นความลับ ขั้นตอนการดำเนินการคือ -
โหลด IV ในการลงทะเบียนด้านบน
เข้ารหัสค่าข้อมูลในรีจิสเตอร์ด้านบนด้วยการเข้ารหัสบล็อกที่อยู่ภายใต้คีย์ K
ใช้เฉพาะจำนวนบิตที่สำคัญที่สุด (บิตด้านซ้าย) ของเอาต์พุตของกระบวนการเข้ารหัสและ XOR กับบล็อกข้อความธรรมดาของบิตเพื่อสร้างบล็อกไซเฟอร์เท็กซ์
ป้อนบล็อก ciphertext ลงในรีจิสเตอร์ด้านบนโดยเลื่อนข้อมูลที่มีอยู่แล้วไปทางซ้ายและดำเนินการต่อจนกว่าบล็อกข้อความธรรมดาทั้งหมดจะได้รับการประมวลผล
โดยพื้นฐานแล้วบล็อกไซเฟอร์เท็กซ์ก่อนหน้านี้จะถูกเข้ารหัสด้วยคีย์จากนั้นผลลัพธ์คือ XORed ไปยังบล็อกข้อความธรรมดาปัจจุบัน
ตามขั้นตอนที่คล้ายกันสำหรับการถอดรหัส IV ที่ตัดสินใจล่วงหน้าจะถูกโหลดในตอนแรกเมื่อเริ่มการถอดรหัส
การวิเคราะห์โหมด CFB
โหมด CFB แตกต่างจากโหมด ECB อย่างมากการเข้ารหัสที่สอดคล้องกับบล็อกข้อความธรรมดาที่กำหนดนั้นไม่เพียงขึ้นอยู่กับบล็อกข้อความธรรมดาและคีย์เท่านั้น แต่ยังรวมถึงบล็อกไซเฟอร์เท็กซ์ก่อนหน้าด้วย กล่าวอีกนัยหนึ่งบล็อกการเข้ารหัสจะขึ้นอยู่กับข้อความ
CFB มีคุณสมบัติที่แปลกมาก ในโหมดนี้ผู้ใช้จะถอดรหัสรหัสลับโดยใช้กระบวนการเข้ารหัสของรหัสบล็อกเท่านั้น ไม่เคยใช้อัลกอริทึมการถอดรหัสของการเข้ารหัสบล็อกที่อยู่เบื้องหลัง
เห็นได้ชัดว่าโหมด CFB กำลังแปลงรหัสบล็อกเป็นประเภทของการเข้ารหัสสตรีม อัลกอริธึมการเข้ารหัสใช้เป็นตัวสร้างคีย์สตรีมเพื่อสร้างคีย์สตรีมที่อยู่ในรีจิสเตอร์ด้านล่าง จากนั้นคีย์สตรีมนี้จะถูก XORed ด้วยข้อความธรรมดาเช่นเดียวกับในกรณีของการเข้ารหัสสตรีม
ด้วยการแปลงรหัสบล็อกเป็นรหัสสตรีมโหมด CFB จะให้คุณสมบัติที่เป็นประโยชน์บางประการของการเข้ารหัสสตรีมในขณะที่ยังคงรักษาคุณสมบัติที่เป็นประโยชน์ของการเข้ารหัสบล็อกไว้
ในทางกลับกันข้อผิดพลาดของการส่งจะแพร่กระจายเนื่องจากการเปลี่ยนบล็อก
โหมดการตอบรับเอาต์พุต (OFB)
มันเกี่ยวข้องกับการป้อนบล็อกเอาต์พุตที่ต่อเนื่องกันจากการเข้ารหัสบล็อกที่อยู่เบื้องหลังกลับไป บล็อกข้อเสนอแนะเหล่านี้จัดเตรียมสตริงของบิตเพื่อป้อนอัลกอริทึมการเข้ารหัสซึ่งทำหน้าที่เป็นตัวสร้างคีย์สตรีมเช่นเดียวกับในโหมด CFB
คีย์สตรีมที่สร้างขึ้นคือ XOR-ed พร้อมกับบล็อกข้อความธรรมดา โหมด OFB ต้องการ IV เป็นบล็อกอินพุต n-bit แบบสุ่มเริ่มต้น IV ไม่จำเป็นต้องเป็นความลับ
การดำเนินการดังแสดงในภาพประกอบต่อไปนี้ -
โหมดตัวนับ (CTR)
ถือได้ว่าเป็นโหมด CFB แบบตอบโต้โดยไม่มีข้อเสนอแนะ ในโหมดนี้ทั้งผู้ส่งและผู้รับจำเป็นต้องเข้าถึงตัวนับที่เชื่อถือได้ซึ่งจะคำนวณค่าที่ใช้ร่วมกันใหม่ทุกครั้งที่มีการแลกเปลี่ยนบล็อกไซเฟอร์เท็กซ์ ตัวนับที่ใช้ร่วมกันนี้ไม่จำเป็นต้องเป็นค่าลับ แต่ความท้าทายคือทั้งสองฝ่ายต้องทำให้ตัวนับตรงกัน
การดำเนินการ
ทั้งการเข้ารหัสและการถอดรหัสในโหมด CTR แสดงอยู่ในภาพประกอบต่อไปนี้ ขั้นตอนในการดำเนินการคือ -
โหลดค่าตัวนับเริ่มต้นในรีจิสเตอร์ด้านบนจะเหมือนกันสำหรับทั้งผู้ส่งและผู้รับ มีบทบาทเช่นเดียวกับ IV ในโหมด CFB (และ CBC)
เข้ารหัสเนื้อหาของตัวนับด้วยคีย์และวางผลลัพธ์ในทะเบียนด้านล่าง
นำบล็อกข้อความธรรมดา P1 และ XOR แรกไปที่เนื้อหาของการลงทะเบียนด้านล่าง ผลลัพธ์ของสิ่งนี้คือ C1 ส่ง C1 ไปยังผู้รับและอัปเดตตัวนับ การปรับปรุงตัวนับจะแทนที่คำติชมของการเข้ารหัสในโหมด CFB
ดำเนินการต่อในลักษณะนี้จนกว่าบล็อกข้อความธรรมดาสุดท้ายจะถูกเข้ารหัส
การถอดรหัสเป็นกระบวนการย้อนกลับ บล็อกการเข้ารหัสเป็น XORed พร้อมเอาต์พุตของเนื้อหาที่เข้ารหัสของค่าตัวนับ หลังจากการถอดรหัสของตัวนับบล็อกการเข้ารหัสแต่ละตัวจะได้รับการอัปเดตในกรณีของการเข้ารหัส
การวิเคราะห์โหมดตัวนับ
ไม่มีการพึ่งพาข้อความดังนั้นบล็อกการเข้ารหัสจึงไม่ขึ้นอยู่กับบล็อกข้อความธรรมดาก่อนหน้านี้
เช่นเดียวกับโหมด CFB โหมด CTR ไม่เกี่ยวข้องกับกระบวนการถอดรหัสของรหัสบล็อก นี่เป็นเพราะโหมด CTR ใช้รหัสบล็อกเพื่อสร้างคีย์สตรีมซึ่งเข้ารหัสโดยใช้ฟังก์ชัน XOR กล่าวอีกนัยหนึ่งโหมด CTR ยังแปลงรหัสบล็อกเป็นรหัสสตรีม
ข้อเสียร้ายแรงของโหมด CTR คือต้องใช้ตัวนับซิงโครนัสที่ผู้ส่งและผู้รับ การสูญเสียการซิงโครไนซ์นำไปสู่การกู้คืนข้อความธรรมดาที่ไม่ถูกต้อง
อย่างไรก็ตามโหมด CTR มีข้อดีเกือบทั้งหมดของโหมด CFB นอกจากนี้ยังไม่เผยแพร่ข้อผิดพลาดของการส่งสัญญาณเลย