(2012-08-17 15:52:19 отредактировано 929121)

RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_Decrypt+CKM_RSA_PKCS = bug

C_Decrypt
(
  CK_SESSION_HANDLE hSession,           /* session's handle */
  CK_BYTE_PTR       pEncryptedData,     /* ciphertext */
  CK_ULONG          ulEncryptedDataLen, /* ciphertext length */
  CK_BYTE_PTR       pData,              /* gets plaintext */
  CK_ULONG_PTR      pulDataLen          /* gets p-text size */
);

при использовании механизма
CK_MECHANISM ckmDecMech = {CKM_RSA_PKCS, NULL_PTR , 0};
модифицирует данные лежащие в pEncryptedData.

в pkcs-11v2-20.pdf по поводу немодифицируемости входных данных конечно нислова не сказано, но ИМХО это неправильно.

(2012-08-17 16:33:27 отредактировано Алексей Караваев)

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_Decrypt+CKM_RSA_PKCS = bug

Спасибо за сообщение, оно будет передано разработчикам.

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_Decrypt+CKM_RSA_PKCS = bug

Алексей Караваев пишет:

Спасибо за сообщение, оно будет передано разработчикам.

Спасибо за оперативность :)

в догонку еще один момент про C_Decrypt:

если вызывать его при тех же условиях, с pData = NULL_PTR (для определения размера декодированных данных), он возращает в pulDataLen число сопоставимое с размером ключа, даже если реально данных закодировано значительно меньше.

т.е. например, при использовании ключа размером 2048 бит, после вызова
C_Decrypt(hSession, in_buf, in_buf_len, NULL_PTR, &DataLen);
получаем DataLen=0x100 (или 256 байт, или 2048 бит)

дальше вызываем
C_Decrypt(hSession, in_buf, in_buf_len, out_buf, &DataLen);
и получаем в DataLen реальный размер данных (в моем случае заметно меньше 256 байт),
в out_buf декодированные данные, а в in_buf  - выше обозначенную порчу данных.

Но по поводу данной особенности я не уверен является ли это ошибкой или просто особенностью.

кстати говоря, могу даже больше сказать, если сразу вызывать
C_Decrypt(hSession, in_buf, in_buf_len, out_buf, &DataLen);
и передать в DataLen размер меньше 0x100 (и соответственно буфер меньшего размера) - получаем ошибку о недостаточности размера буфера, хотя данных опять таки на выходе гарантированно заметно меньше.

(2012-08-31 18:14:16 отредактировано Алексей Караваев)

Re: RutokenWeb+rtPKCS11ECP.dll(v.1.0.41.0)+C_Decrypt+CKM_RSA_PKCS = bug

В целом спасибо за информацию.

Абзац 11.2.1 документа pkcs-11v2-30b-d6.pdf разрешает криптографическим функциям при передаче им нулевого указателя на выходной буфер возвращать требуемый размер буфера "слегка более фактически необходимого". Понятие "слегка больше" ("somewhat exceed") не уточняется, что оставляет свободу для трактовок. В нашем случае, разница не превосходит размера используемого RSA-ключа.

Как бы там ни было, информация передана разработчикам. Ещё раз спасибо.