6

Я хотел бы подписать и проверить PDF с эллиптической кривой. Я получил некоторый код, но он не работает.

Создать закрытый ключ:

openssl ecparam -genkey -name secp384r1 -noout -out private.pem

Создать открытый ключ:

openssl ec -in private.pem -pubout -out public.pem

Файл подписи:

openssl dgst -ecdsa-with-SHA1 test.pdf > hash openssl dgst
openssl dgst -ecdsa-with-SHA1 -inkey private.pem -keyform PEM -in hash > signature

Проверить файл:

openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin data

Часть для подписи и проверки не работает.

3 ответа3

7

Я думаю, что вы на самом деле не подписываете файл, а подписываете хеш.

Я попробовал следующее, и это дало мне желаемый результат:

Create signature:
openssl dgst -ecdsa-with-SHA1 -sign private.pem test.pdf > signature.bin

Verify signature:
openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin test.pdf
3

Так как -ecda-with-SHA1 отсутствует в человеке для dgst и нет -ecda-with-SHA256, я бы порекомендовал:

Знак :

openssl dgst -sha1 -sign private.pem test.pdf > signature.bin

Проверить:

openssl dgst -sha1 -verify public.pem -signature signature.bin test.pdf
0

Или, если вам нужен движок, вы также можете сделать это в сеансе OpenSSL:

openssl
OpenSSL> engine -vvvv -t dynamic -pre SO_PATH:someengine.so -pre ID:someengine -pre LIST_ADD:1 -pre LOAD
OpenSSL> dgst -ecdsa-with-SHA1 -out signature.bin -sign private.pem test.pdf
OpenSSL> dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin test.pdf

dgst также предлагает опцию -engine , но здесь она использует загруженный ранее движок. Если требуется, просто добавьте -engine someengine .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .