渡り鳥の楽園 2019/12/06 19:37

【プラグイン配布】RSA暗号プラグイン【RPGツクールMV】


レティシア物語改良体験版ver1.03.zip (823.97MB)

ダウンロード
製品版のイラスト一部公開中!
レティシア物語の製品版はこちらから!

RSA暗号プラグイン


Ci-enにてRPGツクールMVプラグイン配布の第四弾!
同人ゲームを制作する上であったら便利だなと思って作成したプラグインを配布します!
第四弾の今回は、ツクールMV上でRSA暗号を使用可能にするプラグインです!!!
「本プラグインは、ツクールMV上でRSA暗号を提供するプラグインとなります。本プラグイン導入によりRSA暗号を使用した暗号化と復号化を行えるようになります」
【ver1.03】RSA暗号プラグイン

Wataridori_RSA_cryptico.js (92.41kB)

ダウンロード

2020_1_12 ver1.03 リリース
デプロイした際に正常に機能しなかった不具合の修正
2019_12_12 ver1.02 リリース
ver1.02 プラグインパラメーターの設定が正常に機能しなかった不具合の修正
2019_12_08 ver1.01リリース
ver1.01 DataManager.doDecryption関数にて引数に指定した秘密鍵の確認を厳格化
DataManager.doDecryption関数にてEncryptTextを指定できなかったバグを修正
ライセンス表記をCi-enと同一化

利用規約


本プラグインの部分に関しては無断で改変、再配布が可能で商用、18禁利用等を問わずにご利用が可能です。cryptico.jsの部分に関してはプラグイン上のライセンス表記をご覧ください。改良して頂いた場合、報告して頂けると喜びます。クレジットして頂ければ泣いて喜びます。

本プラグインの使用によって生じたいかなる損失・損害、トラブルについても一切責任を負いかねますことをご了承ください。

The part I made will be provided under the MIT license. See the license description on the plug-in for the cryptico.js part.
MIT License

RSA暗号について


RSA暗号は暗号文の生成に公開鍵、解読に秘密鍵と別々の鍵を使用する公開鍵暗号方式の暗号です。
RSA暗号は「巨大な数の素因数分解にはとてつもない時間がかかること」を絶対の防御力とした暗号です。
数学的な原理や証明についてはここでは省かせて頂きます。

RSA暗号の使用方法

送信者は、受信者が公開している公開鍵を入手し平文(情報)を暗号化し、暗号文を受信者へ送信します。
受信者は、送られてきた暗号文を自身しか知らない秘密鍵を用いて解読します。
傍受者は、傍受した暗号文を解読するために2つの方法しかありません。秘密鍵を入手するか、公開鍵を解読(巨大な数の素因数分解)して秘密鍵を生成するか(間違っていたらごめんなさい)です。

現実的な時間では巨大な数の素因数分解が不可能なため、傍受者は暗号文を解読できないというわけです。

cryptico.js

オリジナル版とNPM版の二種類が存在します。NPM版ではJSON形式で秘密鍵が保存できるため、本プラグインではこちらを使用しました。
オリジナル版(cryptico.js)
NPM版(cryptico.js)

本プラグインを使用した際の例

受信者
受信者はなんとしても胸を大きくする情報を秘密裏に知りたい。
RSA暗号で情報を送ってもらうため、まずは公開鍵秘密鍵を生成し、公開鍵のみを公開します。

DataManager.makeRSAKeyAndPublicKey()

上記関数を実行すると、dataフォルダに公開鍵(PublicKey.txt)と秘密鍵(RSAKey.json)が生成されます。公開鍵(PublicKey.txt)を公開します。

送信者
送信者は「胸を大きくするには豆乳を飲むと良い」という情報を秘密裏に送信したい。
公開鍵を入手し、送りたい情報を暗号化します。従って、受信者から公開鍵(PublicKey.txt)を受け取りdataフォルダに格納します。

var PlainText = '胸を大きくするには豆乳を飲むと良い'
DataManager.doEncryption(PlainText)

上記関数を実行するとdataフォルダに暗号文(EncryptText.txt)が生成されます。これを受信者へ渡します。

傍受者
傍受者は何としても胸を大きくする極秘の情報を知りたい。
送信者から受信者へ送られた暗号文(EncryptText.txt)を傍受しても、秘密鍵を知らないため解読することができません。

受信者
受信者は自身しか知らない最初に生成した秘密鍵を用いて暗号文を解読できます。まずは受け取った暗号文(EncryptText.txt)をdataフォルダに格納します。

DataManager.doDecryption()

秘密鍵(RSAKey.json)がdataフォルダにあることを確認して上記関数を実行すると、dataフォルダにある暗号文(EncryptText.txt)が解読されます。コンソール(F8)を呼び出してみてください。
無事、受信者は暗号文を解読に成功。傍受者を差し置いて豆乳をがぶ飲みすることができます。

プラグインの説明


本プラグインはcryptico.jsを使用して作成しました。本プラグインはMITライセンス下で提供されていますが、cryptico.jsの部分に関しましてはプラグイン上のライセンス表記をご覧ください。
cryptico.js

関数の説明

DataManager.makeRSAKeyAndPublicKey(PassPhrase, Bits)
公開鍵と秘密鍵を生成してJSON形式で保存します。
引数にPassPhrase, Bitsを指定していない場合はプラグインパラメータを使用します。
PassPhraseは秘密鍵を生成するための任意の文字列(英数字)です。
Bitsは秘密鍵を生成するためのビット数(数字)です。特別な理由がない限り512を推奨します。
1024, 2048と指定することも可能ですが、暗号強度が増加するかわりに非常に時間がかかります。

DataManager.generateRSAKey(PassPhrase, Bits)
秘密鍵を生成して返します。生成に失敗した場合、nullを返します。

DataManager.generatePublicKey(PassPhrase, Bits)
公開鍵を生成して返します。生成に失敗した場合、nullを返します。

DataManager.doEncryption(PlainText, PublicKey)
暗号化を実施します。暗号化したい平文(PlainText)を必ず引数に指定してください。
公開鍵(PublicKey)を引数に指定されていない場合は、dataフォルダにある公開鍵を読み込みます。

DataManager.doDecryption(EncryptText, rsaKey, fnc)
復号化を実施します。復号したい暗号文(EncryptText)を引数に指定されていない場合は、dataフォルダにある暗号文を読み込みます。
秘密鍵(rsaKey)が指定されていない場合は、dataフォルダにある秘密鍵を読み込みます。
復号化に成功した場合、fncで指定された関数を復号文を引数に実行します。
復号化に失敗した場合、もしくは関数を引数に設定していない場合は実行されません。
暗号文(EncryptText)および秘密鍵(rsaKey)をdataフォルダから読み込む場合は、nullを指定してください。


使い所が全くと言っていいほどないと思いますが、楽しいのでこの機会に是非RSA暗号を使用してみてください。公開した全てのプラグインは後ほどGitHubにて公開予定です。
第五弾はオートセーブを提供するプラグインを配布予定です!


Copyright(c) 渡り鳥の楽園

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索