OpenSSL aes-128-cfb beklenen boyutu üretmiyor
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
Çü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ılmazoutput.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 sizinmagic size + salt size + data-size. Benim sistemimde8+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