ПРОЕКТЫ: trueToken - токен с открытым исходным кодом |
Что такое токен?
Токен (англ. token) - персональный электронный идентификатор доступа к информационным ресурсам, позволяющий безопасно хранить и использовать пароли, цифровые сертификаты, ключи шифрования и электронно-цифровые подписи (ЭЦП).
Основным назначением токенов является строгая двухфакторная аутентификация доступа, защита электронной переписки и финансовых транзакций.
Созданный нами исполняемый модуль trueToken превращает электронный ключ SenseLock в полноценный токен, поддерживающий стандарт PKCS#11 версии 2.11.
PKCS#11 является стандартом криптографической работы с токенами и разработан компанией RSA Laboratories. Узнать более подробно о стандарте PKCS#11.

Описание возможностей
- Работа в режиме 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 в своих проектах и вам необходима дополнительная информация, воспользуйтесь нашей контактной информацией.
Развитие
Планируется реализовать следующие опции:
- Создание пары открытый/закрытый ключ внутри электронного ключа 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 | Нет |