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)コンストラクターによると
正しいパスワードを使用してこのコンストラクターを呼び出すと、秘密鍵が復号化され、鍵コンテナーに保存されます。
パスワードなしで秘密鍵が安全であることを確認したいだけです。