При создании собственного приложения, использующего возможности устройств Рутокен, перед разработчиком встает вопрос о выборе оптимального средства реализации криптографических функций. На сегодняшний день наиболее распространёнными высокоуровневыми интерфейсами, предоставляющими мощные возможности по использованию функционала устройств Рутокен прикладными приложениями, являются стандарты RSALabs PKCS #11 и Microsoft CryptoAPI.
Стандарт PKCS #11 является одним из семейства стандартов криптографии с открытым ключом (PKCS, Public-Key Cryptography Standard), разработанных RSA Laboratories для обеспечения совместимости различных реализаций криптографии с открытым ключом.
Стандарт PKCS #11, также известный под названием Cryptoki (Cryptographic Token Interface Standart), распространяется на «криптографические токены» – устройства, способные содержать криптографическую информацию и выполнять криптографические преобразования, и определяет для них интерфейс прикладного программирования (API). Таким образом, стандарт описывает общий набор команд для выполнения криптографических функций независимо от конкретной аппаратной реализации токена и программной среды.
В основе PKCS #11 лежит объектно-ориентированный подход, который позволяет стандарту все время расширяться, включая в себя вновь появляющиеся как аппаратные, так и программные решения. Кроме того, PKCS #11 предоставляет разработчикам возможность добавлять свои определения для тех алгоритмов, которые еще не вошли в стандарт.
Более подробно с текстом стандарта можно ознакомиться на странице http://www.rsa.com/rsalabs/node.asp?id=2133 .
- кроссплатформенность. PKCS #11 легко реализуется на любых платформах: Windows, Mac OS, Linux, UNIX, Java и т.п.
- простой интерфейс для языка C;
- высокая степень абстракции;
- высокая распространенность среди не-Windows платформ;
- легкая портируемость программного обеспечения на любые платформы;
- поддержка управления несколькими устройствами Рутокен одновременно;
- поддержка одновременного хранения на устройстве Рутокен ключей, сертификатов и объектов данных;
- наличие специальной функции ожидания подключения/отключения токена (C_WaitForSlotEvent).
- недостаточная поддержка стандарта операционными системами семейства Windows и, как следствие, прикладным программным обеспечением под Windows;
- отсутствие вспомогательных функций для работы с сертификатами, в результате чего разбор и изучение сертификата формата X.509 может оказаться достаточно сложной задачей. Однако при работе в MS Windows возможно использование функций Win32 API даже при использовании стандарта PKCS #11 (см. пример ССЫЛКА);
- отсутствие функции выбора и управления криптопровайдерами. Так как PKCS #11 представляет собой API, а не архитектуру, в случае, если приложению необходимо использовать несколько криптопровайдеров, то оно само должно определять, как с ними работать.
Microsoft CryptoAPI (MS CAPI) представляет собой интерфейс прикладного программирования, разработанный корпорацией Microsoft для обеспечения криптографическими функциями разработчиков Windows-приложений и входящий в состав операционных систем Windows. Криптографические алгоритмы реализуются криптопровайдером – независимым модулем, содержащим библиотеку криптографических функций со стандартизованным интерфейсом, а CryptoAPI лишь предоставляет унифицированный интерфейс работы с криптопровайдером. Подобная архитектура позволяет переходить от одного провайдера к другому с минимальными изменениями исходного кода, так как интерфейс (т. е. сами функции) не меняется.
Начиная с Windows Vista, Microsoft предлагает новый интерфейс Cryptography API: Next Generation (CNG), предназначенный для замены устаревшего интерфейса CryptoAPI. Служба CNG предоставляет набор интерфейсов API для выполнения основных криптографических операций и благодаря своей модульной архитектуре позволяет создавать, обновлять и использовать собственные алгоритмы шифрования в таких приложениях и технологиях, как служба сертификации Active Directory, технологии SSL и IPsec. CNG поддерживает все алгоритмы, предоставляемые CryptoAPI, а также новые алгоритмы, включая алгоритмы шифрования, цифровых подписей, обмена ключами и хеширования, в том числе и алгоритмы на основе эллиптических кривых (ECC). Интерфейс CNG является гораздо более гибким, тем самым обеспечивая разработчикам больший контроль над способом выполнения криптографических операций и совместной работой алгоритмов при выполнении различных операций.
Более подробная информация o CryptoAPI доступна на сайте MSDN Library по ссылке http://technet.microsoft.com/en-us/library/cc962093.aspx.
- глубокая интеграция в Windows и прикладное программное обеспечение под Windows;
- простой интерфейс;
- более высокий уровень абстракции по сравнению с PKCS #11;
- легкая портируемость программного обеспечения в пределах ОС Windows;
- автоматический доступ к любому установленному криптопровайдеру.
- невозможность использования в ОС, отличных от Windows;
- отсутствие возможности управления несколькими устройствами Рутокен одновременно. Так как в CryptoAPI нет понятия физического устройства, то для одновременного использования нескольких устройств Рутокен на одном и том же компьютере потребуется использование особой техники, описанной в разделе ССЫЛКА;
- отсутствие специальной функции ожидания подключения/отключения токена (реализация возможна через Win32 API);
- невозможность хранения объектов данных вместе с RSA ключами и сертификатами на устройстве Рутокен;
- установка криптопровайдера требует наличия прав администратора в ОС.