google-code-prettify

2006-11-24

AESのOFBのdecrypt時にはAES_set_decrypt_key()は使えない

OpenSSLのAESのencode/decode時に使う関数としては、以下の物がある(EVPの事は考えない)。
AES_set_encrypt_key()
AES_set_decrypt_key()

AES_ecb_encrypt()
AES_cbc_encrypt()
AES_cfb128_encrypt()
AES_ofb128_encrypt()

これらの関数の引数には、int encがあり、1ならencode、0ならdecodeを行う。

ECB,CBCの場合のdecodeは、
AES_set_decrypt_key()
AES_ecb/cbc_encrypt(..., 0);

とすればdecodeできるのだが、CFBとOFBの場合は以下のようにdecodeの場合でもAES_set_encrypt_key()を使わなくてはらなない。
AES_set_encrypt_key()
AES_cfb128/ofb128_encrypt(..., 0);


なぜかと言うと、
  • AES_xxx_encrypt()は、内部でAES_encrypt()やAES_decrypt()を呼んでいる
  • AES_set_encrypt/decrypt_key()は、AES_encrypt/decrypt()を呼ぶためのキーをセットする関数である
のだが、AES_xxx_encrypt()のうち
  • ECBとCBCは、encode時にはAES_encrypt()、decode時にはAES_decrypt()を呼んでいる
  • OFBとCFBは、encode時もdecode時もAES_encrypt()を呼んいる
となっているから。

0 件のコメント: