Введение

Программный токен (также известный как мягкий токен) — это компонент устройства безопасности двухфакторной аутентификации, используемый для авторизации доступа к компьютерным сервисам. Программные токены хранятся на обычном электронном устройстве, таком как настольный компьютер, ноутбук, карманный компьютер или мобильный телефон, и могут быть скопированы. (В отличие от аппаратных токенов, где учетные данные хранятся на специализированном аппаратном устройстве и, следовательно, не могут быть скопированы без физического взлома устройства.)

Поскольку программный токен не является физическим объектом, он подвержен уникальным угрозам, связанным с копированием лежащего в его основе криптографического материала, например, компьютерных вирусов и программных атак. Как аппаратные, так и программные токены уязвимы для атак типа «человек посередине», управляемых ботнетами, или для простых фишинговых атак, при которых запрашивается одноразовый пароль, генерируемый токеном, и затем оперативно передается на подлинный веб-сайт. Программные токены имеют свои преимущества: их не нужно носить с собой, они не требуют замены батарей и стоят дешевле аппаратных токенов.

Архитектура безопасности

Существует две основные архитектуры для программных токенов: криптография общего секрета и криптография с открытым ключом. В случае использования общего секрета, администратор обычно генерирует файл конфигурации для каждого конечного пользователя. Этот файл содержит имя пользователя, персональный идентификационный номер (PIN) и сам секрет. Файл конфигурации передается пользователю. Архитектура с общим секретом потенциально уязвима в нескольких аспектах. Файл конфигурации может быть скомпрометирован в случае кражи и копирования токена. При использовании программных токенов, основанных на времени, можно получить доступ к КПК или ноутбуку пользователя, перевести часы вперед и сгенерировать коды, которые будут действительны в будущем. Любой программный токен, использующий общий секрет и хранящий PIN вместе с секретом в программном клиенте, может быть украден и подвергнут оффлайн-атакам. Распространение токенов с общим секретом может быть затруднено, поскольку каждый токен по сути представляет собой отдельное программное обеспечение. Каждому пользователю необходимо получить копию секрета, что может создавать временные ограничения. Некоторые современные программные токены используют криптографию с открытым ключом, или асимметричную криптографию. Эта архитектура устраняет некоторые традиционные недостатки программных токенов, но не решает их основную проблему – возможность дублирования. PIN-код можно хранить на удаленном сервере аутентификации, а не вместе с клиентской частью токена, что делает украденный токен бесполезным без знания PIN-кода. Однако, в случае заражения вирусом, криптографический материал может быть скопирован, а PIN-код перехвачен (например, с помощью кейлоггера) при следующей аутентификации пользователя. Попытки угадать PIN-код могут быть обнаружены и зарегистрированы на сервере аутентификации, который может заблокировать токен. Использование асимметричной криптографии также упрощает реализацию, поскольку клиент токена может генерировать собственную пару ключей и обмениваться открытыми ключами с сервером.