Сертификат PFX Self Signed x509 с безопасным паролем - PullRequest
1 голос
/ 17 декабря 2011

Посмотрев, как генерировать самозаверяющие цифровые подписи из Создание самозаверяющего сертификата в 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 сверху, должны храниться в БД (для подписи).Возникает вопрос: насколько безопасны байты в этом формате?Я знаю, что вам нужен пароль для создания нового сертификата X509Certificate2 с закрытым ключом, но в общем смысле насколько безопасны байты без пароля?У меня нет проблем с шифрованием этих байтов в качестве добавленного слоя, но нужно ли это?

Согласно конструктору X509Certificate2.X509Certificate2 (Byte [], String)

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

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

Ответы [ 3 ]

1 голос
/ 17 декабря 2011

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

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

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

0 голосов
/ 03 августа 2016

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

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

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

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

0 голосов
/ 10 января 2012

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

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

...