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

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)

Развертывание инфраструктуры 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)

Курс по инфраструктуре открытых ключей - первые 3 лекции

В этом году наконец дошли руки слегка обновить материалы курса по PKI, который мы делали для Microsoft Research еще под .NET 2.0
Технологии разработки шагают вперед заметно быстрее чем принципы Инфраструктуры Открытых Ключей, поэтому обновлению повергласть программная часть. А теория прошлогодняя :)


Итак. первые три лекции курса PKI:


В рамках лекций рассмотрим основу PKI - ассиметричные криптосистемы, рассмотрим жизненный цикл секретного и открытого ключей в этих схемах и рассмотрим как с помозью всего этого можно строить модели доверия.