trueToken первый в мире бесплатный проект Токена ( Token ) с открытым кодом
для электронных ключей
Под электронным ключом подразумевается миниатюрное устройство,
подключаемое к USB порту компьютера и выполняющее функции хранения
данных и аутентификации владельца.
В настоящее время проект выложен в виде собранных модулей,
но в ближайшем будущем исходные коды будут открыты.
Скачать пакет ПО trueToken можно с:
http://www.softwaresecurity.org/token/truetoken_116.zip
Прошивка trueToken создана для электронного ключа Senselock EL
и превращает это устройство в полнофункциональный Токен, поддерживающий
стандарт PKCS#11.
В данной версии не изменяются PIN-коды электронного ключа, так как
защита данных возложена на криптографию внутри прошивки и зависит
от PIN-кода самого Токена. Без PIN-кода расшифровка данных, помещенных
в электронный ключ невозможна.
PKCS#11 является стандартом криптографической работы с Токенами и
разработан компанией RSA Laboratories.
Больше информации о стандартах PKCSможно найти здесь:
http://www.rsasecurity.com/rsalabs/PKCS
и в частности по стандарту PKCS#11 здесь:
http://www.rsa.com/rsalabs/node.asp?id=2133
trueToken реализован на основе стандарта PKCS#11 версия 2.11.
Основные возможности trueToken:
- 1) Работа в режиме HID-устройства без устновки каких либо драйверов;
- 2) 32 килобайта энергонезависимой памяти для хранения данных;
- 3) шифрование данных внутри Токена алгоритмом DES с использованием
PIN-кода в качестве ключа;
- 4) асимметричное шифрование по алгоритму RSA-1024;
- 5) симметричное шифрование с использованием алгоритмов DES, TrippleDES;
- 6) хэширования по алгоритму SHA-1;
- 7) функции создания и проверки цифровой подписи по алгоритму SHA_1 + RSA;
- 8) генерация ключей для асимметричного и симметричного шифрования;
Пакет trueToken состоит из :
- 1. TokenDemo.exe, с помощью которй в ключ можно заливать прошивку
trueToken а также выполнять некоторые функции PKCS#11.
- 2. SENSELOCK_PKCS.DLL библиотека интефейса стандарта PKCS#11.
- 3. SENSELOCK_PKCS_DEBUG.DLL библиотека интефейса стандарта PKCS#11, которая
создает файл PKCS.log в текущем каталоге, в который складывает протокол
работы с библиотекой.
После инициализации PIN пользователя равен "12345678", PIN администратора
"1234567812345678". Длина PIN-кода пользователя 8 символов, администратора -
24 символа.
trueToken используемый с ключом Senselock EL 64k имеет 32k для хранения
данных пользователя, открытых и закрытых ключей.
В trueToken возможно хранение следующих классов данных стандарта PKCS#11:
- +CKO_DATA
- +CKO_PUBLIC_KEY
- +CKO_PRIVATE_KEY
- +CKO_SECRET_KEY
Следующие механизмы стандарта PKCS#11 реализованы в trueToken:
CKM_RSA_PKCS_KEY_PAIR_GEN:
- +Generate Key Pair
CKM_RSA_PKCS:
- +Encrypt
- +Decrypt
- +Sign
- +Verify
- -Wrap
- -Unwrap
- -Sign and Recovery
- -Verify and Revovery
CKM_SHA1_RSA_PKCS
- +Sign
- +Verify
CKM_DES_KEY_GEN:
- +Generate Key
CKM_DES_ECB:
- +Encypt
- +Decrypt
- -Wrap
- -Unwrap
CKM_DES3_KEY_GEN:
- +Generate Key
CKM_DES3_ECB:
- +Encypt
- +Decrypt
- -Wrap
- -Unwrap
Следующие функции интерфейса стандарта PKCS#11 реализованы в trueToken:
- +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
Особенности функционирования устройства:
- 1) Первый вызов шифрования с использованием RSA ключа работает медленно,
последующие с использованием того же ключа - значительно быстрее.
Это связано с тем, что ключ шифрования кэшируется в файловой системе ключа
и остается в кэше до вызова процедуры шифрования с другим ключом.
- 2) функция InitPIN не реализована. Это вызвано тем, что шифрование данных
пользователя осуществляется в зависимости от его PIN-кода, в то время
как InitPIN выполняется в режиме SO.
- 3) функция генерации пары ключей C_GenerateKeyPair генерирует ключи внутри
DLL и затем передает их в ключ. Это вызвано особенностями файловой системы
ключа Senselock EL.
В ближайшем будущем мы планируем реализовать следующие опции:
Реализовать создания пары открытый/закрытый ключ внутри ключа Senselock EL.
Добавить механизмы:
- CKM_AES_KEY_GEN
- CKM_AES_ECB
Реализовать функции:
- C_WrapKey
- C_UnwrapKey
- C_CopyObjects