2024-08-27 AES vs Rijndael
PHP で Rijndael暗号アルゴリズムを使う機会があったので、AESとの違いをメモ。
アルゴリズム | キー長 (bytes) | IVの長さ (bytes) | ブロック長 (bytes) |
---|---|---|---|
AES-128 | 16 | 16 | 16 |
AES-192 | 24 | 16 | 16 |
AES-256 | 32 | 16 | 16 |
Rijndael-128 | 16/24/32 | 16 | 16 |
Rijndael-192 | 16/24/32 | 24 | 24 |
Rijndael-256 | 16/24/32 | 32 | 32 |
※基本的にCBCモード(Cipher Block Chainingモード)の場合、ブロック長とIVの長さは同じになる。
エラーメモ
mcrypt + Rijndael でサポートしないキーを渡した場合:
PHP Warning: mcrypt_encrypt(): Key of size 17 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported in php
mcrypt + Rijndae-256 でサポートしないIVを渡した場合:
PHP Warning: mcrypt_encrypt(): Received initialization vector of size 30, but size 32 is required for this encryption mode in php
AES と Rijndael の違い
以下、ChatGPTの回答の抜粋:
RijndaelはAESの基盤となるアルゴリズムですが、AESとして採用される際に以下のような制限が設けられました:
- ブロックサイズ: AESではブロックサイズが128ビットに固定されていますが、Rijndaelは128、192、256ビットのブロックサイズをサポートしています。
- 鍵長: AESの鍵長は128、192、256ビットですが、Rijndaelではより広い範囲の鍵長をサポートできます。
Rijndaelをベースにより標準化させたものがAES.