AES เป็นรหัสลับและต้องการรหัสที่เหมาะสม โหมดการทำงาน เช่น CBC, CTR เป็นต้น
ในขณะที่โหมดการสตรีม เช่น CFB, OFB และ CTR ไม่ต้องการการเติม การดำเนินการโหมด CBC และ ECB นั้นต้องการการเติม
ในโหมด CBC การเติมตามปกติคือ พีเคซีเอส#7 การขยายความ. สำหรับการเข้ารหัส CBC ข้อความจะถูกแบ่งออกเป็นบล็อก 128 บิตและช่องว่างภายในจะถูกนำไปใช้ในบล็อกสุดท้าย อาจมีได้สองกรณี
ข้อความหายไปบางไบต์ ในกรณีนี้ให้ $n$ คือจำนวนไบต์ที่ขาดหายไป จากนั้นจึงเป็นจำนวน $n$ จะเพิ่ม $n$ ครั้งเป็นไบต์
[ไบต์ข้อความ ][01] // หายไป 1 ไบต์
[ไบต์ข้อความ ][0202] // หายไป 2 ไบต์
[ไบต์ข้อความ][030303] // ขาดหายไป 3 ไบต์
....
[MB][0F0F0F...0F0F0F0F] // หายไป 15 ไบต์
ข้อความมีหลายขนาด 16 ไบต์ หมายความว่าบล็อกสุดท้ายเต็ม ในกรณีนี้ เพื่อแยกแยะกรณีนี้จากกรณีแรก เราได้เพิ่มบล็อกใหม่ที่เต็มไปด้วย 10
ส. ดังนั้นเราจึงสามารถย้อนกลับของช่องว่างภายในได้ เราสามารถดูเหตุผลได้ว่าถ้าบล็อกสุดท้ายมีอะไร 01
เป็นไบต์สุดท้าย มันเป็นช่องว่างภายในหรือไม่? ดังนั้นการเพิ่ม 01
ขจัดความคลุมเครือนี้
ข้อมูลข้างต้นสามารถอธิบายได้ว่าเหตุใดข้อความจึงกลายเป็นทวีคูณของ 16 ไบต์หลังจากการเข้ารหัส CBC ที่เหมาะสม
ในกรณีของคำถาม 15 ไบต์สามารถกลายเป็น 16 ไบต์ได้โดยการเพิ่ม 01
เป็นไบต์สุดท้าย แล้ว 16 ไบต์ที่เหลือล่ะ?
โหมดการทำงาน CBC ต้องการ 16 ไบต์ สุ่ม และ คาดการณ์ไม่ได้ เวกเตอร์การเริ่มต้น (IV) เพื่อให้ได้ความปลอดภัย Ind-CPA
IV เป็นหนึ่งในข้อกำหนดสำหรับการถอดรหัสบล็อกแรกนอกเหนือจากคีย์ ( คีย์ IV และ $C_0$ ต้องระบุ);
$$P_0 = \operatorname{AES-DEC}(คีย์,C_0) \oplus IV$$
ดังนั้นจึงต้องเพิ่ม / โอน IV ด้วย ในทางปฏิบัติทั่วไป IV จะถูกต่อท้ายด้วยไซเฟอร์เท็กซ์
จะเกิดอะไรขึ้นถ้า IV ไม่ได้ถูกจัดเก็บ/ถ่ายโอน? คุณจะสูญเสียเฉพาะบล็อกแรกของข้อความ ส่วนที่เหลือสามารถถอดรหัสได้อย่างถูกต้องเนื่องจาก;
$$P_i = \operatorname{AES-DEC}(key,C_i) \oplus C_{i-1}, \quad i \geq 1$$
ซ.ม
เดอะ CMS ต้องใช้
ต้องมีช่องพารามิเตอร์ AlgorithmIdentifier และ
ช่องพารามิเตอร์ต้องมี AES-IV:
AES-IV ::= สตริง OCTET (ขนาด (16))
IV ถูกเก็บไว้ใน ตัวระบุอัลกอริทึม
สนามไม่ได้อยู่ใน เนื้อหาที่เข้ารหัส
เนื่องจาก เดฟ เขียนว่ามันคือ -ไบนารี่
ปัญหา.
ตัวเลือก OpenSSL -k
IV และคีย์ได้มาจากวิธีการรับคีย์โดยใช้รหัสผ่านของผู้ใช้และเกลือสุ่ม 8 ไบต์ IV ไม่ได้ต่อท้าย
OpenSSL แสดงผลคำวิเศษก่อน เค็ม__
จากนั้นเกลือ 8 ไบต์ตามด้วยไซเฟอร์เท็กซ์ลงในไฟล์ ตอนนี้ขนาดเอาต์พุตคือขนาดเวทย์มนตร์ของคุณ + ขนาดเกลือ + ขนาดไซเฟอร์เท็กซ์