Криптография - статьи
         

Краткая справка об инфраструктуре открытых ключей и OpenSSL


Желающим глубоко изучить теорию открытых ключей рекомендую обратиться к книге Брюса Шнайера "Прикладная криптография". Остальным предлагаю бегло напомнить основные понятия.

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

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

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

Центр Сертификации (Certification Authority, CA) является пакетом программного обеспечения, принимающим и обрабатывающим запросы на выдачу сертификатов, издающим сертификаты и управляющим выданными сертификатами.

Корневой сертификат - сертификат принадлежащий Центру Сертификации, с помощью которого проверяется достоверность других выданных центром сертификатов.


Список отозванных сертификатов - список скомпрометированных или недействительных по какой либо другой причине сертификатов.

Отличительное имя (Distinguished Name, DN) - данные о владельце сертификата. Включают CN (Common Name), OU (Organization Unit), O (Organization), L (Locality), ST (State or province), C (Country name).

Электронная цифровая подпись (ЭЦП)- реквизит электронного документа предназначенный для удостоверения источника данных и защиты данного электронного документа от подделки.

Схема электронной подписи обычно включает в себя:


  • алгоритм генерации ключей пользователя;


  • функцию вычисления подписи;

    функцию проверки подписи.



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

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

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

    Итого у центра сертификации имеется:


    • закрытый ключ


    • корневой сертификат (хранящий в себе открытый ключ);


    • список отозванных (скомпрометированных) сертификатов




    • У клиентов:


      • закрытый ключ;


      • сертификат, подписанный корневым;


      • корневой сертификат для проверки того, что сертификаты других пользователей выданы его доверенным центром;


      • список отозванных (скомпрометированных) сертификатов.


      • Создание корневого сертификата включает:


        1. Генерацию закрытого ключа.


        2. Генерацию открытого ключа и его подпись с помощью закрытого.


        3. Создание обычного сертификата включает:


          1. Генерацию закрытого ключа.


          2. Создание запроса на подпись сертификата.


          3. Подпись запроса в центре сертификации о получение сертификата.


          4. Общепринятый формат информации, содержащейся в сертификате, называется Х509. Сертификаты и ключи могут храниться в разных типах файлов. В нашем случае это будут PEM и PKCS12. PEM используется на серверах, PKCS12 - в браузерах.

            OpenSSL - набор криптографических программ и библиотек - предоставляет средства для управления сертификатами и закрытыми ключами. Синтаксис вызова его функций openssl имя_команды параметры. Наиболее часто встречаемые параметры - это -in имя_файла - файл, который обрабатывается, и -text - отобразить информацию о файле в текстовом формате. Основные команды:
            rsa Работа с ключами
            x509 Работа с файлами сертификатов в формате PEM
            pkcs12 Работа с файлами сертификатов в формате PKCS12
            crl Работа со списком отозванных сертификатов
            Примеры использования:

            Отобразить информацию о закрытом ключе:

            #openssl rsa -text -in ca.key Enter pass phrase for ca.key: writing RSA key: Private-Key: (4096 bit) modulus: 00:c2:3c:f1:e6:56:b6:a6:87:4c:99:56:3f:03:df: 81:04:5b:b3:4a:40:3e:93:71:62:80:e9:3b:01:00: 21:33:91:3c:3f:6a:79:9e:81:97:8b:f4:3a:f0:b4: 9c:af:2f:77:de:43:34:ea:cc:76:e4:ef:c5:25:00: 85:bc:6b:1c:b8:e7:d4:a4:8c:b5:f2:9f:4b:06:f4:

            Отобразить информацию о сертификате в формате PEM:

            #openssl x509 -text -in ca.crt Certificate: Data: Version: 3 (0x2) Serial Number: b5:b5:a9:0e:3d:ed:fb:24 Signature Algorithm: sha1WithRSAEncryption Issuer: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Validity Not Before: Oct 31 13:57:31 2007 GMT Not After : Oct 28 13:57:31 2017 GMT Subject: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit): 00:c2:3c:f1:e6:56:b6:a6:87:4c:99:56:3f:03:df: 81:04:5b:b3:4a:40:3e:93:71:62:80:e9:3b:01:00: 21:33:91:3c:3f:6a:79:9e:81:97:8b:f4:3a:f0:b4: 9c:af:2f:77:de:43:34:ea:cc:76:e4:ef:c5:25:00: 85:bc:6b:1c:b8:e7:d4:a4:8c:b5:f2:9f:4b:06:f4:

            Детальную информацию Вы можете получить из документации OpenSSL.


            Содержание раздела