OpenSSL aes-128-cfb beklenen boyutu üretmiyor

Aug 17 2020

Aes-128-cfb'yi öğrenmek için kendim uygulamaya çalışıyorum . Uygulamamın doğru olup olmadığını onaylamak için, bunu OpenSSL gibi iyi bilinen bir kitaplıkla doğrulamak istiyorum. Ama sonra şifrelemek için OpenSSL kullanmaya çalıştığımda tuhaf bir şey fark ettim.

Ben dosyası var cleartext.txtşu içeriğe sahip:

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

Sonra bu komutu çalıştırıyorum

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

Garip olan, çıktı dosyasının yalnızca 60 bayt içermesidir. AES bloğu 16 bayttır. Bayt cinsinden beklenen çıktı boyutu 16'nın katı olmalıdır. 60, 16'nın katı değildir.

Burada önemli bir şeyi özledim mi?

Yanıtlar

2 kelalaka Aug 17 2020 at 22:02

Çünkü CFB, CTR ve OFB çalışma moduna benzer bir dolgu gerektirmez. Bu modlar şifre blokları oluşturur ve bunlardan gerekli miktarı kullanır.

  • Durumunda openssl enc -K -ivIV çıktı dosyasına yazılmaz output.txt. Bu nedenle, bayt cinsinden düz metinle aynı boyuta sahiptir; 61dosyam için her biri bayt. Bu durumda, IV ile ilgilenmelisiniz. IV'ü de sağladığınız için, tekrar kullanılmadığından emin olun. Aksi takdirde, CTR modunda veya OTP'nin anahtar yeniden kullanımında bir beşik sürükleme meydana gelebilir.

  • Bu durumda -k/-kfile/-pass, IV ve Anahtar, kullanıcının şifresi ve 8 baytlık rasgele tuz kullanılarak anahtar türetme yönteminden türetilir.

    OpenSSL ilk yazıyor dosya sihirli bir Salted__dosya içine daha sonra 8 bayt tuz şifreli. Artık çıktı boyutu sizin magic size + salt size + data-size. Benim sistemimde 8+8+61 = 77bayt.

    • ECB modu kullanılıyorsa

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

    80dolgu nedeniyle boyut bayt olur. Elbette, ECB IV'ü kullanmaz ve bu modu unutmak gerekir!

    • CBC modu, ECB ile benzer sonuçlara sahiptir.

    • Türetilen IV boyutu, 8 baytlık blok şifreleme TDES gibi kullanılan şifreleme algoritmasına göre değişebilir ve Blowfish, AES gibi 8 baytlık IV ve 16 baytlık blok şifreleri gerektirir ve Twofish, 16 bayt IV gerektirir.

Parolayı kullanırken parolanın entropisi ve kullanılan anahtar türetme yöntemi konusunda dikkatli olunabilir. Bir Diceware parolası kullanılması önerilir ve anahtar türetme için en azından PBKDF2 önerilir. OpenSSL, anahtar türetme için çeşitli yöntemler sağlar