プログラムのプロテクト

まいこです。
うちの制御システムは、再利用出来そうな部分は、関数だけをまとめた外部ファイルを作ってしまうことが多いです。
ただ、その関数群のソース自体を見られたくない場合は、ライブラリ(のようなもの)を作ってソースコードを隠蔽します。
ライブラリを使えばソースコードの隠蔽は出来ますが、ライブラリ自体をシェアウェアのようにするのはちょっと壁があります。
一般のPCのシェアウェアにも言えることですが、当然認証の精度が問題になってきます。
一番単純な、パスワードでの認証の場合、パスワードさえ分かればいくらでもコピーして使えます。
コピーしても使えないようにするにはどうしたら良いのかしら?


うちの制御システムのメイン端末はユニークなシリアルナンバーを持っています。
そのデータから認証用のコードを生成すれば、別のマシンでは使えなく出来ます。
いちいち入力するのは面倒なので、利用者からシリアルナンバーの報告をしてもらい、生成したコードファイルを渡してセットで使ってもらうことにします。


で、認証コードの生成方法はどうしよう?


うーん。
シリアルナンバーはプログラムで抽出すると文字列扱いになるので、各バイトと固定の数値で排他的論理和をすればいいか。
元に戻すのも簡単だし。
(と言うか、暗号化といえばそれくらいしか思いつかなかったし)
一応、CPUスペックもそんなに良くないから、処理コストの削減という逃げ道もあるにはあるんだけど……。


実験。


シリアルナンバーを固定数値でXORした後に、そのデータをファイルに出力。
認証時にはファイルよりXOR後のデータを取り出し、再度XORしたデータとシリアルナンバーを比較する。


問題なし。
いや、問題は無い訳じゃないんだけど。
認証コードを生成するに辺り、元のデータ、つまり特定が可能かつユニークなデータと言えばシリアルナンバーくらいしか無いので、復号化されたデータがすでに公開されているということ。
要は暗号化の精度にかかってくるって事なんですが……あんまり高度な暗号化は実装出来ない(私の知識的にも、ハードスペック的にも)しなあ。
さて、どうしよう。
と言うところで、今日はこの辺で。