Camelliaを実装してみた

今度は国産ブロック暗号のアルゴリズムであるCamelliaを実装してみました。

実装元はRFC3713ですので、ほかのプログラムのソースコードは何一つ見ていません。

今回の実装で自分がびっくりしたのが

20kBのソースコードを書いてデバッグしてみるとバグが一つもなかった・・・

ということでした。

いつもなら例と異なる結果がどこかで出て、組み間違いを探すところなのですが、今回はそれが一つもなかったという現象が。

といっても、今回のコードは基本式はRFCからきれいにコードに変換しただけで、最適化も何にもやっていない(せいぜい、F関数のXOR処理を32bit単位でできるようにした程度)です。

どうせx86だけではなくx64でも使うコードなので、無理矢理x86に最適化する必要もないので、64bit変数を普通に使っています。あとはコンパイラの最適化次第でしょうか。

ちなみに注意点としては

  • RFC内の記述はすべてBigEndianとして扱われる(128bitだけではなく256bitも)ので一部に変換処理を入れる必要があり
  • 128bit変数の回転処理はごまかす(必要な部分だけの計算だけで終わらせる)かちゃんと組む(128bitを完全に回転させる)かを決めましょう
  • SBoxのXOR演算は32bit単位で処理できるのでそれを使って高速化するといい(よく式を見てみましょう)

ですか。

もちろん実装しても使い道なんてほとんどないですよ。まさかゲームのアーカイブの暗号にこんなものを使うわけにも行かないでしょうし。

一応使い道はいろいろと考えています。通信系の暗号処理で使う予定です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL