EA認証システム『EA Password Protector』ver.1.01
はじめに
この記事は500円に設定していますが、すべての内容は無料で「投げ銭」用です。気に入っていただけたら投げ銭していただければ幸いです。
これは何?
MetaTrader4(MT4)、MetaTrader5(MT5)向けのFX自動売買ロボット(エキスパートアドバイザー、EA)に、アカウント番号に紐づいた認証をかけるためのシステムです。
一般的に、口座番号縛りでEAを配布したい場合の方法として
口座番号を埋め込んでコンパイルする
Webサーバーと通信することで認証を行う
の2種の方法がありますが、このシステムは、この2つの「良いとこどり」をした新しいシステムとなります。
更新情報
2022.09.17
ver.1.01にバージョンアップしました。クラウドプロテクタを使用して再コンパイルしただけで内容は変わりませんので、ver.1.00をご利用の場合、ファイルを差し替えていただく必要はありません。
2022.09.17
万が一、私がサービスを提供できなくなった場合のバックアップ手段として、Webサイトを使わずにパスワード生成ができるMQL4/MQL5ライブラリの販売を開始しました。詳細は以下のリンク先をご覧ください。
https://note.com/myfxlogger/n/n249b070d7934
『EA Password Protector』の特徴
口座番号を埋め込んでコンパイルする必要がありません。EAリリース時に一度コンパイルするだけです。
利用者から口座番号を入手してから、個別の認証パスワードを発行できます。
Webサーバーと通信しませんので「Webサーバーが落ちていてEAが使えない」という事態は発生しません。
『EA Password Protector』の使い方
1.EA開発時
任意の「秘密コード」を決めて、所定のライブラリを読み込んでEAをコンパイルします。
2.EA配布時
利用者から口座番号を入手したら、『EA Password Protector』パスワード発行サイト上で、先に決めた「秘密コード」と、利用者から入手した「口座番号」、発行する認証パスワードの「認証期限日」の3点を入力して「認証パスワード」を生成します。
ここで生成された「認証パスワード」を利用者に伝達します。
3.利用者によるEA認証
利用者は、EAのパラメータとして、開発者から受け取った「認証パスワード」を入力することでEAを起動できます。このとき、Webサーバーとの通信は発生しませんので「Webリクエストの許可」などの設定は不要です。
『EA Password Protector』の仕組みとセキュリティ
仕組みは非常にシンプルで、本システムが提供する「ライブラリ」と「Webシステム」が、同じ「認証パスワード生成アルゴリズム」を持っているため、前述の仕組みを実現できています。
十分な強度(解読難易度)をもったアルゴリズムとしているつもりですが、万が一、アルゴリズムが解析されると、誰でもEAのパスワードを生成して使うことができてしまうというリスクはありますのでご承知おきください。
なお「Webシステム」上で入力された情報をサーバーで保持する必要はないため、入力情報のログは記録していません。
『EA Password Protector』の利用料金
当面は無償提供いたします。
方針として、基本機能で課金をする予定はありませんが、どうするかは未定です。
仮に将来、機能を有償とした場合でも、それまでに発行した認証パスワードが使用できなくなることはありませんのでご安心ください。
サービスサイト・ファイルダウンロード
パスワード発行サイト
MQL4版ライブラリダウンロード
MQL5版ライブラリダウンロード
開発者向け:ライブラリ解説
ファイル
MQL4とMQL5はほぼ共通ですので、MQL4で解説します。
ライブラリをダウンロードしていただくと、以下のファイルが格納されています。
「myfxlogger_password_sample.mq4」と「myfxlogger_password_sample.ex4」はサンプルコードです。それ以外は、コンパイルに必要なファイルです。
ひとまず、そのままMT4/MT5の MQL4/MQL5 フォルダにコピーしてください。
サンプルコード解説
「myfxlogger_password_sample.mq4」を開いて以下をご確認ください。コードを部分的に抜粋して解説します。
#include <myfxloggerEAPasswordProtector.mqh>
ライブラリを読み込んでいます。
string secret = "ABCDE"; //秘密コード
input string password; //パスワード
input int year; //起動期限:年
input int month; //起動期限:月
input int day; //起動期限:日
必要な変数を定義しています。
秘密コードはEAユーザーに知られてはなりません。
パスワードはユーザーに入力させる必要があります。
起動期限については、ユーザーに入力させる形でも、固定値として設定する形でも、運用次第でどちらでもOKです。このサンプルでは入力させています。
if(EAPPchecker(password, secret, year, month, day))
{
Alert("Your password verified.");
return(INIT_SUCCEEDED);
}
else
{
Alert("Your password failed or expired.");
return(INIT_FAILED);
}
EAPPcheckerという関数に「パスワード」「秘密コード」「期限年」「期限月」「期限日」を投げると、true/false で認証結果が返ってきますので、それをみてEAを起動するか否か切り分けています。
パスワード発行サイトで、認証させたいEAで設定した「秘密コード」と口座番号を使い、期限日を設定してパスワードを発行します。
発行されたパスワードを入力すると、EA起動時に認証チェックがかかります。
サンプルなので、成功しても失敗してもアラート表示していますが、実装時は、失敗時だけアラートを出すなど調整してください。
以下、細かい仕様補足です。
期限を設ける必要がなければ、year, month, day には「0」を入れてください。
パスワードが正しくても、サーバーの現在の日付を参照して、期限を過ぎていたらfalseが返ります。
おわりに
ひとまずMQL4ライブラリまでリリースしました!
(追記)MQL5ライブラリもリリースしました!
EA開発者のみなさま、お使いいただければ幸いです。
ご要望や「バグを見つけた!」などありましたら、Twitterでお声かけください。
最終更新:2022.06.04
投げ銭用として、有料記事500円にしておきます。
購入いただいてもこの先には何もありません。
ここから先は
¥ 500
この記事が気に入ったらサポートをしてみませんか?