CI 独自の暗号化を使用しており、AES-256 と CBC で使用されるキーの長さについて確認が必要です。32 バイトと 64 バイトの両方を使用していますが、すべて動作しています。128 バイト (1024 ビット) のキーを使用するのはどうですか?
2 に答える
AES は 128 ビットの固定ブロック サイズを持ち、128、192、および 256 ビットのキー サイズをサポートします。512 ビット (64 バイト) の鍵サイズはサポートしていません。AES のベースである Rijndael は、AES と同じキー サイズで 128、192、および 256 ビットのブロック サイズをサポートします。
system/libraries/Encrypt.phpを使用している場合は、Rijndael-256 (デフォルト。ブロック サイズ (256) が異なるため、AES ではありません) を 256 ビットのキー サイズで使用しています。渡すすべての「キー」は、実際にはサイズが 128 ビットしかない MD5 でハッシュされますが、16 進数でエンコードされているため、余分なセキュリティなしで不必要に 256 ビットに膨らみます。言うまでもなく、これはかなり古いものであり、今後は使用しないでください。
system/libraries/Encryption.phpを使用している場合、AES-128 (ここで 128 は実際には鍵のサイズを意味します) を認証で使用しています。渡すキーは、暗号化と認証の両方に使用されます。暗号化キーは、HMAC-SHA512 を使用して HKDF を介して渡されたキーから派生するため、効果的にハッシュされてから 128 ビットにクランプされます。128 ビットのセキュリティを確保するには、少なくとも 16 バイトのキーを渡す必要があります。
どちらの場合もキーは適切なサイズを取得するためにハッシュされますが (実際にはサイズが大きくなりますが、基礎となるドライバーは必要な最初のバイトのみを使用します)、パスワードを渡そうとしないでください。少なくとも 16 バイトの生成されたキー。
128 バイト (1024 ビット) のキーを使用するのはどうですか?
渡したキーから派生した実際の暗号化キーは実際には 256 ビット長しかないため、これによってセキュリティが強化されることはありません。