Открыть сервис

Public-Key Cryptography Standards

Public-Key Cryptography Standards (PKCS) — это набор спецификаций и стандартов, разработанных компанией RSA Laboratories (США) для обеспечения совместимости и безопасности в системах, использующих криптографию с открытым ключом. PKCS охватывает широкий спектр криптографических операций, включая шифрование, цифровые подписи, управление сертификатами и обмен ключами. Стандарты были опубликованы в 1990-х годах и стали основой для многих протоколов безопасности, таких как SSL/TLS, S/MIME и PKI (инфраструктура открытых ключей). Хотя некоторые из них со временем устарели, PKCS остаются важным эталоном в криптографической практике.

История и разработка

PKCS были созданы компанией RSA Laboratories (входящей в состав RSA Security, ныне подразделение Dell Technologies) для стандартизации криптографических протоколов, основанных на алгоритме RSA, который был запатентован в 1983 году. Первые версии спецификаций вышли в 1991 году и предназначались для упрощения взаимодействия между различными программными и аппаратными решениями. Целью было создание открытых, общедоступных стандартов, которые могли бы использоваться разработчиками без лицензионных отчислений (патент на RSA истёк в 2000 году).

Стандарты PKCS не являются формальными стандартами ISO или IEEE, но получили широкое признание в индустрии. Они были переданы в ведение консорциума PKI Forum, а затем — в IETF (Internet Engineering Task Force), где некоторые из них были формализованы как RFC (Request for Comments). Например, PKCS #1 и PKCS #7 были адаптированы в RFC 3447 и RFC 2315 соответственно.

Основные стандарты PKCS

Семейство PKCS включает более десятка спецификаций, каждая из которых решает определённую задачу. Ниже приведены наиболее значимые из них.

PKCS #1: RSA Cryptography Standard

PKCS #1 определяет использование алгоритма RSA для шифрования и цифровых подписей. Он описывает форматы ключей, процедуры шифрования (OAEP — Optimal Asymmetric Encryption Padding) и подписи (PSS — Probabilistic Signature Scheme). Этот стандарт лёг в основу многих реализаций RSA, включая библиотеки OpenSSL и Bouncy Castle. В 2002 году он был обновлён до версии 2.1, а затем адаптирован IETF как RFC 3447.

PKCS #3: Diffie-Hellman Key Agreement Standard

PKCS #3 описывает протокол обмена ключами Диффи-Хеллмана (Diffie-Hellman), который позволяет двум сторонам безопасно установить общий секретный ключ по незащищённому каналу. Стандарт включает параметры (модуль и генератор) и процедуру вычисления общего ключа. Однако он не предусматривает аутентификацию сторон, что делает его уязвимым для атак «человек посередине» (Man-in-the-Middle).

PKCS #5: Password-Based Cryptography Standard

PKCS #5 определяет методы шифрования на основе пароля (PBKDF — Password-Based Key Derivation Function). Основная цель — защита ключей, полученных из паролей, от атак перебором. Стандарт включает функцию PBKDF2 (Password-Based Key Derivation Function 2), которая использует соль и итерации для замедления подбора. PBKDF2 широко применяется в системах хранения паролей (например, в Unix-подобных ОС) и в протоколах Wi-Fi (WPA2).

PKCS #7: Cryptographic Message Syntax Standard

PKCS #7 описывает формат криптографических сообщений, включая подписанные и зашифрованные данные. Он поддерживает цифровые подписи, шифрование и аутентификацию. Этот стандарт лёг в основу S/MIME (Secure/Multipurpose Internet Mail Extensions) для защищённой электронной почты. Впоследствии был адаптирован IETF как RFC 2315, а затем заменён на CMS (Cryptographic Message Syntax) в RFC 5652.

PKCS #10: Certification Request Syntax Standard

PKCS #10 определяет формат запроса на сертификат (CSR — Certificate Signing Request). Он используется для отправки открытого ключа и идентификационных данных (например, имени владельца) в удостоверяющий центр (CA) для получения цифрового сертификата. CSR включает подпись, подтверждающую владение соответствующим закрытым ключом. Этот стандарт широко применяется в PKI, включая системы на базе OpenSSL.

PKCS #11: Cryptographic Token Interface Standard

PKCS #11 — один из самых известных стандартов семейства. Он определяет программный интерфейс (API) для криптографических токенов, таких как смарт-карты, USB-ключи (например, eToken) и аппаратные модули безопасности (HSM). API описывает функции для генерации ключей, шифрования, подписи и управления сертификатами. PKCS #11 поддерживается большинством криптографических устройств и библиотек, включая OpenSC и SoftHSM.

PKCS #12: Personal Information Exchange Syntax Standard

PKCS #12 определяет формат файла для хранения закрытых ключей, сертификатов и цепочек доверия в едином контейнере, защищённом паролем. Файлы с расширением .p12 или .pfx используются для экспорта и импорта криптографических данных между системами. Этот стандарт применяется в браузерах (например, для импорта сертификатов в Mozilla Firefox) и в серверном ПО (IIS, Apache).

Применение и значение

Стандарты PKCS стали основой для многих технологий информационной безопасности:

  • Инфраструктура открытых ключей (PKI): PKCS #10 и PKCS #12 используются для управления сертификатами, а PKCS #7 — для безопасного обмена сообщениями.
  • Безопасность веб-протоколов: PKCS #1 и PKCS #5 лежат в основе TLS (Transport Layer Security) и HTTPS.
  • Электронная подпись: PKCS #7 и PKCS #1 применяются в системах электронного документооборота, включая российские решения (например, КриптоПро CSP, который поддерживает PKCS #11).
  • Аппаратные средства защиты: PKCS #11 является стандартом де-факто для HSM и смарт-карт, используемых в банковской сфере и государственных информационных системах.
  • Шифрование паролей: PKCS #5 (PBKDF2) используется в современных ОС (Linux, macOS) и в протоколах Wi-Fi (WPA3).

В России стандарты PKCS адаптированы с учётом национальных криптографических алгоритмов (ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012). Например, библиотека КриптоПро CSP реализует PKCS #11 с поддержкой российских стандартов, что позволяет использовать аппаратные токены (например, Рутокен) в государственных информационных системах.

Критика и устаревание

Некоторые стандарты PKCS подвергались критике из-за уязвимостей или устаревания:

  • PKCS #3 (Diffie-Hellman) не включает аутентификацию, что требует дополнительных мер защиты (например, цифровых подписей).
  • PKCS #5 (PBKDF2) считается менее устойчивым к атакам с использованием GPU и ASIC по сравнению с более новыми алгоритмами, такими как bcrypt, scrypt или Argon2.
  • PKCS #7 был заменён на CMS (RFC 5652), который имеет более широкие возможности (например, поддержка атрибутов и множественных подписей).
  • PKCS #11 критикуется за сложность реализации и недостаточную поддержку многопоточности, что может приводить к ошибкам в высоконагруженных системах.

Несмотря на это, PKCS остаются важным эталоном в криптографии. Многие из них продолжают использоваться в legacy-системах, а некоторые (PKCS #1, PKCS #11) активно развиваются и обновляются.

Источники

  • RSA Laboratories. PKCS #1 v2.2: RSA Cryptography Standard (2012).
  • RSA Laboratories. PKCS #5 v2.1: Password-Based Cryptography Standard (2006).
  • RSA Laboratories. PKCS #11 v2.40: Cryptographic Token Interface Standard (2015).
  • RSA Laboratories. PKCS #12 v1.1: Personal Information Exchange Syntax Standard (2014).
  • IETF. RFC 2315: PKCS #7: Cryptographic Message Syntax (1998).
  • IETF. RFC 3447: Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications (2003).
  • IETF. RFC 5652: Cryptographic Message Syntax (CMS) (2009).
  • NIST. Special Publication 800-132: Recommendation for Password-Based Key Derivation (2010).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →