После изучения того, как создавать самоподписанные цифровые подписи от Creating a self-signed certificate in C#, я могу вызвать CreateSelfSignCertificatePfx и получить данные PXF в массиве байтов, которые затем могут быть использованы в объекте X509Certificate2 для подписи и проверить. Пример ...PFX Self Signed 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 сверху, нужно хранить в БД (чтобы подписать материал). Вопрос становится, насколько безопасны байты в этом формате? Я знаю, что вам нужен пароль для создания нового X509Certificate2 с закрытым ключом, но в общем смысле, насколько безопасны байты без пароля? У меня нет проблем с шифрованием этих байтов в качестве добавленного слоя, но это необходимо?
Согласно X509Certificate2.X509Certificate2(Byte[], String) Constructor
Calling этот конструктор с правильным паролем расшифровывает секретный ключ и сохраняет его в качестве ключевого контейнера.
Я просто хочу, чтобы секретный ключ был безопасным без пароля.
Приношу свои извинения за поздний отклик, праздники и все. Вопрос в том, насколько безопасен только сертификат X509 от пароля? Если у вас есть пароль, у вас есть закрытый ключ, но без пароля, насколько безопасным является закрытый ключ? – user1097974