最近、GitHubにツールを公開しました。
まぁ、自分の勉強(プログラムとか暗号化の基礎知識とか)と言えばそうなのですが、Qiitaとかでは記事にして出すと色んな方からの指摘がもらえたりするので、刺激になります。
と言っても、それほど大それたツールではありません。むしろ、プログラムとしては非常に単純だと思います。どちらも.NETのラッパーのようなものなので。
ちなみに、私のQiitaはこちら。
とりあえず、今、GitHubに出しているのは以下の2つです。
encryptor
ファイルをAES (Advanced Encrypt Standard)で暗号化するツールです。
encryptor (GitHub)
それほど凝ったものではないので、1つのファイルを暗号化し、同時に秘密鍵も別ファイルとして出力するものです。
ちなみに、AESはアメリカ合衆国のNISTが公募したもので、Rijndael(ラインダールと読む)が採用されています。AESとRijndaelは全く一緒というわけではないようで、Rijndaelは鍵長とブロック長が32bitの倍数で256bitまでを自由に指定ができますが、AESについては鍵長が128、192、256bitの固定で、ブロック長が128bitの固定です。鍵長は大きいほど解読が困難になりますが、計算もその分だけ増えるため処理の負荷も高まります。
ちなみに、上のプログラムでは256bitとしています。
まぁでも、外部に情報が漏れないようにやりとりする際は、クラウドドライブ経由が普通だとは思いますが。
GetHash
もう一つは、ハッシュ値を計算して出力・検証するツールです。
GetHash (GitHub)
大抵の人はあまりやらないみたいなのですが、ダウンロードしたインストールスクリプトファイルや実行ファイルが壊れていたり、改ざんされていたりするのを検出するのに使用できます。よく、ダウンロードサイトにSHA256などと書いている場合があると思いますが、あれのことです。
上のツールは、MD5、SHA1、SHA256、SHA384、SHA516に対応しています。
ちなみに、パスワードをDBで保存する時にもハッシュ値が使われることがあり(パスワードをプレーンのまま保存させないようにするため)、SHA256以上が使用されることもあるかもしれませんが、PBKDF2やBCrypt、Argon2がより安全であると見なされているようです(この辺りはソフトバンククリエイティブ出版の徳丸先生の本をご覧下さい)。.NET でもPBKDF2は使用できますが、上のツールではDB内に格納するハッシュ値をわざわざ作りだす用途は想定しないので、それは作り込んでいません。まぁ、クラスも全然違うので実装の負荷が高いという理由もあるのですが。
ちなみに、改ざんの検知でよく聞くメッセージダイジェストもハッシュ値ですね。少しでも入力元となる情報が違えばハッシュ値は変わるので、短い文字列を使用して真正かどうかの検証ができるというものです。
あと、ファイルのドラッグアンドドロップ、起動引数でファイルパスを指定、画面上で簡単にハッシュ値を検証もできるようにつくっています。
Windowアプリケーションはコンソールに比べてコントロールのプロパティの設定や、内部構造が単純にはなりませんが、もし不備などがあれば、ご指摘を頂けると嬉しいです。
ちなみに、どちらもオープンソースのフリーソフトのつもりです。ライセンスあたりがまだよく理解できていないので、MITのつもりですが、おいおい変えていくかもしれません。
有料化はしません。
どうぞ、よろしくお願いします。