Реклама:

Асимметричное шифрование с использованием сертификатов в .NET

В версию .NET 2.0 включен полностью оснащенный API для поддержки асимметричной криптографии и сертификатов. Его функции разделены между двумя пространствам имен.

• SystemSecurity.Cn/ptographtf.X509Certificates Содержит классы для получения доступа к хранилищу сертификатов (добавление и удаление контейнеров, добавление и удаление сертификатов, их поиск) и отображения стандартных диалоговые окоп Windows для работы с сертификатами.

■ System.Security.Cryptography.Pkcs Содержит классы, реализующие алгоритмы Cryptographic Message Syntax (CMS) и PKCS#7 для шифрования и проставления цифровых подписей. Зашифрованные с помощью этих классов данные могут взаимодействовать с другими криптографическими системами, реализующими алгоритмы CMS и PKCS#7.

Доступ к хранилищу сертификатов

Класс X509Store позволяет выполнять все операции, связанные с хранением. Вам нужно указать, какое хранилище (пользовательское или машинное) и какой контейнер (папку Personal, Other People или Trusted Root Certification Authorities) вы хотите открыть. В следующем примере выбирается первый сертификат из папки Personal.

X509Store store = new X509Store( StoreName.My,

Storelocation.CurrentUser); '

store. OpoiUOpenFlags. Readonly):

X509Cer titrate? ce-t = store.Certiticates(0];

store.CIose():

ПРИМЕЧАНИЕ Чтобы жизнь не казалась вам скучной, в GUI и перечислении StoreName используются разные имена папок. Имя папки Personal соответствует имени StoreName.My, а папки Other People — имени StoreNameAddressBook.

Вы также можете определить место хранения сертификата по одному из его свойств (например, по имени, издателю или срокам действия). Хороший программный метод ссылки па сертификаты в коде состоит в выполнении поиска с использованием идентификатора ключа владельца сертификата (Subject Key lÜentifrer, SKID), как показано на рис.. 4-13.

Байер Доминик Microsoft ASP.NET. Обеспечение безопасности. Мастер-класс

Рис, 4-13. Значение свойства Subject Key Identifier

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

В приведенном далее примере сертификат выбирается на основе идентификатора ключа.

Выборка сертификата

public static X509Certificatfi2 GatSigningCertificate() {

X509Store store = null;

try {

store = new X509Store( StoruNtiW!. My,

StoreLocation.localMachine);

Store Ooen(OoeiPlags ReadOnly);

X509Certificate2Collection col = störe. Certificates. Fir>o( X509FindType.FinoBySubjecrKeyldenTifier, 'Cc895da9a81f38663eb466233ec90025797c020c", true):

return col[0];

}

finaliy {

store. CloseO;

)

)

В приложениях, не относящихся к ASP.NET, можно также отобразить стандартное диалоговое окно выборки сертификатов, которое дает пользователю возможность выбрать сертификат.

X509Certificate2Collection col =

Х509Се rti ficate2UI.SelectFiomCollection( store.Certificates, Title' , "Message",

X509SelectionFlag.SingleSelection); Подписывание и шифрование данных

Цифровая подпись >то зашифрованный хэш данных (созданный, например, с помощью алгоритма RSA). Для шифрования хэша используется закрытый ключ. Эта операция выполняется по двум причинам. Первая: если пользователь захочет моди-фицироиать данные, ему также потребуется закрытый ключ подписавшейся стороны для повторного шифрования хэша. Вторая причина: поскольку зашифрованный хэш можно расшифровать только с помощью соответствующего открытого ключа, получатель данных может установить доверие к идентификатору подписавшейся стороны. Этот метод работает так же, как МАС в криптографии с симметричным ключом.


⇐ Предыдущая страница| |Следующая страница ⇒