2016-08-22 6 views
0

私はC#を使用しています。
私は次のようにDPAPIを使用しようとしている、256バイトのサイズを持つ秘密鍵を持っているDPAPIを使用してRijndaelManagedキーを格納する

RijndaelManaged key = new RijndaelManaged(); 
    byte[] buffer = new byte[32] 
     { 
       3,3,3,3,3,3,3,3, 
       5,5,5,5,5,5,5,57, 
       6,7,8,8,8,8,8,3, 
       1,33,36,39,39,39,31,37 
     }; 

     byte[] secret = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 

     // Encrypt a copy of the data to the stream. 
     byte[] output = ProtectedData.Protect(buffer, secret, DataProtectionScope.CurrentUser); 
     key.Key = output;//Throw an exception 

ProtectData.Protectからの復帰ザッツoutput配列は、そのkey.Key ISN」サイズであることを私の問題tは(178バイト)をサポートし、私は例外だよそのRijndaelManagedキーにoutputを挿入しようとしているとき:

「SYSTをem.Security.Cryptography.CryptographicException 'mscorlib.dllで発生しました

追加情報:指定されたキーは、このアルゴリズムの有効なサイズではありません。

どうすれば解決できますか?私のRijndaelManagedキーを保存するための他のソリューション?

は、私は別のproccess

おかげで私の秘密鍵にアクセスするためにもしたいです。

答えて

0

ProtectedData.Protectの出力は暗号化されています(暗号化キーではありません)。どのようなコンテキストや整合性チェックを格納しても、それが正しく解読できることを証明する必要があります。オリジナルの256ビットキーを元に戻すには、Unprotectに電話する必要があります。

キーを派生させようとしているのであれば、PBKDF2のようなキー導出ルーチンを使用してください(.NETではRfc2898DeriveBytesで実装されています)。

また、DPAPIを使用してデータを保護しようとしている場合は、本質的にそれが行われます。その鍵をカスタマイズする必要はありません。保護するデータを渡すだけです。

+0

自分の秘密鍵を保護したいだけです – Evyatar

+0

「秘密鍵」とは、非対称暗号が関係していることを意味します。 Rijndael(そしてAESであるRijndaelのサブセット)は対称アルゴリズムであり、秘密でなければならない "秘密鍵"がありますが、 "秘密鍵"はありません。それをディスクに保存しようとしていて、誰かがあなたのハードドライブを盗んでしまうのを恐れているなら、DPAPIが役に立ちます。それを使用するにはデータを保護解除する必要があります。現在のプロセスからキーを非表示にすることはできません。何かを保護する前に、保護すべき時期と誰から説明する必要があるかを記述します。 – bartonjs

+0

ええ。私は理解しています。だから、私はそれをディスクに保存したい秘密鍵があると言っているように、プロセス/ユーザーログオンなどのデータだけを保護したいと思っています。私は本当に私の "本当の"秘密鍵誰かが私のexeにリバースエンジニアをした場合、非表示になります – Evyatar

関連する問題