[PHP-users 35583] Re: mcrypt_decrypt() が正しく複合化できない

youo hoko yoko00068 @ yahoo.co.jp
2011年 5月 27日 (金) 12:53:32 JST


星野です

あ、そうか RIJNDAEL はもともとブロックサイズは可変なのですね。

AES256 は RIJNDAEL-256 かつブロックサイズ128bit固定のものが
採用されたとのこと。

つまり、
mycryptで指定するRIJNDAEL-256はあくまでRIJNDAELであって
AES256では無いんですね。

RIJNDAEL-128 ならばたまたまブロックサイズ128bitになるので
複合化できると。

でもRIJNDAEL-128を指定したのに256bitの鍵を渡して
そのまま動いてしまうのは問題のような。

鍵長を指定できるようにするか、
アルゴリズムにMCRYPT_AES_256を指定できるようになるといいかも

たまたま鍵長エラーが出ないからといって
AES256をmcryptのRIJNDAEL-128で使うのは気が引けますね


--- php-users @ itcom.jp  wrote:
> おく@Workgroupです。
> 
> mcrypt のman によると、
> 
> http://mcrypt.hellug.gr/lib/mcrypt.3.html
> 
> 「RIJNDAEL-128 (the AES winner) , RIJNDAEL-192 , RIJNDAEL-256 The
> numerals 128, 192 and 256 stand for the length of the block size. 」
> とありますので、RIJNDAEL-128で復号できて間違いないようです。
> 
> 
> 2011年5月27日12:01 youo hoko <yoko00068 @ yahoo.co.jp>:
> > 星野です
> >
> > 分かったかもです
> >
> > http://www.ipa.go.jp/security/rfc/RFC3602JA.html#2.4
> >> AES は、16 オクテット(128 ビット)のブロックサイズを使用する。
> >
> > # php -r "echo mcrypt_get_block_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);"
> > 32
> >
> > ブロックサイズが256ビットになっちゃってますね
> >
> > さて、報告ですがわたしこの手の報告をしたことが無く、英語もさっぱり。
> > 翻訳機でがんばってみようかな、、、
> >
> > どなたか報告していただけるとありがたいです
> >
> >
> > --- php-users @ itcom.jp  wrote:
> >> おく@Workgroupです。
> >>
> >>
> >> > $key = '12345678901234567890123456789012' ;
> >> > にしても mcrypt_decrypt() は変なバイナリを返すのです
> >>
> >> なぜか、rijndael-128 で復号できますね・・
> >>
> >> $mcrypt_data   = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
> >> $data_enc, MCRYPT_MODE_ECB), "\x00\x05\x08");
> >>
> >> mcrypt_encrypt で、rijndael-256 したものは、
> >> rijndael-256 で mcrypt_decrypt できるようです。
> >>
> >> encrypt の結果が、openssl と、mcrypt で長さから違うので、
> >> どちらかがおかしいようですね。
> >>
> >>
> >>
> >> 2011年5月26日19:15  <hoshino @ digiadv.co.jp>:
> >> > 星野です
> >> >
> >> > おく@Workgroup様 ご指摘ありがとうございます。
> >> >
> >> > しまった、鍵長が256bitが使えるからAES256なのでした。
> >> > サンプルコードを作っているときに短くしてしまいました。
> >> > 恥ずかしい、、、
> >> >
> >> > $key = '12345678901234567890123456789012' ;
> >> > にしても mcrypt_decrypt() は変なバイナリを返すのです
> >> >
> >> > バイナリをbin2hexで表示してみました。
> >> > ---
> >> > <?php
> >> >   $key = '12345678901234567890123456789012' ;
> >> >   $data = 'abcd1234' ;
> >> >   $data_enc = openssl_encrypt($data,'aes-256-ecb',$key,TRUE) ;
> >> >
> >> >   $openssl_data  = openssl_decrypt($data_enc,'aes-256-ecb',$key,TRUE) ;
> >> >   $mcrypt_data   = mcrypt_decrypt('rijndael-256',$key,$data_enc,'ecb') ;
> >> >
> >> >   echo $openssl_data ,"\n" ;
> >> >   echo bin2hex($openssl_data) ,"\n" ;
> >> >   echo bin2hex($mcrypt_data) ,"\n" ;
> >> > ?>
> >> > ---
> >> > 結果
> >> >>
> >> >> abcd1234
> >> >> 6162636431323334
> >> >> 242a2e7c099eb918aa51b768442db1ffb90639e68c71eb82261dff762f7a1235
> >> >
> >>
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> >
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>


PHP-users メーリングリストの案内