2020年2月22日土曜日

RPGツクールMV本体が提供する暗号化機能の基本的な仕様と注意点について

 RPGツクールMVには、画像と音声素材の暗号化機能が付いています。本稿ではこの機能の特徴や使う際の注意点などを簡潔にまとめています。

デプロイメント画面

 なお、本稿ではあくまで本体が提供する暗号化機能の解説にとどめ、他の代替案などについては解説しません。

暗号化機能の仕様

対象ファイルはpng、ogg、m4aのみ

 暗号化されるファイルの書式は画像ファイルではpng、音声ファイルではogg、m4aのみです。bmpやgifなど、png以外の画像形式は暗号化の対象になりません。

 また、webmなどの動画形式のファイルやフォントファイル、jsonなどのデータファイルやjsファイルも対象外です。

 ただし、画像ファイルについては拡張子をpngに偽装することで暗号化の対象になります。

暗号化されるのはデプロイメントのタイミング

 暗号化が実行されるのはデプロイメント実行時です。つまり、テストプレーでは正常に復号できるか確認できません。詳細は後述しますが、特にプラグインを使っている場合、復号ができないケースがあります。

暗号化の実装をプラグイン等では改変できない

 暗号化機能はRPGツクールMV本体が実行しているので、プラグインで仕様を改変するのは不可能です。別途暗号化を実装するプラグインなら作れますが、それはまた別の話……

RPGアツマールには対応していない

 これはRPGアツマール側の仕様になりますが、暗号化されたファイル形式はRPGアツマール側で弾かれてしまいます。RPGツクールMV本体の「ゲームをシェア」機能でも暗号化のチェックボックスは非活性になっています。

ゲームをシェア

やろうと思えばゲームを介さずに復号可能

 詳細な方法は省略しますが、復号の際に必要になるキー情報は容易に入手できるのでその気になれば誰でも復号できます。

 ただし、プロジェクトを開かれたり、ファイルをエクスプローラやFinderで簡単に閲覧、再生されることを防ぐための機能と考えれば十分に有用です。

暗号化機能を利用する際の注意点と対策

暗号化機能が本当に制作するゲームにとって必要かどうか事前に考える

 前述のとおり、暗号化機能は対象ファイルや有用なケースが限定されています。上記仕様を理解したうえで本当に暗号化するかどうか検討することをオススメします。

使用するプラグインが暗号化機能に対応しているかどうか確認する

 プラグインのなかには、暗号化機能に対応していないものもあります。具体的には、コアスクリプトが提供する関数以外の方法でpngファイルやoggファイルを使用し、かつ暗号化を考慮していないプラグインです。

 そういったプラグインを使用した場合、テストプレーでは正常に動作しても、デプロイメント後だと正常に動作しません。暗号化機能には対象外ファイルを選択する機能はないので、デプロイメント後に当該プラグインが使っているファイルのみ非暗号化ファイルに手動で差し替える等の対策が必要です。

早い段階でデプロイメントして動作確認する

 とはいえ、実際使っているプラグインが暗号化機能に対応しているかどうかは分からないと思います。よって、早い段階でデプロイメントしてみて正常に動くかどうか試してみることが重要です。

 もし動かないプラグインがあった場合、作者に連絡しても対策してもらえる見込みはあまり大きくないと考えた方がいいと思います。なぜなら暗号化機能の対応はわりと改修規模が大きく、技術的にも複雑な場合が多いからです。

プラグイン作者視点での暗号化機能に対する向き合い方

暗号化機能の存在を忘れないようにする

 この機能は影が薄いのでついつい存在を忘れがちです。忘れないようにしましょう。

対応できない場合はヘルプに明記する

 自身のプラグインが暗号化機能に対応しているかどうか、作者ならすぐに分かると思います。暗号化機能を考慮するのがベストですが、難しい場合は制約事項としてヘルプに明記しておくのがいいと思います。

 対応する場合、rpg_core.jsのDecrypterというクラスに復号処理が記述されているのでこれをうまく活用します。

 余談ですが、以前にapngピクチャ再生プラグインを作ったときは独自に復号処理を呼び出すことでpngファイルのみなんとか対応しましたが、gifアニメはもともと暗号化の対象外なのでその旨をヘルプに記載して対応しました。