gpt4 book ai didi

openssl - 生成、签署和验证数字签名

转载 作者:行者123 更新时间:2023-12-04 18:02:52 32 4
gpt4 key购买 nike

所以这是我的项目中的一个问题。

In this task, we will use OpenSSL to generate digital signatures. Please prepare a file (example.txt) of any size. Also prepare an RSA public/private key pair. Then do the following:

  1. Sign the SHA256 hash of example.txt; save the output in example.sha256.
  2. Verify the digital signature in example.sha256.
  3. Slightly modify example.txt, and verify the digital signature again.

Please describe how you performed the above three operations (e.g., the exact commands that you used, etc.). Describe what you observed and explain your observations. Please also explain why digital signatures are useful in general.



因此,我执行以下操作。

1.创建私钥/公钥对
openssl genrsa -out private.pem 1024

2. 提取公钥。
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

3. 创建数据的哈希。
echo 'data to sign' > example.txt

openssl dgst -sha256 < example.txt > hash

4. 使用私钥将哈希签名到名为 example.sha256 的文件中
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash  > example.sha256

5.验证文件(example.txt)和数字签名(example.sha256)
openssl dgst -sha256 -verify public.pem -signature example.sha256 example.txt

完成所有这些操作后,我收到一条错误消息“ 验证失败

如果我在某处出错,请纠正我。

最佳答案

请勿使用 rsautl为了这。

根据 PKCS1.5,在对进入 RSA 操作的数据格式进行签名时,如下所示:

<padding><metadata><hash of input>

(元数据指定使用了哪个哈希函数。)

这个格式是什么 openssl dgst -verify当您尝试验证签名时正在寻找。但是,这不是您在步骤中创建的内容。

首先 openssl dgst的默认输出是结果散列的十六进制编码,而不是原始字节。

其次, rsautl相当“低级”,签名时不添加 openssl dgst -verify 的元数据期待,虽然它确实添加了填充。

这两件事一起意味着您正在使用的数据如下所示:
<padding><hex digits of hash of input>

显然这不符合 openssl dgst -verify正在等待,因此验证失败。

可以为 rsautl 创建格式正确的输入,但这会很尴尬并且涉及处理 ASN.1 细节。您也可以使用 rsautl -verify而不是 dgst -verify ,但这还需要更多细节,这意味着您使用的是非标准签名格式。

最简单的解决方案是使用 openssl dgst用于签名的创建和验证。将您的第 3 步和第 4 步(除了创建 example.txt 文件)替换为单个命令:
$ openssl dgst -sha256 -sign private.pem -out example.sha256 example.txt

这会散列数据,正确格式化散列并执行 RSA 操作。生成的文件应该正确验证 openssl dgst -verify命令。

关于openssl - 生成、签署和验证数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40565364/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com