開発時期:2022年
開発者:AmpiTa Project
開発言語:C#言語(Visual Studio 2022)
背景・概要
AmpiTaの試用版は概ね2カ月を期限に無償提供しています。
従来、使用期限をプログラム内に書き込むハードコードによる処理を実施してきました。
この方法の利点は、起動すればすぐに使えて、期限後は廃棄する以外に使い道がなくなることです。
他方、デメリットとして毎月あたらしいAmpiTa.exeを制作して発行しなければならず、その都度、バージョン番号を付けたり圧縮ファイルを作ったり、面倒でした。
公開して下さっているVectorさんも、この生産性のない作業は面白くないと思います。
そこで、ライセンスキー方式への変更を検討しました。
そらが、今回の開発の経緯です。
アルゴリズムを考案
まずはライセンスキーのアルゴリズムを検討しました。
JANコードなら、最初の2桁が国番号、次に5桁で企業番号、その後ろの5桁が商品識別番号、最後の1桁がチェックディジットというルールで作られています。
最初の2桁だけで『45』や『49』なら日本のモノだと認識できます。EAN(European Article Number)コードで『40』ならドイツ、『50』ならイギリスです。JANもEANも統一規格なので言語が異なってもバーコードは共通認識できます。
Microsoft製品を買うと25桁のライセンスキーが付いてくることがあります。
これにも何らかのアルゴリズムがあると思います。特に、20年前はネット接続は当たり前ではなかったのですが、その頃から25桁のライセンスキーでインストールしていたので、何か特別な意味があると思います。
色々と考えながら、見破られないようにアルゴリズムを考えてみました。
昔、バイト先に居た広島大学の大学院生は数学が専門、今は東北大学で教員をしているようですが、彼が考えるとアルゴリズムは複雑にできると思います。
よくわかりせんが、1桁目と2桁目を掛けて、その積の1の位と10の位を何かして数字を導き出し、さらに何かして5桁の数字やアルファベットにする、みたいないことができると思います。
私たちには、そうした技術がないので、そこまで難しいアルゴリズムは作れませんでした。
どんなアルゴリズムになったのか、それは書けません。
AmpiTaへ実装
実際に、アルゴリズムを当てはめてライセンスキーとして機能するか確認しました。
とりあえず、いまは想定できる範囲内で実験しているので、想定外のことは起きていません。
AmpiTa上で復号化
できあがったアルゴリズムを、そのまま公開してしまうと簡単にリバースエンジニアリングできてしまうと思いますので、文字列を暗号化しました。
暗号化するということは、AmpiTaで復号しないと文字として読めないので、復号化するプログラムを組みました。
これにより、インプットされたライセンスキーはAmpiTa内で暗号⇒復号し、その復号化されたテキストデータを特定のアルゴリズムで解体してライセンスキーとしての適否を判断します。
外部で暗号化(本ソフトの機能)
AmpiTaには復号化する処理は入っていますが、暗号キーを発行する機能は付けませんでした。何かの間違いで人手に渡ってしまうと、誰もがライセンスキーを発行できてしまうためです。
そこで、今回のソフトウェア開発に至るわけです。こうした作業を進めた上で、必要だから作ったユーティリティソフトウェアです。
アルゴリズムに則ったテキストデータを入力し、それを暗号化するという処理を実行します。
ライセンスキーの発行直後、すぐに復号して元のデータと一致するか確認できます。
もしかすると使用してはならない記号などがあるかもしれないので、毎回チェックするようにしています。
発行管理
いつ、何と言うライセンスキーを発行したか記録を残します。
仮に、ネット上でライセンスキーをシェアされてしまったとしても、いつ発行したモノがシェアされているかがわかります。
もし、発行していないキーが共有された場合は、もういくつでも発行できる人が現れたということになるので、アルゴリズムと暗号を変えるしかありません。
また、発行した覚えがないが記録が残っているということがあれば、誰かに発行ソフトを触られていることになるので、そのあたりの記録の確認もできるようにしています。
どのようにログを残しているかは、書けません。
ログイン管理
この発行ソフトを起動するにあたり、ログインキーを入力しなければならないように変更しました。
桁数は無制限なので、もっとセキュリティ性を高めるのであれば100桁くらいのキーにして、どこかからコピペしないとならないようにしても良いかもしれません。
ロゴマーク
このシンプルさ、いかに熱の入っていないロゴマークなのかよくわかると思います。
ライセンスだから『ら』です。
滅多に使わないアプリなので、忘れてしまいそうなので、わかりやすくしました。
AmpiTaのアイコンがオレンジ色なので、相対するような色を選ぼうと思ってこのブルーになっています。
おわりに
今回は、おそらく筆者以外には触らせることがないであろうソフトウェアについて紹介しました。
経験として、ライセンスキー発行を考えて置くことは良い事かなと思います。
今後、難しい計算式などを思いついたら、アルゴリズムに取り入れて行こうと思います。