配布ゲームのデータ流用防止策を考えてみる

ゲームを配布するとき、画像や音楽、音声データと共に
配布する形になると思います。
そのため、これらのコンテンツデータを単体のファイルとして格納すると、
プレイヤーから閲覧したり改ざんしたりされるリスクを伴います。

今回はこれらの防止策についていくつか考えてみました。

1.コンテンツデータをリソースに埋め込む
データをゲームの実行ファイルに埋め込む方法です。
一見するとコンテンツデータがどこにあるか分からないため、
プレイヤーから手軽に閲覧されることを防止できます。
ただし、リソース編集ソフトを使えばコンテンツデータを
簡単に閲覧できてしまうため、完全な防止はできません。

2.コンテンツデータを共通鍵で暗号化する
データを共通鍵で暗号化する方法です。
暗号化されたデータはゲームプログラムにて保持している
共通鍵で復号化してから使用します。

復号化する処理コストが加わってしまいますが、
共通鍵の場合は高速に復号化できるため、
昨今のPCスペックなら問題ないと思います。

また、暗号化することでプレイヤーは容易に
コンテンツデータの改ざんができなくなります。
しかし、プログラムから共通鍵を抜き出されると
閲覧や改ざんができてしまいます。
そのため、多少のリスクを伴いますが、
最終的にプレイヤーにコンテンツデータを提示することになるので、
そこまで神経質になる必要もないかと思います。

むしろ、勝手にスクリーンショットを取られたり、
サウンドを録音されるリスクのほうが大きいように思えます。

3.コンテンツデータを公開鍵方式で暗号化する
公開鍵・秘密鍵のペアを作り、秘密鍵でコンテンツデータを暗号化する方法です。
暗号化されたデータはゲームプログラムで保持している公開鍵で復号化します。
いわゆるデジタル署名といわれる方法です。

もっとも安全な方法ですが、共通鍵方式よりも復号化の処理コストがかかります。
公開鍵を抜き取られると、データの閲覧は行われてしまいますが、
改ざんは秘密鍵が必要なのでできません。
秘密鍵は開発者のみが保持しており、
ネット上には一切公開されないものなので、
改ざんを確実に防止することができます。

もちろん、公開鍵を抜き取られないようにすることで、
データの閲覧も防止できます。

列挙した方法は単体では効果が薄いので、
例えば2.で暗号化したデータを1.でリソースに埋め込むなど
複数の方法を組み合わせるのが良いと思います。

以上、ぱっと思い浮かんだ方法です。
データの流用防止策についてのメモ書きでした。