Entry

プログラミングメモ - ippsRijndael256EncryptCTR の使い方が謎

2010年07月12日

謎というか,あたしが暗号に暗いというだけの話なんだけれども,どうにもこうにもにっちもさっちも行かなくて煮詰まっています。

ippsRijndael256EncryptCTR というのは,Intel 謹製のライブラリ Intel Performance Primitive(IPP)に含まれる暗号化関数です。普通のパッケージには,輸出規制の関係で含まれていないんですけれど,ユーザ登録するとダウンロードできます。マルチスレッドと Intel アーキテクチャの拡張命令に対応しているから超速い。

最近は,Dual/Quad core なマシンは普及したものの,単一プロセスで複数のコアを使うソフトがいまだに出揃っていないところもあって,ひとつのアプリケーションをフルに動かしても CPU 使用率がちょっきり50%なんてことがざらにあったりします。手元には Quad core * 2(8 cores)な環境があるんだけれども,こいつもシングルスレッドで動かすと悲しいくらいに CPU を使ってくれません。12.5%って……みたいな。この点,IPP の暗号ライブラリは,基本的にすべてマルチスレッド化されているので,呼び出すだけでガンガン CPU リソースを使ってくれます。速い速い。

で,ippsRijndael256EncryptCTR なんですけれど,こいつは見てお分かりの通り,256 bit の鍵長で Rijndael(らいんだーる)暗号化を行ってくれる関数です。Rijndael というのは AES にも採用されたブロック暗号化アルゴリズム。CTR ってのは,CTR モード(カウンタモード)というやつで,ブロックごとに暗号化する際の手順のことです。ブロック暗号の場合,単純にブロックごとに暗号化すると暗号化されたブロックの組み合わせで中身が分かっちゃうことがあるんですね。こいつを紛らわすために,ブロックの組み合わせ方(と作り方)がいくつか提案されているんです。詳しくは,以下あたりを参照。

Javaで作って学ぶ暗号技術 - RSA,AES,SHAの基礎からSSLまで
神永 正博 山田 聖 渡邊 高志
森北出版
売り上げランキング: 191056
おすすめ度の平均: 5.0
5 作って納得したい人、あるいは、作らないと納得できない人は是非

IPP の暗号化関数はどうにも使い方が難しくて,暗号周りの知識がないと全く使いこなせなかったりします。暗号化ルーチンは IPP で提供しているものの,カウンタの作り方やブロックサイズ等々については既知という扱いだったりします。せめてサンプルがあればなんとかなるんだけれども,これもあまりない。画像処理や信号処理といった IPP 本体については,詳しい説明があるんですけどね。使うのに NIST の勧告を読まなきゃいけないのは,ちと苦痛です。

で,この週末,自前の暗号化ソフトが欲しくなったので,このライブラリを使ってシコシコ作ってたんですけれど,テスト中になぜか暗号化されないブロックが出るファイルを見つけてしまいました。つか,最後のブロックだけ暗号化されずに0がパディングされている。なぜだ。

最初の動作検証は PDF を暗号化したり復号化したりしてテストしていたんですけれど,PDF ってある程度不完全でも読めちゃったりするんですよね。SHA-1 ハッシュを念のために取ってみて,初めて気がついた。つか,初めからそれやれよ,ってなもんなんですが。

どうも,カウンタとバッファサイズ(複数のブロックをまとめて関数に渡す)あたりが悪さをしているようなんだけれども,原因がつかめません。変なカウンタ値が生成されるところは見たんだけれども,もしかして,カウンタのインクリメントもこっちで世話しないといけないんだろうか。もう泣きが入ってる。

この週末で作るつもりだったんだけどなあ……予定延期だ,こりゃ。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN