2011-12-16 23 views
1

Creating a self-signed certificate in C#から自己署名デジタル署名を生成する方法を見て、CreateSelfSignCertificatePfxを呼び出して、X509Certificate2オブジェクト内で署名するために使用できるバイト配列のPXFデータを取得できます確認します。例...PFXの自己署名付きx509証明書をパスワードで保護

byte[] pfx = Certificate.CreateSelfSignCertificatePfx("O=Company,CN=Firstname,SN=Lastname", DateTime.Now, DateTime.Now.AddYears(1), "password"); 

X509Certificate2 cert = new X509Certificate2(pfx, "password"); 
byte[] publicBytes = cert.RawData; 

RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey; 
byte[] signedData = rsa.SignData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider()); 

RSACryptoServiceProvider rsa2 = (RSACryptoServiceProvider)new X509Certificate2(publicBytes).PublicKey.Key; 

bool verified = rsa2.VerifyData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider(), signedData); 

これは機能します。私の懸念は、上記の元のバイトであるbyte [] pfxがDBに格納されている必要があります。問題は、この形式のバイトがどれくらい安全かということです。秘密鍵で新しいX509Certificate2を構築するためにパスワードが必要だと知っていますが、一般的な意味では、パスワードなしでバイトがどれくらい安全ですか?これらのバイトを追加レイヤーとして暗号化する際に問題はありませんが、それは必要ですか?

正しいパスワードでこのコンストラクタを呼び出すX509Certificate2.X509Certificate2(Byte[], String) Constructor

によると、秘密鍵を復号化し、キーコンテナに保存します。

秘密鍵がパスワードなしで安全であることを確認したいだけです。

答えて

1

私の目では、データベースに「バイト」を入れるべきかどうかという問題ではありませんが、ファイルシステムに非公開鍵のファイルを置くことになります。

あなたのやり方では、それは本質的に同じことです。あなたは、certファイルを構成するバイトを格納しているだけです。

私はここでの違いを理解していないかもしれませんが、バイトとファイルは本質的に同じものです。唯一の違いは、dbにアクセスして取得する必要があるという点です。

+0

私は遅刻の応答、休日およびすべてのために私の謝罪します。問題は、パスワードだけでX509証明書がどの程度安全であるかということでした。パスワードをお持ちの場合、秘密鍵はありますが、パスワードなしで秘密鍵はどのくらい安全ですか? – user1097974

0

スマートカードまたはトークンを使用して秘密鍵を格納します。

UPDATE: Pvtキーは、マシンにアクセスできるすべての人がアクセスできます。

+0

それは問題ではありません。問題は、秘密鍵がパスワードなしでどれくらい安全であるかです。私の元の質問にストレージを言い表したとしても、秘密鍵が格納された証明書は私の質問とは無関係です。私のせい。さらに、スマートカードは、サポートするインフラストラクチャがないため、オプションではありません。 – user1097974

0

PFX(PKCS#12)の秘密鍵は暗号化されて保存されますが、これはもちろんパスワード用です。 PFXのすべてが暗号化されているわけではありませんが、構造上の部分は(暗号アルゴリズムが使用されたような)内容に関するメタデータを含むために平文のままです。

ファイルの検査に基づいて、Windows 7の場合、秘密鍵は3キー(168ビット)3DESを使用して暗号化されます。キーは、パスワードを含む複雑な数式を使用して導出されます。ファイルには何も保存されておらず、パスワードが何であったか、どれくらいの時間が経過したかなどの情報が表示されます。

パスワードは、キーの導出機能に同じパスワードを使用するコンテンツにMACを追加することによって、通常正しいことが証明されます。 MACパスワードと暗号化パスワードが異なる場合(個人的に見たことがない)、パスワードは暗号化されたペイロードの構造情報によって検証されます。

DESの弱点は主に小さなキーサイズにあり、今日は簡単に強制的に強制できます。 3キー3DESキーは、(1)DESキーよりも112のセマンティックビットを持ち、ブレークするのに2^112(〜5 x 10^33)時間かかる。

したがって、1日の終わりに、秘密鍵は暗号的に健全です。しかし、パスワードベースの入力を持つもののように、簡単に推測される悪いパスワードを使用すると、それは無差別な力でひどくなる可能性があります。

関連する問題