例えばFLASH上で生成したデータを、Webサーバに送信して保存したとします。
この時パケットを解析されたり、SWFファイルを逆アセンブラ(*1)されると、ユーザーが勝手に生成したデータをサーバに送りつけることが可能だと思います。
このような場合に、以正規のFLASHが生成したデータかどうかを、サーバサイドで判定する(PHP、Perlなど)ことは可能でしょうか?また可能な場合考えられる手法を教えてください。よろしくお願いします。
*1 ... ActionScriptへ戻すことだとお考えください。FLASHの場合なんて言うのでしょう(^^;
厳密には無理、というあたりかなぁ。
アイデアとしては、
というのを思いついたのですが、パケットキャプチャに対しては耐性はあるけど、swf から逆アセンブルするようなことをされると、「組み込まれたパスワード」と暗号化の鍵を作るアルゴリズムが分かってしまい、偽装可能になります。
実は、DRM の類も似たような仕組みで、ソフトウェアの中に「組み込まれたパスワード」があって、それと鍵の生成方法や暗号化方式が分かると、DRM を回避できることになります(そんなに単純ではないけど)。ただ、一般的なアプリケーションで、それを逆アセンブルして解析するのは容易ではないのですが、swf だと、ActionScript の抽出ツールとか、簡単に入手できるので、難易度は一般的な DRM に比べるとはるかに低くなってしまいます。
ポイントは、どうやって「組み込まれたパスワード」を隠して、どうやって鍵の作成過程を隠すか、になってしまいますが...。
ありがとうございます。
私もワンタイムパスワード的な秘密鍵を利用する方法は検討する中で思いついたのですが、JULYさんのおっしゃる通りソースを見られると知識のある人には分かっちゃうんですよね。
やはり定石的な方法はないんですね(^^;
プログラムで「ホトンド」防いで、「一部」は運用でカバーしていくという感じでしょうか。
分かりやすい回答ありがとうございました。
DRMのロジックも色々調べてみたいと思います。
SSLの中で
PHPで鍵生成>Flashで鍵読み込み>データと鍵を一緒に送信>鍵判定して正しければデータ保存
すれば求めるアルゴリズムができると思われます。
また、AS3からByteArrayが使えるので暗号化swfが使えるなどの記事を見かけたことがあります。
これならデコンパイルされる心配もないのではないでしょうか??
どのように実装するか私もよくわかりませんが、技術的にはできそうな感じです。
具体的な内容も書いていただけると助かります。
「100%はムリだが、9割可能」
「ある程度は可能だが、厳密に防ぐのはムリ」
「こういったライブラリがあるが、完全ではない」
「○○で議論されているが、決定打となる解決策は得られていない」
「××で研究されており、最近発表された技術があるが枯れていないため信頼性の評価が難しい」
などなど。