オープンソースでの暗号化について


オープンソースで公開予定のプログラムで  
AESなどの共通鍵暗号方式で 機密データを暗号化した場合  
ソースとともに key, IV を公開してしまっては  
暗号化の意味がありません。

簡単なPINコードを設けることも考えましたが、  
ワンクリックですぐにあるアプリケーションに引数を渡して起動するアプリケーションのため、  
PINを入力する画面すら設けたくありません。

何かいいアイデアはありませんか？

MITライセンスにする予定で、  
クライアントアプリです。

プログラムを知らない一般ユーザーの為に、  
ビルド済みのバイナリも配布します。

個人個人によって違ってくるものであり、  
ID/Passwordのようなデータを保存したテキストデータを暗号化するために使います。  
ネットワークを介すものではありません。

ID/Passwordのような、個人個人によって違ってくるデータを用いて、  
別のアプリケーションの引数を生成して起動します。

生のテキストデータではOSSでAESを用いた場合、key, IVがバレていますので、  
個人のデータが漏れてしまいます。  
これをなんとかしたいです。




ローカルに閉じていればいいのであれば、簡易な方法としては、アプリケーション初回起動時にランダムなキーを生成、保存し、以後はそれを使用すると言う方法が考えられます。ただし、今度はキーの保管が問題になります。

たとえば、Windows+.NETであれば、暗号化に`System.Security.Cryptography.RSACryptoServiceProvider`を使ってキーの保管にOSの機能を使うことができます。これでもローカルの同一アカウントで実行されるマルウェアからはキーが読めますので、絶対ではありません。

そういう状況は想定しなくていいのであれば、ユーザーに暗号化ファイルシステムを使ってもらえば済む話かもしれません。

逆に、想定されている保護レベルは専用のセキュリティデバイスが必要になるような話かもしれません。

ありとあらゆる攻撃シナリオすべてから情報を守ることは不可能なので、トレードオフは必ず発生します。判断ができないのであればセキュリティコンサルタントに相談された方がいいでしょう。

