Google I/OでリリースされたChrome版Angry Birdに関して全ステージをアンロックするハックが公開された。
これに関して以下のようにコメントを書いたのだが、もう少しちゃんと考えてみる。
技術的な回避方法はあるけどそれをやらなかったということは、そういう遊び方されても良いという位置づけなのでは。 / 秋元@サイボウズラボ・プログラマー・ブログ : 出たばかりのChrome版Angry Birdsがさっそくハックされ、全レ… http://htn.to/QteNVA
まぁ、この話し自体は笑い話になっているが、Chrome版でオフラインで遊べるまともなゲームをつくることを考えるとこの問題は結構根深い。まず、一番に思いつくのはサーバーサイドで連携してこれらのデータをローカルには保存できなくする作戦。恐らくこれが一番真っ当な方法なのだが、そんなことをするとこれらのゲームは全てオンラインでしか遊べなくなる。それはChrome OSのコンセプト的にはOKかもしれないが、ちょっと寂しい。あと、サーバに置いたからといって安全というわけではない。実行環境がJavaScriptなので、どこにでもブレイクポイントをブラウザから貼れるし、変数も書き換えられる。と、考えるとサーバとクライアント部分で改ざん検知処理を実装し、改ざんされた可能性がある場合はセーブを受け付けないというような処理を実装することになる。ここまでやっても、実行環境がいつでもデバッグ可能という状況である以上、サーバ側の機構を見破られて改ざんされる可能性も残るが、まぁ、そこまでやるコストが現実的に見合わないところまでは対策を洗練させることはできると思う。
では、本題のオフラインでどうするかを考えてみる。最もオーソドックな方法は、デバッグ実行を許さない署名暗号化したスクリプト/バイナリの実行をGoogleが許すこと。そして、その署名暗号化したバイナリ/バイナリの中にセーブするデータを暗号化するキーを入れる。セーブデータの読み込み、書き込みは全てこの署名暗号化されたゾーンでしか実行できないことにする。これでも、安全とはまだ言えないが、余程のことがない限り大丈夫なのではないかと思う。問題はGoogleがそんな署名暗号化したスクリプト/バイナリの実行環境を行うような危険なコードをChromeに入れる気があるか?ということ。まぁ、たぶんHTML5への準拠などを考えるとないと思う。
となると、結構これは根深い問題で根本的な解決にはなんらかのトレードオフが必要なのだろうと思いますが、どうなるのでしょうか。