以下是我尝试做所有事情的方式:
生成密钥:
openssl ecparam -genkey -name secp256r1 -noout -out privkeyv1.pem
生成要签名的“消息”:
echo -n "Hello World" > test.txt
我尝试了两种方法来签署这条消息。但两种方法都导致了相同的、意料之外的输出结果。
第一种方法 - 生成测试文件的sha256哈希值,然后对其进行签名:
sha256sum test.txt | cut -f 1 -d " " > hash
使用 pkutil 签名
openssl pkeyutl -sign -in hash -inkey privkeyv1.pem -out test_sig_meth1
方法2:使用openssl dgst签名
openssl dgst -sha256 -binary -sign privkeyv1.pem -out test_sig_meth2 test.txt
问题:这是xxd -p -c 256 test_sig_meth1
的输出结果:
3045022000a86fb146d5f8f6c15b962640bc2d1d928f5e0f96a5924e4db2853ec8b66fb002210085431613d0a235db1adabc090cc1062a246a78941972e298423f4b3d081b48c8
这是xxd -p -c 256 test_sig_meth2
的输出结果:
30450220693732cd53d9f2ba3deae213d74cdf69a00e7325a10ddc6a4445ff2b33f95e62022100b6d2561e3afba10f95247ed05f0c59620dc0913f0d798b4148e05c4116b6384e
可以看到,这两种方法都会生成一些字节,看起来像是头部字节(可能更长的30450220
),但我不确定它们是用来做什么的,也不知道如何删除它们。供参考,这是在密码芯片上生成的同样方法的签名。如果去掉末尾的空字节填充,它是64字节。 4677AD09F2AF49D7445ED5D6AC7253ADC863EC6D5DB6D3CFBF9C6D3E221D0A7BA2561942524F46B590AEE749D827FBF80A961E884E3A7D85EC75FE48ADBC0BD00000000000000000000000
问题:如何使用openssl生成一个64字节的原始(未编码,没有头部)ECDSA签名,以便用于此方案?