PKCS
PKCS (Public-Key Cryptography Standards, «Стандарты криптографии с открытым ключом») — это набор спецификаций, разработанных компанией RSA Laboratories (подразделение RSA Security) в начале 1990-х годов для стандартизации алгоритмов, форматов данных и протоколов, использующих асимметричную криптографию. PKCS охватывает широкий спектр задач: от шифрования и цифровых подписей до управления сертификатами и обмена ключами. Многие из этих стандартов легли в основу более общих промышленных стандартов, таких как PKIX (Public Key Infrastructure (X.509)) и криптографические библиотеки OpenSSL.
История
Разработка PKCS началась в 1991 году в компании RSA Laboratories, которая была основана создателями алгоритма RSA — Роном Ривестом, Ади Шамиром и Леонардом Адлеманом. Целью было создание открытых, детализированных и практических спецификаций, которые позволили бы разработчикам программного обеспечения реализовывать криптографические функции без необходимости разбираться в сложных математических деталях. Первые версии стандартов (PKCS #1, #3, #7 и #8) были опубликованы в 1991–1993 годах.
Стандарты PKCS не являются официальными стандартами международных организаций, таких как ISO или IEEE, но получили широкое распространение в индустрии благодаря своей практичности и поддержке со стороны RSA Security. Впоследствии многие из них были адаптированы в RFC (Request for Comments) IETF (Internet Engineering Task Force) и стали частью интернет-инфраструктуры. Например, PKCS #1 (RSA Cryptography Standard) был переработан и опубликован как RFC 8017, а PKCS #7 (Cryptographic Message Syntax) — как RFC 2315.
Основные стандарты PKCS
Семейство PKCS включает 15 пронумерованных стандартов (от PKCS #1 до PKCS #15), но не все из них получили широкое применение. Некоторые были заменены более современными спецификациями, другие остаются актуальными до сих пор.
PKCS #1: RSA Cryptography Standard
Этот стандарт определяет использование алгоритма RSA для шифрования и цифровых подписей. Он включает:
- Форматы ключей (открытый и закрытый) в двоичном представлении.
- Схемы дополнения (padding) для шифрования (OAEP — Optimal Asymmetric Encryption Padding) и подписей (PSS — Probabilistic Signature Scheme).
- Описание математических операций, включая генерацию простых чисел и вычисление модульной экспоненты.
PKCS #1 является одним из самых важных стандартов, так как RSA остаётся одним из наиболее распространённых асимметричных алгоритмов. Текущая версия — PKCS #1 v2.2 (RFC 8017, 2016 год).
PKCS #3: Diffie-Hellman Key Agreement Standard
Определяет протокол Диффи-Хеллмана для согласования общего секретного ключа между двумя сторонами по незащищённому каналу. Стандарт описывает параметры (простое число p и генератор g), а также процедуры генерации открытых и закрытых ключей. Хотя сам протокол широко используется, PKCS #3 устарел и был заменён более современными версиями, такими как RFC 2631 (Diffie-Hellman Key Agreement Method).
PKCS #5: Password-Based Cryptography Standard
Стандарт, описывающий методы шифрования, основанные на паролях (password-based encryption, PBE). Он включает:
- Алгоритм PBKDF (Password-Based Key Derivation Function) для получения ключа из пароля.
- Схемы дополнения и шифрования (например, CBC).
Текущая версия — PKCS #5 v2.1 (RFC 8018, 2017 год). Этот стандарт лёг в основу многих систем защиты данных, включая архиваторы (WinRAR, 7-Zip) и форматы контейнеров (например, PGP).
PKCS #7: Cryptographic Message Syntax (CMS)
Определяет формат криптографических сообщений, используемых для цифровых подписей, шифрования и аутентификации. CMS (Cryptographic Message Syntax) является основой для таких протоколов, как S/MIME (Secure/Multipurpose Internet Mail Extensions) и используется в электронной почте, подписи документов (например, в формате PDF) и в протоколах TLS. Стандарт описывает структуры данных (например, SignedData, EnvelopedData), которые могут содержать подписи, сертификаты и зашифрованные данные.
PKCS #8: Private-Key Information Syntax Standard
Определяет формат хранения закрытых ключей (включая ключи RSA, DSA, ECDSA) в двоичном виде. Стандарт поддерживает как незашифрованные ключи (Plaintext), так и зашифрованные с использованием пароля (EncryptedPrivateKeyInfo). PKCS #8 широко используется в OpenSSL, Java KeyStore и других криптографических библиотеках.
PKCS #10: Certification Request Syntax Standard
Определяет формат запроса на получение цифрового сертификата (Certificate Signing Request, CSR). CSR содержит открытый ключ, информацию о владельце (например, имя, организация) и подпись, созданную с помощью закрытого ключа. Этот стандарт является основой для работы центров сертификации (CA) и используется в протоколах, таких как ACME (Let's Encrypt).
PKCS #11: Cryptographic Token Interface Standard
Определяет программный интерфейс (API) для взаимодействия с криптографическими устройствами, такими как смарт-карты, USB-токены (например, eToken, Rutoken) и аппаратные модули безопасности (HSM). PKCS #11 позволяет разработчикам писать приложения, не зависящие от конкретного производителя оборудования. Стандарт поддерживает широкий спектр алгоритмов: RSA, DSA, ECDSA, AES, SHA и другие. Текущая версия — PKCS #11 v3.0 (2020 год).
PKCS #12: Personal Information Exchange Syntax Standard
Определяет формат контейнера для хранения закрытых ключей, сертификатов и цепочек сертификатов в одном файле (обычно с расширением .p12 или .pfx). Контейнер может быть защищён паролем. PKCS #12 широко используется в браузерах, операционных системах (Windows, macOS) и для экспорта/импорта сертификатов.
PKCS #15: Cryptographic Token Information Format Standard
Определяет стандартный формат для хранения криптографических объектов (ключей, сертификатов, данных) на смарт-картах и токенах. Он обеспечивает совместимость между различными устройствами и приложениями.
Применение
Стандарты PKCS нашли применение в следующих областях:
- Инфраструктура открытых ключей (PKI): PKCS #10 используется для создания CSR, PKCS #7 — для подписи и шифрования сообщений, PKCS #12 — для хранения сертификатов и ключей.
- Электронная почта: S/MIME, основанный на PKCS #7, обеспечивает шифрование и подпись писем в почтовых клиентах (Microsoft Outlook, Mozilla Thunderbird).
- Веб-безопасность: TLS (Transport Layer Security) использует сертификаты X.509, которые часто хранятся в формате PKCS #12 и обрабатываются через PKCS #11.
- Электронная подпись: В России стандарты PKCS #7 и PKCS #12 используются в системах электронного документооборота (ЭДО) и при работе с усиленными квалифицированными электронными подписями (УКЭП).
- Аппаратные модули безопасности (HSM): PKCS #11 является стандартным интерфейсом для взаимодействия с HSM, используемыми в банковской сфере, государственных учреждениях и крупных корпорациях.
Критика и ограничения
Несмотря на широкое распространение, PKCS имеют ряд недостатков:
- Устаревание некоторых стандартов: PKCS #3 (Diffie-Hellman) и PKCS #6 (Extended-Certificate Syntax) были заменены более современными спецификациями.
- Сложность реализации: Некоторые стандарты, особенно PKCS #11, имеют сложную архитектуру, что может приводить к ошибкам в реализации и уязвимостям.
- Отсутствие единой поддержки: Разные производители могут реализовывать PKCS #11 по-разному, что снижает переносимость приложений.
- Проблемы безопасности в старых версиях: Например, в PKCS #1 v1.5 использовалась схема дополнения, которая была уязвима к атаке Bleichenbacher (1998 год). В более поздних версиях (v2.0+) эта проблема была устранена.
Интересные факты
- PKCS #7 изначально назывался «Cryptographic Message Syntax Standard», но позже был переименован в «CMS» (Cryptographic Message Syntax) в RFC 2630.
- Формат .pfx, используемый в Windows, является ранней версией PKCS #12, но с некоторыми отличиями в реализации.
- В России для работы с электронной подписью часто используются форматы, основанные на PKCS #7 (например, формат CAdES, описанный в ГОСТ Р 53898-2010).
Источники
- RSA Laboratories. PKCS #1 v2.2: RSA Cryptography Standard. RFC 8017, 2016.
- RSA Laboratories. PKCS #5 v2.1: Password-Based Cryptography Standard. RFC 8018, 2017.
- RSA Laboratories. PKCS #7: Cryptographic Message Syntax Standard. RFC 2315, 1998.
- RSA Laboratories. PKCS #11: Cryptographic Token Interface Standard. PKCS #11 v3.0, 2020.
- RSA Laboratories. PKCS #12: Personal Information Exchange Syntax Standard. RFC 7292, 2014.
- Menezes, A., van Oorschot, P., Vanstone, S. Handbook of Applied Cryptography. CRC Press, 1996.
- OpenSSL Project. PKCS Standards Overview. OpenSSL Documentation.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →