- PR -

AESで16Byteを暗号化

1
投稿者投稿内容
らんぴーく
会議室デビュー日: 2005/04/07
投稿数: 9
投稿日時: 2007-12-12 11:06
Java:j2sdk1.4.2_16
AES/CBC/PKCS5Padding
で暗号化プログラムを組みました。

IVを"0123456789012345".getByte()で作成し、"abcdefghijklmnop".getByte()
を暗号化てみました。

当初の予定では、AESは128bitブロック暗号なので、16Byte(128bit)のIVで16Byte(128bit)の文字列を暗号化したら、1ブロック分の暗号化Byte(16Byte)が得られると思っていたのですが、2ブロック分の暗号化Byte(32Byte)が出力されてしまいます。

128bitブロック暗号って、127bitまでを1ブロック…だとすると、IVの定義がおかしい気もしますし、少々混乱しております。

なぜ16Byte文字列を暗号化すると32Byteの暗号化Byte列になるのか、ご教示お願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-12-12 11:46
引用:

らんぴーくさんの書き込み (2007-12-12 11:06) より:
Java:j2sdk1.4.2_16
当初の予定では、AESは128bitブロック暗号なので、16Byte(128bit)のIVで16Byte


AESは256bitブロック長固定です。AESの元となったラインダール暗号ではブロック長が可変で選ぶことができましたが、AESで採用したときに256bit固定となりました。

128bitって鍵長の話じゃないですか?鍵長とブロック長を混同していません?
らんぴーく
会議室デビュー日: 2005/04/07
投稿数: 9
投稿日時: 2007-12-12 11:54
電子政府推奨暗号リスト
http://www.meti.go.jp/feedback/downloadfiles/i30220ej.pdf
に「128 ビットブロック暗号」とあるので128bitごとにブロック区切って、暗号化するのではないでしょうか?
暗号鍵長は米国の輸出規制で128がデフォらしいので、そのまま128使ってます。

ちなみに"abcdefghijklmno".getByte() (15Byte)を暗号化すると1ブロック分(16Byte)の暗号化Byte列が出力されます。
blunder
ベテラン
会議室デビュー日: 2003/09/11
投稿数: 65
投稿日時: 2007-12-12 12:16
パディングしているせいのような気がします。
メッセージ長(オクテット単位)を||M||とすると、パディング長は
16 - (||M|| mod 16)
なので、||M||が16の倍数だと、16オクテットのパディングがつく
ように思われます。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-12-12 12:50
引用:

らんぴーくさんの書き込み (2007-12-12 11:54) より:
電子政府推奨暗号リスト
http://www.meti.go.jp/feedback/downloadfiles/i30220ej.pdf
に「128 ビットブロック暗号」とあるので128bitごとにブロック区切って、暗号化するのではないでしょうか?


ごめんなさい。混同していたのは私のほうでした。orz
らんぴーく
会議室デビュー日: 2005/04/07
投稿数: 9
投稿日時: 2007-12-12 13:23
引用:

blunderさんの書き込み (2007-12-12 12:16) より:
パディングしているせいのような気がします。
メッセージ長(オクテット単位)を||M||とすると、パディング長は
16 - (||M|| mod 16)
なので、||M||が16の倍数だと、16オクテットのパディングがつく
ように思われます。



なんと!
試しに
AES/CBC/NoPadding
で暗号化してみると、確かに、"abcdefghijklmnop".getByte()の暗号化が16Byte暗号化Byte列になりました。
きっちりブロック長なのに、無駄にPaddingしてるんですねぇ…。(それってパディングというのか?)

謎が解けすっきりです。

引用:

甕星さんの書き込み (2007-12-12 12:50) より:
ごめんなさい。混同していたのは私のほうでした。orz


ぶっちゃけ、私も理解できずに、左で見つけた資料を右に受け流しているだけなので何とも…。orz
なんというか、「暗号化」って言葉の段階で頭の中にイメージがわかず、バカの壁が出来てしまっているようでorz
blunder
ベテラン
会議室デビュー日: 2003/09/11
投稿数: 65
投稿日時: 2007-12-12 14:09
引用:

きっちりブロック長なのに、無駄にPaddingしてるんですねぇ…。(それってパディングというのか?)



無駄といえば無駄ですが、どうしてもパディング長を入れるフィールドが必要なので、
そうならざるをえない気がしますね。
パディング長が0バイトだと、パディング長を入れる場所がないので。
では。
1

スキルアップ/キャリアアップ(JOB@IT)