OpenSSL ECDSA签名和验证文件


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

签署和验证的部分不起作用。


只是对传入读者的警告:根据ISO 32000的原生PDF签名不仅仅是计算整个原始文件的哈希值。因此,在当前的问题中,文件test.pdf可以被解释为具有任何其他扩展,例如.txt。这意味着将在整个原始文件上计算签名,并且它不会生成本机PDF签名,即Adobe Acrobat可以解释的签名类型。
Jaime Hablutzel

Answers:


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

在使用引擎的情况下,如何在OpenSSL会话中执行此操作?
lalebarde 2014年

3

由于-ecda-with-SHA1不在dgst的man中,并且没有-ecda-with-SHA256我建议:

标志 :

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

验证:

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


不行。$ openssl dgst -sha1 -sign private.pem test.pdf > signature.bin Error Signing Data 8123:error:0606B06E:digital envelope routines:EVP_SignFinal:wrong public key type:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/crypto/evp/p_sign.c:99:
Tankman六四

1

或者,如果您需要引擎,也可以在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.