

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

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

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

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

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

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

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

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


CC BY-SA 3.0
2015-04-09T23:16:41.213
8969
2015-04-10T20:14:45.447
2015-04-10T20:14:45.447
5008
9248
question
c#
オープンソースでの暗号化について


なんでバレるんでしょうか？バレないようにする手段の問題な気がしますが...

安全な共通鍵暗号方式を用いた通信を行うためには、安全に共通鍵を渡してやる必要があります。  
その為には、公開鍵暗号化方式を用いるのが手っ取り早いかと思います。  
最初に公開鍵暗号化方式で共通鍵を渡して、その後共通鍵暗号方式での通信を行えば良いかと思います。

例えば、A(サーバ)とB(クライアント)の間で安全に通信するためには...

  1. Bは、Aの公開鍵で暗号化した共通鍵をAに渡す。
  2. Aは、受け取った暗号化された共通鍵を秘密鍵で復号化する。
  3. 以降は、共通鍵暗号方式で通信を行い、定期的に共通鍵を変更する。

こんな感じじゃ無いかと思うんですが...


CC BY-SA 3.0
2015-04-10T02:33:28.997
8979
2015-04-10T02:33:28.997
2383
8969
answer


どのようなプラットフォームをお考えなのかわからないのでお役に立つかわかりませんが、Androidなどだとたいてい無線LANのインタフェースが付いているのでそのMACを元にkeyを生成しているようです。  
MACはもちろん第三者が参照可能ですが、実際の値を入手できなければ解読できないとも言えます。その辺りはトレードオフなので、ないよりはいいでしょう。


CC BY-SA 3.0
2015-04-10T04:46:52.440
8986
2015-04-10T04:46:52.440
8136
8969
answer


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

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

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

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

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


CC BY-SA 3.0
2015-04-10T05:49:36.093
8992
2015-04-10T05:49:36.093
5793
8969
answer


ユーザーアカウントやコンピュータに紐づけられた鍵を使って暗号化を行う DPAPI はどうでしょうか。C#からなら
[`ProtectedData`](https://msdn.microsoft.com/ja-
jp/library/system.security.cryptography.protecteddata\(v=vs.110\).aspx)
で簡単に使うことができます。


CC BY-SA 3.0
2015-04-10T10:31:01.660
9011
2015-04-10T10:31:01.660
8000
8969
answer