質問: オープンソースで公開予定のプログラムで AESなどの共通鍵暗号方式で 機密データを暗号化した場合 ソースとともに key, IV を公開してしまっては 暗号化の意味がありません。 簡単なPINコードを設けることも考えましたが、 ワンクリックですぐにあるアプリケーションに引数を渡して起動するアプリケーションのため、 PINを入力する画面すら設けたくありません。 何かいいアイデアはありませんか? MITライセンスにする予定で、 クライアントアプリです。 プログラムを知らない一般ユーザーの為に、 ビルド済みのバイナリも配布します。 個人個人によって違ってくるものであり、 ID/Passwordのようなデータを保存したテキストデータを暗号化するために使います。 ネットワークを介すものではありません。 ID/Passwordのような、個人個人によって違ってくるデータを用いて、 別のアプリケーションの引数を生成して起動します。 生のテキストデータではOSSでAESを用いた場合、key, IVがバレていますので、 個人のデータが漏れてしまいます。 これをなんとかしたいです。
回答: なんでバレるんでしょうか?バレないようにする手段の問題な気がしますが... 安全な共通鍵暗号方式を用いた通信を行うためには、安全に共通鍵を渡してやる必要があります。 その為には、公開鍵暗号化方式を用いるのが手っ取り早いかと思います。 最初に公開鍵暗号化方式で共通鍵を渡して、その後共通鍵暗号方式での通信を行えば良いかと思います。 例えば、A(サーバ)とB(クライアント)の間で安全に通信するためには... 1. Bは、Aの公開鍵で暗号化した共通鍵をAに渡す。 2. Aは、受け取った暗号化された共通鍵を秘密鍵で復号化する。 3. 以降は、共通鍵暗号方式で通信を行い、定期的に共通鍵を変更する。 こんな感じじゃ無いかと思うんですが...