Использование RSA-ключей из под DevTest-а, вне ключа

Вопросы по работе с электронными ключами SenseLock из операционных систем с использованием различных компиляторов

Использование RSA-ключей из под DevTest-а, вне ключа

Сообщение crypto » Вс, 17 ноя 2013 20:39

Добрый день.

DevTest при генерации ключей создает два файла - публичный ключ длиной 256 байт и приватный ключ длиной 704 байт.
Указанный размер в 256 байт не соответствует размерам структур R_RSA_PUBLIC_KEY и COS_RSA_PUBLIC_KEY.

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

Просьба подсказать как решается эта задача :o
crypto
 
Сообщения: 3
Зарегистрирован: Вс, 17 ноя 2013 20:30

Re: Использование RSA-ключей из под DevTest-а, вне ключа

Сообщение Anton » Пт, 22 ноя 2013 10:59

DevTest создаёт ключи в формате PKCS.

Код: Выделить всё

#define S4_RSA_MODULUS_LEN                      128                             /** RSA key modules length,in bytes */
#define S4_RSA_PRIME_LEN                        64                              /** RSA key prime length,in bytes*/

/** RSA public key structure*/
typedef struct {
  unsigned char modulus[S4_RSA_MODULUS_LEN];                                    /* modulus*/
  unsigned char exponent[S4_RSA_MODULUS_LEN];                                   /* public exponent*/
} S4_RSA_PUBLIC_KEY;                                                           
                                                                               
                                                                               
/** RSA private key structure*/                                             
typedef struct {                                                               
  unsigned char modulus[S4_RSA_MODULUS_LEN];                                    /* modulus*/
  unsigned char publicExponent[S4_RSA_MODULUS_LEN];                             /* public exponent*/
  unsigned char exponent[S4_RSA_MODULUS_LEN];                                   /* private exponent*/
  unsigned char prime[2][S4_RSA_PRIME_LEN];                                     /* prime factors*/
  unsigned char primeExponent[2][S4_RSA_PRIME_LEN];                             /* exponents for CRT*/
  unsigned char coefficient[S4_RSA_PRIME_LEN];                                  /* CRT coefficient*/
} S4_RSA_PRIVATE_KEY;


Соответственно S4_RSA_PUBLIC_KEY равен (128+128) 256 байт, S4_RSA_PRIVATE_KEY равен (128+128+128+(2*64)+(2*64)+64) 704 байта
Для того, чтобы использовать эти ключи в SenseLock, их надо преобразовать в формат COS функциями X_Pub2Cos и X_Pri2Cos.
Зашифровывать и расшифровывать данные, использую ключи, сгенерированные в DevTest нужно функциями RSAPublicEncrypt и RSAPrivateDecrypt.
Anton
Site Admin
 
Сообщения: 195
Зарегистрирован: Пт, 06 апр 2007 15:32

Re: Использование RSA-ключей из под DevTest-а, вне ключа

Сообщение crypto » Вс, 24 ноя 2013 21:45

Спасибо. С длиной вроде бы разобрался.

Однако, проблема с форматами, похоже, все-таки остается - когда передаю в RSAPublicEncrypt ключ из файла, сгенерированного DevTest-ом, при шифровании получаю access violation в ntdll.dll. Тоже самое происходит если передавать туда ключ, сгенерированный X_GenerateRsaKeys.
Если же использовать ключ, сгенерированный R_GenerateRsaKeys, шифрование завершается успешно.

При этом X_Cos2Pub и X_Pub2Cos для ключа, сгенерированного DevTest-ом, возвращают ошибку RE_PUBLICKEY.
crypto
 
Сообщения: 3
Зарегистрирован: Вс, 17 ноя 2013 20:30

Re: Использование RSA-ключей из под DevTest-а, вне ключа

Сообщение crypto » Вс, 01 дек 2013 12:17

В общем, пришлось разобраться самому.

Дело в том, что файл .pub, создаваемый DevTest-ом, содержит только поля modulus и exponent структуры R_RSA_PUBLIC_KEY, но не содержит первого поля - bits.
Поэтому, реальная длина R_RSA_PUBLIC_KEY - не 256 байт, а 260, а поле bits при считывании ключа из файла необходимо инициализировать значением 0x400 - длиной поля modulus в битах.
crypto
 
Сообщения: 3
Зарегистрирован: Вс, 17 ноя 2013 20:30


Вернуться в Использование SenseLock

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron