เหตุใดบล็อกรหัสส่วนใหญ่จึงใช้เป็นรหัสสตรีม
โหมด CTR ไม่ต้องการการเติมเหมือนโหมด CBC ที่ทำให้เกิดการโจมตีจำนวนมากในช่วงหลายปีที่ผ่านมา ซึ่งเรียกว่าการโจมตีจากช่องว่างภายใน [1] [2]. ในที่สุด, CBC ถูกลบออกจาก TLS, TLS 1.3 มีการเข้ารหัสโหมด CTR เท่านั้น (rfc8446).
+------------------------------+------------+
| คำอธิบาย | ค่า |
+------------------------------+------------+
| TLS_AES_128_GCM_SHA256 | {0x13,0x01} |
| | |
| TLS_AES_256_GCM_SHA384 | {0x13,0x02} |
| | |
| TLS_CHACHA20_POLY1305_SHA256 | {0x13,0x03} |
| | |
| TLS_AES_128_CCM_SHA256 | {0x13,0x04} |
| | |
| TLS_AES_128_CCM_8_SHA256 | {0x13,0x05} |
+------------------------------+------------+
การโจมตีและการตัดสินใจของ TLS เพิ่มการใช้งานโหมด CTR โปรดจำไว้ว่าความปลอดภัยทางอินเทอร์เน็ตเกือบทั้งหมดใช้ TLS จากการสำรวจของ SSLlabs %46.6 ของไซต์ยอมรับ TLS 1.3 ( รองรับโปรโตคอล )
ทั้งโหมด CTR หรือ CBC หรือ CFB (โหมดการดำเนินการเก็บถาวรทั้งหมด) ไม่มี MAC โดยการออกแบบ ในการมี mac ให้ใช้ HMAC หรือใช้ GCM, CCM, Poly1305 เป็นต้น
หากเราพูดถึงโหมดในทางทฤษฎี CBC และ CTR สามารถให้ Ind-CPA ได้เท่านั้น นอกเหนือจากนี้ต้องการความสมบูรณ์สำหรับ Ind-CCAx ในทางกลับกัน การเข้ารหัสที่ผ่านการรับรองความถูกต้อง (GCM,CCM,Poly1305) ให้ความปลอดภัยที่สูงกว่า Ind-CCAx
สิ่งนี้ไม่ลดขนาดบล็อกอัลกอริทึมที่มีประสิทธิภาพเป็น 1 บิตเนื่องจากบิตหนึ่งถูกแมปกับบิตอื่นขึ้นอยู่กับบิตสตรีมคีย์หรือไม่
ถ้าคุณใช้ CBC และใช้ช่องว่างภายใน คุณก็จะดำเนินการต่างๆ ได้มากกว่าการละทิ้งบิตที่ไม่จำเป็นของบล็อก ในทั้งสองกรณี จำนวนบล็อกที่เข้ารหัสเกือบจะเท่ากัน (ยกเว้นในกรณีที่บล็อกเต็ม ดังนั้นสำหรับ PKCS#7 จะต้องมีบล็อกเพิ่มเติม) จากนั้น การใช้ช่องว่างภายในและการยกเลิกช่องว่างเป็นฟังก์ชันเพิ่มเติมที่จะใช้ โหมด CTR จำเป็นต้อง x-หรือสตรีม
ตามที่ระบุไว้ในความคิดเห็น โหมด CTR สามารถปรับขนานกันได้สูง แม้กระทั่งเปิดใช้งานการเข้าถึงแบบสุ่มหรือการแคชสตรีมล่วงหน้า การแสดง OpenSLL ด้านล่างในเครื่องของฉัน
ความเร็ว opensl -evp aes-128-cbc aes-128-ctr
พิมพ์ |
16 ไบต์ |
64 ไบต์ |
256 ไบต์ |
1024 ไบต์ |
8192 ไบต์ |
16384 ไบต์ |
aes-128-cbc |
818912.47ก |
1365115.22ก |
1404590.75ก |
1409671.85ก |
1410523.14ก |
1411497.98ก |
aes-128-ctr |
561928.57ก |
1899517.87ก |
3908505.17ก |
5220669.78ก |
5835377.32ก |
5876869.80ก |
อย่างที่เราเห็น ยกเว้นข้อความสั้นๆ ที่ CTR ชนะ CBC ใน AES-NI
จะดีกว่าไหมที่จะเก็บขนาดบล็อกของรหัสไว้
ไม่
เราต้องจัดการกับช่องว่างภายในและปัญหาความไม่ปลอดภัย ทำไมไม่เอาออกเลยเมื่อเรามีโหมด CTR
นอกจากนี้ยังเพิ่มขนาดของข้อมูลได้สูงสุด 16 ไบต์สำหรับ AES
โหมด CTR โดยการออกแบบใช้ PRF แทน PRP (บล็อกรหัสคือ PRP's) ทำให้มีฟังก์ชันการใช้งานที่หลากหลายมากขึ้น เช่นเดียวกับที่เราใช้ ChaCha20 ในโหมด CBC เราต้องใช้ PRP
แน่นอนว่าไม่มีอะไรสมบูรณ์แบบ! แต่ละโหมดมีข้อดีและข้อเสีย ขึ้นอยู่กับบริบทที่คุณสามารถเลือกได้ ตามปกติแล้ว ในการเข้ารหัสสมัยใหม่ เราชอบโหมดการเข้ารหัสที่รับรองความถูกต้อง เช่น AES-GCM (อาจใช้กับ SIV) และ ChaCha20-Poly1305 (ดีกว่า xChaCha20-1305 สำหรับ 192 บิต nonces)