1

C#での自己署名証明書の作成から自己署名デジタル署名を生成する方法を確認した後、CreateSelfSignCertificatePfxを呼び出して、バイト配列でPXFデータを取得し、X509Certificate2オブジェクト内で使用して署名と検証を行うことができます。例...

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)コンストラクターによると

正しいパスワードを使用してこのコンストラクターを呼び出すと、秘密鍵が復号化され、鍵コンテナーに保存されます。

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

4

3 に答える 3

1

私の目には、問題はデータベースに「バイト」を入れるかどうかではなく、秘密鍵を含むファイルをファイルシステムに入れるかどうかです。

あなたがやっている方法では、それは本質的に同じことです。証明書ファイルを構成するバイトを保存しているだけです。

ここで違いを理解できていないかもしれませんが、バイトとファイルは本質的に同じものであり、唯一の違いは、それらを取得するためにデータベースにアクセスする必要があるという事実です。

于 2011-12-16T20:29:50.807 に答える
0

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

更新: Pvt キーには、マシンにアクセスできる人なら誰でもアクセスできます。

于 2012-01-10T13:04:50.380 に答える