2006年7月24日の日記の1番目の記事へのコメント
■x-mixi-encrypted
コメント欄にも書きましたが,ついに,ようやくx-mixi-encrypted攻略完了です.整理するために自分用にライブラリにしてみようとCで書きはじめたんですが・・・ああ,もう,何て爽快な(笑).エンカウント率50% のダンジョンを抜けて飛空艇に乗(ry
中の仕組みは・・・超大雑把に書くと,中のユーザ鍵と初期ベクトルで,中のデータから鍵束を作り,セッションIDのハッシュから鍵を選んで,色々くっつけて,ハッシュで選んだ鍵と乱数で暗号化してさらに色々くっつけて,ってな感じです.これで復号できるわけですから,最後に何を色々くっつけるかは(略).正直,一番最初に手をつけたのが鍵束を開くための鍵だったのはラッキーでした.それ以外にも運に助けられまくりでしたが.AESの実装はGPL違反なんじゃないかとしつこく言ってみるテストw
で,こんな偉そうに書いてみましたが,早速ライブラリを使ってデータを作成し,手ポストしてみたんですが,見事にはねられてしまいました(´・ω・`)にょろーん. 一ヶ所バグがあったんで直したんですが,それでもまだはねられます.mixi-stationが送ったパケットをetherealでキャプチャ → 自前のライブラリで復号化 → 暗号化に必要な情報の抽出 → 暗号化してキャプチャしたデータと比較 ・・・というテストをやると確かに一致しませんなぁ.散々悩んだ挙句,サンプルを変えてみたらあっさり手ポスト成功∩( ・ω・)∩ワーイ.・・・タイトルに「〜」が入ってたからか・・・orz.一部でお馴染みの,UTF-8の「〜」問題っぽいです.ということは,最初のバグとった時点で手ポスト可能だったんだなぁ.
さて,今後ですけど,まずは自分で使ってるもんに組み込んでみて,しばらく内輪で様子見かなぁ.mixiの方にLinuxプラグインが欲しいという要望も出ましたし,今後の展開に注目です.もっと詳しく知りたい人は・・・
ちなみに,ライブラリ化の際に OpenSSLの AES_cbc_encrypt を使おうとしたんですが,何故か全然値が合いませんでした.鍵もデータもあってるはずなのにぃ・・・.謎です.SHA1は簡単だから自分でサクッと書けますが,AESはなかなかめんどくさそう・・・.AESと知らずに半分ほど書いたけど(^^;.
[コメントを書く]
2006年7月24日の日記の1番目の記事へのコメント
しかし、しばらく飛空挺を楽しんでいるうちに、ボスみたいなのが出てきて強制イベント突入…とかシナリオを想像してしまうのですが。
これベースだと別にGPL違反でも何でもないような
じっくり読んでないんですがNetBSDの実装はテーブルがものすごいですね.
http://search.cpan.org/src/DIDO/Crypt-Rijndael-0.05/_rijndael.c
http://search.cpan.org/src/DIDO/Crypt-Rijndael-0.05/rijndael.h
に似てるなーと思った理由は,
- 内部で鍵を上記ヘッダのRIJNDAEL_contextと同じデータ構造でやりとりしていた
- 6種類のモードにswitchで分岐するような構造になっていて,モードの番号が CBC は 2になっていた
- サブルーチンコールとCの関数が綺麗に対応しているように見えた
などなどです.
まあ,本腰入れてあちこちの実装を探したわけでもなく,Crypt-Rijndael 自体が何かを参考にして書かれている可能性も大いにあると思うんで,あくまで「テスト」です・・・