ПРОЕКТЫ: trueToken - токен с открытым исходным кодом

Что такое токен?

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

Основным назначением токенов является строгая двухфакторная аутентификация доступа, защита электронной переписки и финансовых транзакций.

Созданный нами исполняемый модуль trueToken превращает электронный ключ SenseLock в полноценный токен, поддерживающий стандарт PKCS#11 версии 2.11.

PKCS#11 является стандартом криптографической работы с токенами и разработан компанией RSA Laboratories. Узнать более подробно о стандарте PKCS#11.

Электронный ключ защиты от взлома SenseLock RTC Электронный ключ защиты от взлома SenseLock Genii

Описание возможностей

  • Работа в режиме HID-устройства без установки каких-либо дополнительных драйверов. Данный режим поддерживается всеми операционными системами MS Windows, начиная с MS Windows 98, а также Linux (при соответствующей настройке).
  • 32 кб энергонезависимой памяти для хранения данных пользователя.
  • Дополнительное шифрование данных внутри токена алгоритмом 3DES с использованием PIN-кода в качестве ключа.
  • Асимметричное шифрование данных алгоритмом RSA-1024 внутри токена.
  • Симметричное шифрование данных алгоритмами DES и 3DES внутри токена.
  • Вычисление хэша данных по алгоритму SHA-1.
  • Создание и проверка цифровой подписи алгоритмами RSA-1024 и SHA-1.
  • Генерация ключей для асимметричного и симметричного шифрования.

Преимущества trueToken

  • Открытый исходный код гарантирует отсутствие закладок и "инженерных паролей".
  • Возможность оперативного внесения любых изменений в работу токена.
  • Возможность добавления новых алгоритмов шифрования, таких как ГОСТ 28147-89 и AES.
  • Работа в режиме HID-устройства без установки каких-либо дополнительных драйверов.
  • Токен основан на электронном ключе SenseLock, имеющем высокозащищенный чип, используемый при производстве смарт-карт и поддерживающий аппаратное выполнение алгоритмов RSA-1024, DES, 3DES и SHA-1. Данный чип производства компании Philips сертифицирован по стандарту EAL5+.

Особенности функционирования trueToken

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

Не реализована функция InitPIN. Это вызвано тем, что шифрование данных пользователя осуществляется в зависимости от его PIN-кода, в то время как InitPIN выполняется в режиме SO.

Создание пары ключей функцией C_GenerateKeyPair происходит в DLL и уже затем они передаются в токен. Это вызвано особенностями файловой системы электронного ключа SenseLock.

Скачать

Версия исполняемого модуля: 1.16
Версия DLL: 1.16
Дата последнего обновления: 27 февраля 2009

В пакет входят:

  • TokenDemo.exe - исполняемый файл, с помощью которого в электронноый ключ SenseLock можно записать прошивку токена, а также выполнить некоторые функции PKCS#11.
  • SENSELOCK_PKCS.DLL - библиотека интерфейса стандарта PKCS#11 для работы с trueToken.
  • SENSELOCK_PKCS_DEBUG.DLL - отладочная версия библиотеки интерфейса стандарта PKCS#11 для работы с trueToken. При работе с ней создается файл PKCS.log в текущем каталоге, куда записывается протокол работы с библиотекой.

После инициализации токена PIN-код пользователя равен "12345678" (8 символов), а PIN-код администратора "123456781234567812345678" (24 символов).

Скачать проект trueToken

Если вы хотите использоваьт trueToken в своих проектах и вам необходима дополнительная информация, воспользуйтесь нашей контактной информацией.

Развитие

Планируется реализовать следующие опции:

  • Создание пары открытый/закрытый ключ внутри электронного ключа SenseLock.
  • Добавить механизмы:
    CKM_AES_KEY_GEN
    CKM_AES_ECB
  • Реализовать функции:
    C_WrapKey
    C_UnwrapKey
    C_CopyObjects
  • Добавить поддержку алгоритма шифрования ГОСТ 28147-89.
  • Добавить поддержку PIN-кода "опасности". При его вводе вместо основного, все хранимые в ключе данные будут уничтожаться без возможности восстановления.

Поддерживаемые классы данных стандарта PKCS#11

При использовании trueToken с электронным ключом SenseLock оснащенным 64 кб памяти, для хранения данных пользователя доступно 32 кб.

НазваниеРеализация
CKO_DATAДа
CKO_PUBLIC_KEYДа
CKO_PRIVATE_KEYДа
CKO_SECRET_KEYДа

Поддерживаемые механизмы стандарта PKCS#11

НазваниеРеализация
CKM_RSA_PKCS_KEY_PAIR_GEN
  Generate Key PairДа
CKM_RSA_PKCS
  EncryptДа
  DecryptДа
  SignДа
  VerifyДа
  WrapНет
  UnwrapНет
  Sign and RecoveryНет
  Verify and RecoveryНет
CKM_SHA1_RSA_PKCS
  SignДа
  VerifyДа
CKM_DES_KEY_GEN
  Generate KeyДа
CKM_DES_ECB
  EncryptДа
  DecryptДа
  WrapНет
  UnwrapНет
CKM_DES3_KEY_GEN
  Generate KeyДа
CKM_DES3_ECB
  EncryptДа
  DecryptДа
  WrapНет
  UnwrapНет

Поддерживаемые функции интерфейса стандарта PKCS#11

НазваниеРеализация
C_InitializeДа
C_FinalizeДа
C_InitTokenДа
C_GetInfoДа
C_GetFunctionListДа
C_GetSlotListДа
C_GetSlotInfoДа
C_GetTokenInfoДа
C_GetMechanismInfoДа
C_GetMechanismListДа
C_InitPINНет
C_SetPINДа
C_OpenSessionДа
C_CloseSessionДа
C_GetSessionInfoДа
C_LoginДа
C_LogoutДа
C_CreateObjectДа
C_CopyObjectДа
C_DestroyObjectДа
C_GetObjectSizeДа
C_GetAttributeValueДа
C_SetAttributeValueДа
C_FindObjectsInitДа
C_FindObjectsДа
C_FindObjectsFinalДа
C_WaitForSlotEventДа
C_SeedRandomДа
C_GenerateRandomДа
C_GenerateKeyДа
C_GenerateKeyPairДа
C_WrapKeyНет
C_UnwrapKeyНет
C_EncryptДа
C_EncryptInitДа
C_EncryptUpdateДа
C_EncryptFinalДа
C_DecryptДа
C_DecryptInitДа
C_DecryptUpdateДа
C_DecryptFinalДа
C_DigestДа
C_DigestInitДа
C_DigestUpdateДа
C_DigestFinalДа
C_SignДа
C_SignInitДа
C_SignUpdateДа
C_SignFinalДа
C_VerifyДа
C_VerifyInitДа
C_VerifyUpdateДа
C_VerifyFinalДа
C_GetOperationStateНет
C_SetOperationStateНет
C_CopyObjectНет
C_DigestKeyНет
C_SignRecoverInitНет
C_SignRecoverНет
C_VerifyRecoverInitНет
C_VerifyRecoverНет
C_DigestEncryptUpdateНет
C_DecryptDigestUpdateНет
C_SignEncryptUpdateНет
C_DecryptVerifyUpdateНет
C_DeriveKeyНет
C_CancelFunctionНет
C_GetFunctionStatusНет