trueToken (c) Seculab.ru

DLL : версия 1.16
Прошивка : версия 1.16
Дата : 27 февраля 2009
Автор : Евгений Койнов, eugene@seculab.ru
Скачать : truetoken_116.zip
Language : English Russian

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 состоит из :

    Пакет 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