2011-12-16 3 views
1

После изучения того, как создавать самоподписанные цифровые подписи от 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 этот конструктор с правильным паролем расшифровывает секретный ключ и сохраняет его в качестве ключевого контейнера.

Я просто хочу, чтобы секретный ключ был безопасным без пароля.

ответ

1

В моих глазах вопрос заключается не в том, следует ли вам поместить «байты» в базу данных, но больше, вы бы поставили файл с закрытым ключом в вашей файловой системе.

Как вы это делаете, это по сути то же самое. Вы просто храните байты, составляющие файл сертификата.

Возможно, я не понимаю разницу здесь, но они байты, и файл по сути является одним и тем же, с той лишь разницей, что нужно получить доступ к db, чтобы получить их.

+0

Приношу свои извинения за поздний отклик, праздники и все. Вопрос в том, насколько безопасен только сертификат X509 от пароля? Если у вас есть пароль, у вас есть закрытый ключ, но без пароля, насколько безопасным является закрытый ключ? – user1097974

0

Используйте смарт-карту или токен, чтобы сохранить свой секретный ключ.

UPDATE: Ключ Pvt может быть доступен всем, кто имеет доступ к машине.

+0

Это не вопрос. Вопрос в том, насколько безопасным является закрытый ключ без пароля? Если сертификат с закрытым ключом сохранен, это не имеет отношения к моему вопросу, хотя я упоминал о хранении как о проблеме в моем первоначальном вопросе; моя вина. Кроме того, смарт-карты не являются опцией, так как нет никакой инфраструктуры для поддержки. – user1097974

0

Закрытые ключи в PFX (PKCS # 12) хранятся в зашифрованном виде, что, конечно же, означает пароль. Не все PFX зашифрованы, структурные элементы остаются открытым текстом, чтобы содержать метаданные о содержимом (например, какой алгоритм шифрования использовался).

Основываясь на проверке файла, с Windows 7 закрытые ключи шифруются с использованием трехмерных (168-битных) 3DES. Ключ выводится с помощью сложной формулы, содержащей ваш пароль; в файле ничего не сохранено, что дает какие-либо указания относительно того, каким был ваш пароль, как долго это было, и так далее.

Обычно пароль подтверждается добавлением MAC-адреса в содержимое, которое использует тот же пароль для его функции деривации ключа. В случае, когда пароль MAC и пароль шифрования различны (который я лично никогда не видел), пароль проверяется структурной информацией в зашифрованной полезной нагрузке.

Недостаток DES главным образом лежит в маленьких ключах, он легко грубит forcable сегодня. 3-клавишный ключ 3DES имеет еще 112 семантических бит, чем ключ (1) DES, что позволяет переломить 2^112 (~ 5 x 10^33) раз дольше.

Итак, в конце дня секретный ключ криптографически звучит. Но, как и все, что связано с паролем, если вы используете плохой пароль, который легко угадать, он может быть взломан грубой силой.