Срок действия подписи OpenSSL ECDSA

Из документации OpenSSL

Создание подписи ECDSA для заданного хэш-значения SHA-256 с использованием именованной кривой prime256v1 (также известной как P-256).

Второй шаг: вычислить подпись ECDSA хеш-значения SHA-256 с помощью ECDSA_do_sign ():

sig = ECDSA_do_sign(digest, 32, eckey);
if (sig == NULL) {
   /* error */
}

или используя ECDSA_sign ():

unsigned char *buffer, *pp;
int            buf_len;
buf_len = ECDSA_size(eckey);
buffer  = OPENSSL_malloc(buf_len);
pp = buffer;
if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0) {
   /* error */
}

Третий шаг: проверьте созданную подпись ECDSA с помощью ECDSA_do_verify ():

ret = ECDSA_do_verify(digest, 32, sig, eckey);

или используя ECDSA_verify ():

ret = ECDSA_verify(0, digest, 32, buffer, buf_len, eckey);

и, наконец, оцените возвращаемое значение:

if (ret == 1) {
   /* signature ok */
} else if (ret == 0) {
   /* incorrect signature */
} else {
   /* error */
}

EOF

Это подводит меня к пониманию того, что мне нужно проверять каждую подпись, которую я создаю с помощью ECDSA_do_sign или ECDSA_sign, не так ли? Может ли случиться так, что созданная подпись недействительна?


person user14416    schedule 06.04.2016    source источник
comment
Я считаю, что краткий ответ на ваш вопрос - нет. Если вы только что создали подпись, нет необходимости проверять, является ли подпись, созданная libssl / libcrypto, действительной. Ссылка (проверьте свою ссылку, она недействительна) на man page с примером вашего сайта (например, ECDSA_verify - это общий пример того, как вы могли бы использовать каждую из функций ecdsa, не предназначенный специально для того, чтобы означать, что вы должны использовать каждую из них, по порядку, каждый раз один из них используется.   -  person David C. Rankin    schedule 15.08.2016


Ответы (1)


Из раздела NIST PUB 186-4 - Стандарт цифровой подписи 4.7:

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

(где подписывающее лицо является создателем подписи)

person Nimrod Morag    schedule 15.08.2016
comment
Старый великий охотник, пожалуйста, расскажите подробнее, как стандарт NIST применим к вопросу OP относительно поведения libssl и libcrypto? - person David C. Rankin; 15.08.2016
comment
OP спросил, нужно ли ему проверять каждую созданную им подпись (потому что он видел этот шаблон в документации OpenSSL). Я посоветовал ему / ей ознакомиться со стандартом, который OpenSSL должен реализовывать, в котором говорится, что вы можете проверять свою подпись после ее создания. - person Nimrod Morag; 15.08.2016
comment
То, что опубликовано в качестве вопроса, является примером из справочной страницы openssl, например ECDSA_verify. Стандарт NIST неприменим к заданному вопросу. Я не голосовал против, потому что похоже, что вы пытались помочь. Я просто указывал, что ответ и вопрос - не совпадают. - person David C. Rankin; 15.08.2016