Security vs Cloud blog | Все запили отмеченные как 'Security'

Security vs Cloud blog

Здесь найдете заметки по безопасности, облакам и предпринимательству

Меняем парольв PFX/PKCS12-контейнере

Иногда всплывает элементарная задача - сменить или задать пароль на PFX-контейнер с сертификатом и ключем. И выливается это в запуск утилит OpenSSL из консоли. В общем из пушки по воробьям :)
При этом в .NET это делается всего за 3 шага.
Необходимо:
- Открыть PFX/PKCS12-контейнер с флагом, разрешающим экспорт закрытого ключа, указав старый пароль
- Вызвать метод Export с флагом X509ContentType.Pfx и новым паролем для получения нового контейнера в виде бинарного массива
- Сохранить массив на диск и вуаля - получаем новый контейнер.
При экспорте PFX-контейнера есть одна хитрость. Новый пароль задается с помощью класса SecureString. Для удобного получения объекта SecureString из обычной строки можно использовать небольшое расширение:

public static SecureString ToSecureString(this string input)
{
            if (string.IsNullOrWhiteSpace(input))
                return null;

            SecureString res = new SecureString();
            foreach (char c in input.ToCharArray())
                res.AppendChar(c);
            return res;
}

Само приложение с исходниками для изменения пароля на PFX-контейнеры в приложении

PFXChangePassword.zip (53,7KB)

Коротенько о PKI

Откуда пошла Инфраструктура Открытых Ключей? И почему именно Инфраструктура?
На самом деле появилась она самым логичнейшим способом - в результате эволюции. 
Вспомним Энигму и симметричные криптосистемы. Они стойкие, позволяют шифровать данные с огромной скоростью, но при большом числе абонентов приходятя использовать единые для всех ключи, иначе задача даставки ключевой инфомации становится нереальной. 
Например для 100 абонентов - нужно чуть меньше чем 100-факториал ключей. Блакнотов не хватит! :)
Значит приходится использовать общие ключи, а это значит теряется контроль. Стоит кому-то каким-либо способом получить ключ - он может читать любую переписку абонентов. Да и доказать, какая часть системы была скомпрометирована - не реально.
Когда появились ассиметричные криптосистемы ex RSA - ключи стали попарно независимы. Те это можно представить как почтовый ящик: Открытый ключ - номер дома и почтового ящика, а секртеный ключ - есть только у меня и позволяет мне этот ящит открыть.
Здесь на 100 абонентов нужно всего 100 пар ключей. 
Но и тут есть довольно банальные уязвимости. Открытый ключ должен доставляться доверенным способом или быть как-то проверяемым. Иначе мне могут подсунуть чужой ключ, я зашифрую данные для третьей строны, Они их прочтет, подправит и спокойно передаст дальше.
По аналогии с почтовым ящиком - если я пришел положить письмо, а кто-то взял и преписал номер ящика на свой. Я передам пимьо злоумышленнику, он его прочтет и уже потом может изменить и положить в ящик реального адресата.
Вот здесь и появляется Инфраструктура Открытых Ключей. 

Суть его проста - мы доставляем доверенно только 1 ключ нашего Главного Пользователя (Удостоверяющего Центра), а он заверяет все остальные ключи. И если мы получаем чей-то ключ то  начале проверяем его с помощью ключа УЦ.

На самом деле это объяснение на пальцах, и в PKI еще много интересныз и мощных инструментов, таких как политики, OID-ы, типы документов. 
Если интересно посмотреть как это все работает в картинках - в приложении презентация по введению в PKI :)

pki_one_day_introduction_lyubko.pdf (1,3MB)

Восстановление пароля для PFX/P12/PKCS12 контейнера

Забыв очередной раз вариацию пароля для PFX-файла для Пуш-уведомлений полез в студенческие лабораторки и выковорил небольшую софтинку для восстановления паролей для PFX/PKCS12 контейнеров.
Восстанавливает она их прямым перебором.
Понятно что способ подойдет только если пароль небольшой и Вы примерно знаете где искать, но этого, обычно, бывает достаточно. 
Программка собрана на .NET 4.5 в Visual Studio 2013 и доступна с исходными кодами

Суть работы приложения на этом скриншоте:


PFXPasswordRecovery.zip (64,3KB)

Инфраструктура открытых ключей в .NET

По мотивам сегодняшних семинаров немного материалов, разжовывающих как использовать PKI в Microsoft .NET.
Если Вы познакомились с принципами организации и построения ИОК, то с использованием сертификатов и списков отзыва в .NET Разберетесь быстро. Можно считать эти лекции альтернативой MSDN :)

В отличии от Crypto API, .NET бережет нервы разработчика, поэтому здесь Вам доступен только основной функционал - возможность загрузить/считать сертификаты, работать с типовыми хранилищами (Local System, Current User), а также формировать зашифрованные и подписанные сообщения CMS.
Из расширенного - расмотрены варинаты использования сертификата в HttpListener, для запуска сервера с поддердкой SSL, и затронута страншная тема механизмов безопансоти веб-сервисов. В примере испольузется именно XML-веб-сервис, но эти же принципы полностью актуальны для WCF-сервисов.

11.PKI1.pdf (12,5MB)

12.PKI2.pdf (12,1MB)

13.PKI3.pdf (12,2MB)

15.PKI5.pdf (9,5MB)

16.PKI6.pdf (9,1MB)

Развертывание инфраструктуры PKI и использование в приложениях

На самом деле, сама по себе инраструктура открытых ключей вещ совершенно бесполезная.
Ни сертификат ни ключ сами по себе ценности никакой не представляют, зато если в каком-то прикладном ПО есть поддержка PKI, ценность такого сервиса для бизнеса сразу появляется. 
Была электронная почта - стала Защищенная электронная почта, был документооборот, а стал защищенный документооборот с метками времени и неотказуемостью итп.

Для того, чтобы использовать возмоности PKI нужны два ингредиента:
- развернутая инфраструктураоткрытых ключей (своя, либо коммерческая)
- интерфейсы, позволяющие програмному обеспечению работать с этим самым PKI.
Сегодня я эти лекции и выложу :)


7._PKI_API.pdf (3,4MB)


Введение в X.509 PKI

Есть довольно много стандартов PKI. Часть входят в состав технологий а-ля DNS SEC, часть используется в прикладном ПО - X.509 и PGP.
Сейчас стандартом де-факто в корпоративном сегменте и гос-орагнах стал X.509 PKI. PGP, конечно, тоже применяется, но в основном либо частными лицами либо в небольших компаниях с энтузиастами-айтишниками :)

X.509 PKI довольно простой стандарт. 
В основе модели доверия у нс лежит Удостоверащий Центр, который выпускает заверенные документы - Сертификаты и Списки Отозванных Сертификатов (СОС). Для работы всей этой инфраструктуры, а также работы прикладного ПО используеются специальные протоколы, а чтобы использовать все возможости PKI (Шифрование и подпись электронной почты, защищенный документооборот) используются приложения PKI.


06. приложения pki.pdf (3,6MB)