December 28, 2006

0.111u1出た

0.111u1のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release

Ville氏WIP更新

Ville氏のWIPがクリスマス更新。Taito 3Dハードがかなり進んできています。サイトによると、
Taito 3Dハードウェアの一番の特徴といえば、演算コプロセッサがカスタムチップの一つに統合されていることです。このコプロセッサは2つの役目があります。ひとつは、3D座標の2Dへの透視変換で、DSPの逆アセから簡単に割り出せます。もう一つは、かなりの難題だったのですが、ポリゴンとビューポートの交差座標の演算に使われていることがわかりました。

もう一つの演算ユニットが必要な理由が最初の頃はわからなかったのですが、演算処理を調べているうちに、どうやら何かの除算をしているのがわかってきました。さらにデータシートによればTMS320C51には除算ユニットが全く無いことも判明しました。

これらのTMS320C51のバグ修正により、3D描画はほぼ完全になっています。
Ville's Development Log
December 20, 2006

コラ氏のCPS2解説・その4

Nicola氏のCPS2解説つづきです:
この暗号解析は全く進展がありません。これまで説明してきたことは、もう1年以上前からわかっていることで、それ以来突破口が開けてないのです。もしかしたら、オープンにもっと多くの人が議論し合えば、貴重なフィードバックが得られるかもと思っています。

CPS2の暗号をハードウェア側以外からアタックしようとうする人はいないようです。個人的には、アルゴリズムの情報をさらに集めるにはハードから攻める以外にないと思っています。

ここまで説明してきた特徴は、キーの値がなんであっても常に成り立つものです。ですから、これがアルゴリズムそのものの特徴であり、ハードウェアに決めうちされたものと言えます。たとえば、カスタムCPUから抽出可能で、固定のsubstitution用のボックスがあるのはほぼ間違いありません。

CPUを解析してアルゴリズムを再構成すれば、キーの値にかかわらず既知の特性にマッチするかテストできます。これが一致しなければ、そのアルゴリズムは間違っています。一旦、適合するアルゴリズムが見つかってしまえば、キーの検索を始められるでしょう。
Nicola's MAME Ramblings

コラ氏のCPS2解説・その3

Nicola氏のCPS2解説、まだまだ続くよ:
Part1では暗号テキストのビット反転についてでしたが、ここではプレーンテキストでのビットについて見ていきます。

次の表は、パーセンテージではなく、ビットの変更回数の合計を16進数で示しています。

オレンジ色のはどのテーブルでも共通で変化しない値です。しかし、赤く示した値の方がおもしろい動きをします。これは、何種類かの値のうち一つになりますが、各列の2値の合計が常に一定の0x10000になります。
Nicola's MAME Ramblings
December 19, 2006

コラ氏のCPS2解析・その2

Nicola氏のCPS2解説、昨日の続きです:
相補的な特性が重要なのは、テーブルサイズが半分になるからというだけではありません。とはいうものの、この特徴を十分に活用しているわけではないのですが。

ここで、CPS2の暗号化についておさらいしておきましょう。

入力:
  • ROMに保存された16ビットの値
  • 16ビットのアドレス値 (1~17ビットの物理アドレス)
  • ゲーム毎に変わるサイズ不定のキー
出力:
  • 16ビットの復号化された値
ここでは、アドレスAにある値XをキーKとして、関数D(X,A,K)とします。相補的な特徴とは、どんなAについても必ず対応するA1が存在することです。つまり、

D(X,A,K) = D'(X',A1,K)

ということになります。

この発見が重要なのは、暗号化においてAがアルゴリズム的な影響を与えているからです。SegaのFD1094 CPUでは、各アドレスのキーは巨大なテーブルで保持されています。もしCPS2が同じ動作なら、相補的な特性は現われません。

これは特に驚くことではなく、Segaが巨大なキー+シンプルなアルゴリズムを好むのに対し、Capcomは小さなキー+複雑なアルゴリズムを好むことをKabuki CPUで見てきています。

残念ながら、AからA1を導く方法はまだわかっていません。ゲームによって変わるので、キーの関数であるのは間違いありません。

相補特性というのは、強力な暗号でも特別珍しいものではありません。ですから、アルゴリズムの欠点であるとは必ずしも言えません。たとえばDES暗号でも見られ、D(X,K) = D'(X',K') となります。

一般的に、相補特性はXOR演算が起きている兆候ともいわれます。相殺のために補数演算が起こるからです。例を見てみます。代理関数をfとして、次のようなアルゴリズムがある場合、

d = e XOR f(e XOR k)

補集合は

e' XOR f(e' XOR k') = e' XOR f(e XOR k) = (e XOR f(e XOR k))' = d'

とになります。もちろんこれはとてもシンプルな例ですが、この場合はx'が補集合でなくてもよいことに注意してください。たとえば、x' = x XOR 1と定義しても成立します。ですから、CPS2のアルゴリズムはこんなにシンプルでないのは確かです。

もっと現実的な例としてフェイステル構造(DES暗号はフェイステル構造を使っています)を挙げましょう。フェイステル構造を以下のように定義すると、

Li = R i-1
Ri = L i-1 XOR f(Ri-1 XOR Ki-1)

相補性がどのように出てくるかよく簡単にわかるはずです。

CPS2の暗号化がフェイステル構造を使っているという考えは確かに魅力的ではありますが、個人的には違うと思います。なぜならば、前回説明したデータの拡散がもっとよくなるはずだからです。
Nicola's MAME Ramblings
December 18, 2006

Ville氏WIP更新

Ville Linde氏の個人WIPが更新。Taito JCシステムの3Dシステムの解析状況が出ています。今のところ、ポリゴンフォーマットとテクスチャマッピングが解読されてきているそうで、サイドバイサイド2の道路部分などが表示されるようになったとのことです。 Ville's Development Log

コラ氏のCPS2解析

変換テーブルがCHDで丸ごと追加されるなど、最近少し動きが出ているCPS2についてNicola氏の続報:
1年前に変換テーブルの相補性を発見してからは、CPS2の暗号化について特にわかったことはないのですが、ここでわずかでもこれまでに判明していることについて解説したいと思います。

よくある勘違いが、解読テーブルは「ランダムデータ」であるというものです。ぱっと見ではそう感じるかもしれませんが、きちんと調べるとそうでないことがわかります。

暗号値と出力値比べたとき、もしランダムなテーブルだとすると出力値の各ビットが変更される確率は50%ですが、以下の表を見るとそうなっていません。ほとんどの値は50%くらいになっていてランダムなようですが、全然違う値もあります。

このように、暗号化アルゴリズムは拡散が不完全なのです。まだ解読はされてませんが、これが突破口になるかもしれません。

特に興味深い4つの値を赤色にしています。ゲーム毎にテーブルは変わるので値は変化しますが、この4つだけは常に同じ値なのです。これは変換アルゴリズムの明らかな特性といえます。で、これは役立つのでしょうか。もしもアルゴリズムがキーに依存したビット置換をしているならば、暗号値のビット3とビット9、また復号値のビット0と14には置換が影響しないといえます。しかしこれとは別に、ビットがいつ反転されるかが正確にわからなければ、この特性から得られることは多くありません。これを見つけ出すことがアルゴリズム解析の大きな進展になるかもしれません。
Nicola's MAME Ramblings
December 11, 2006

windowsJ.txt更新

本体付属の設定解説ファイル、windows.txtの日本語訳をv0.111版に更新しました。ダウンロードはこちら。前のv0.107からの追加オプションは-fontpathと-multithreading、削除されたのは-hiscore_directory、-artwork、-keyboard_leds、-led_modeです。

MAME 0.111出た

オフィシャルMAME v0.111がリリースされました。what's new-Jはこちら。u5からの変更はわずかです。 MAME.net MameDev.com
December 8, 2006

0.110u5出た

0.110u5のソース差分がリリースされました。what's new-Jはこちら。LD表示サポート向けの更新、サーカスチャーリー修正、マウスホイールサポート、その他いろいろ。 MameDev.com - Latest Release
December 1, 2006

0.110u4出た

0.110u4のソース差分がリリースされました。what's new-Jはこちら。引き続きCPS2のXOR関係の更新、またVista環境でのコンパイルなどなど。 MameDev.com - Latest Release
November 26, 2006

0.110u3出た

0.110u3のソース差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
November 17, 2006

0.110u2出た

0.110u2の差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
November 14, 2006

MAME OS X出た

intel Mac用のMAME OS Xがアナウンスされています。サイトによると
これまでIntel版のOS X用MAMEというのはありませんでした。MacMAMEプロジェクトはこの1年は休止状態で、しかもPowerPC専用です。SDLMAMEプロジェクトは動作しますが、あくまでクロスプラットフォームプロジェクトなので、やはりOS X専用にすればもっと良くなる部分があります。というわけで、OS X用MAMEを自分で移植してみようと決めたわけです。作業は2ヶ月ほどかかりましたがようやく準備ができたので、ここに公式にMAME OS Xプロジェクトを公開します。
まだ若干作業が必要なところがあるそうですが、エミュレーション自体は動作しているようです。サウンドはCore Audio、表示はCore Video、Core Image、OpenGLを使ってパフォーマンスが最適化されており、さらにおまけでCore Imageを使ったフィルタリングもできるとのこと。Intel Macな方はぜひ。 Dave Dribin's blog
November 11, 2006

0.110u1出た

0.110u1の差分がリリースされました。what's new-JはこちらMameDev.com - Latest Release
November 7, 2006

MAME 0.110出た

オフィシャルMAME v0.110がリリースされました。what's new-JはこちらMameDev.com - Latest Release
November 3, 2006

0.109u5出た

0.109u5の差分がリリースされました。what's new-Jはこちら。すっかり週刊。 MameDev.com - Latest Release