OpenSSL aes-128-cfb ไม่ได้ขนาดที่คาดไว้

Aug 17 2020

ฉันพยายามใช้aes-128-cfb ด้วยตัวเองเพื่อการเรียนรู้ เพื่อยืนยันว่าการใช้งานของฉันถูกต้องหรือไม่ฉันต้องการยืนยันกับไลบรารีที่รู้จักกันดีเช่น OpenSSL แต่แล้วฉันก็สังเกตเห็นบางอย่างแปลก ๆ เมื่อพยายามใช้ OpenSSL เพื่อเข้ารหัส

ฉันมีไฟล์ที่cleartext.txtมีเนื้อหาต่อไปนี้:

This is cleartext that will be used to encrypt with OpenSSL.

จากนั้นฉันก็รันคำสั่งนี้

openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt

สิ่งที่แปลกคือไฟล์เอาต์พุตมีเพียง 60 ไบต์ บล็อก AES คือ 16 ไบต์ ขนาดเอาต์พุตที่คาดไว้เป็นไบต์ควรเป็นทวีคูณของ 16 60 ไม่ใช่ผลคูณของ 16

ฉันพลาดสิ่งสำคัญที่นี่ไปหรือเปล่า?

คำตอบ

2 kelalaka Aug 17 2020 at 22:02

เนื่องจาก CFB ไม่ต้องการช่องว่างภายในคล้ายกับโหมดการทำงานของ CTR และ OFB โหมดเหล่านี้จะสร้างบล็อกการเข้ารหัสและอีกโหมดหนึ่งใช้จำนวนที่จำเป็นจากโหมดเหล่านี้

  • ในกรณีที่สี่ไม่ได้เขียนไปยังแฟ้มผลลัพธ์openssl enc -K -iv output.txtดังนั้นจึงมีขนาดเท่ากับข้อความธรรมดาในหน่วยไบต์ 61แต่ละไบต์สำหรับไฟล์ของฉัน ในกรณีนี้คุณต้องจัดการ IV เนื่องจากคุณให้ IV ด้วยโปรดตรวจสอบให้แน่ใจว่าไม่ได้ใช้อีก มิฉะนั้นการลากเปลอาจเกิดขึ้นในโหมด CTR หรือใช้คีย์ของ OTP ซ้ำ

  • ในกรณีของ-k/-kfile/-passIV และ Key ได้มาจากวิธีการหาคีย์โดยใช้รหัสผ่านของผู้ใช้และเกลือสุ่ม 8 ไบต์

    OpenSSL แรกเขียนมายากลไฟล์ของSalted__แล้วเกลือ 8 ไบต์แล้ว ciphertext ลงในแฟ้ม ตอนนี้ขนาดเอาต์พุตคือmagic size + salt size + data-sizeไฟล์. ในระบบของฉัน8+8+61 = 77ไบต์

    • หากใช้โหมด ECB

      openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
      

    จากนั้นขนาดจะเป็น80ไบต์เนื่องจากช่องว่างภายใน แน่นอน ECB ไม่ได้ใช้ IV และควรลืมโหมดนี้ไป!

    • โหมด CBC มีผลลัพธ์ที่คล้ายกันกับ ECB

    • ขนาด IV ที่ได้รับสามารถเปลี่ยนแปลงได้ตามการเข้ารหัสที่ใช้ algoritm เช่น 8-byte block cipher TDES และ Blowfish ต้องใช้ 8-byte IV และ 16-byte block ciphers เช่น AES และ Twofish ต้องใช้ 16 ไบต์ IV

เมื่อใช้รหัสผ่านเราอาจต้องระวังเกี่ยวกับเอนโทรปีของรหัสผ่านและวิธีการหาคีย์ที่ใช้ ขอแนะนำให้ใช้รหัสผ่าน Diceware และอย่างน้อย PBKDF2 สำหรับการได้มาของคีย์ OpenSSL มีวิธีการต่างๆสำหรับการหาคีย์