更新情報
2016/09/23 1.0.1を公開

.NETアプリケーションから利用できる暗号化ライブラリを作ってみました。
このライブラリの特徴は、暗号化に使う共通鍵に、ライブラリを呼び出したアセンブリの公開鍵を使うという点です。

アセンブリには電子署名を行うことで「厳密名」を持たせることができます。
その厳密名に含まれる公開鍵を使うことで、データを暗号化してもそれを復号できるのは同じアセンブリのみとなります。

厳密名を付けるには、署名に使う公開鍵と秘密鍵のペアが必要です。
そのうち、秘密鍵は開発者が厳重に管理しているはずですので、秘密鍵は開発者しか分かりません。
アセンブリを読み込む際、そのアセンブリが署名されている場合は付属している公開鍵を使って改ざんの有無を確認し、問題なければアセンブリが読み込まれます。
つまり、データを暗号化したアセンブリを改ざんして暗号化データを抽出しようとしても、秘密鍵を知らないため署名が出来ないので抽出は不可能ということになります。

説明が長くなりましたが、つまり、このライブラリは呼び出し元アセンブリが署名されていることを前提に、アセンブリを認証して暗号化機能を提供します。

ちなみに、同一の秘密鍵を使って署名されたアセンブリであれば、それが全く別のアセンブリでも相互に暗号化・復号ができるので注意してください。
具体的に説明すると、A、B、Cというアセンブリ(exeまたはdll)を用意します。
AとBは同一の開発者によって作られ、同一の秘密鍵で署名されています。
Cは別の開発者のため、使う秘密鍵は別です。
Aがデータを暗号化し、暗号文αが作成されたとします。
この場合、もちろんAはαを復号できますが、Bもαを復号できます。
しかし、Cはαを復号することはできません。
これは、AとBの秘密鍵は同一ですが、Cは違うためです。

本ライブラリは「BlackBox Encryptor」と言います。
一応、Team.E.L.E.M.E.N.Tによる開発としています。
この機能は、TeamElem.Security.BlackBoxEncryptorクラスからメソッドを呼び出して暗号化ストリームを作成することで利用できます。
この時、ここのメソッドを呼び出したメソッドが格納されているアセンブリを認証して鍵としますので、別のライブラリからこのメソッドを呼び出すことはしないでください。
また、繰り返しになりますが、呼び出し元アセンブリに厳密名がない(署名されていない)と利用できない点も注意してください。

使い方は同梱のXmlに記載されているのでそちらを利用してください。
本ライブラリはフリーソフトとし、利用に制限はありません。(商用・営利目的での利用も可能です)
また、利用に対する対価を頂くこともありません。
ただし、本ライブラリを利用した・利用できなかった損害などについては責任を負いません。
自己責任でのご利用をお願いします。

本ライブラリは難読化を行っています。
解析には労力と時間を要するようになっていますが、解析不可能ではありませんので、暗号化の過信はしないでください。
将来的に本ライブラリは危殆化する可能性があることを理解した上で利用してください。
つまり、厳重な暗号化を必要とする用途には使えません。

本ライブラリの再配布は可能ですが、その際DLLは改変しないで配布してください。
また、ライブラリの最新版が出た場合は、速やかに最新版と置き換えるか配布を停止してください。

以上、同意できる方は、以下からダウンロードしてください。

BlackBox Encryptor Ver.1.0.1.1

前回からの変更点
1.0.1.1

  • ストリーム作成時にSecurityExceptionが発生するバグを修正

1.0.1.0

  • 機密フィールドへのリフレクションをより困難にしました。