gpt4 book ai didi

通过 openssl 函数使用 sha1withRsa 检查文件是否正确

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:05 25 4
gpt4 key购买 nike

你好,我有file_data(xml格式)和file_signature(ASN1 DER),还有证书(X509 ASN1 DER)。我想检查 file_data 是否正确,但我遇到了一些问题。我在做什么:

主要思想:某公司A创建file_data,然后使用SHA1得到file_data的hash,并使用RSA私钥加密这个hash,得到file_signature。然后A公司把file_data和file_signature以及证书发给我。我从证书获取公钥获取 file_signature 并使用公钥解密 file_signature 并获取 hash_1。然后我获取 file_data 并使用 SHA1 获取 hash_2。如果 hash_1 和 hash_2 相等,我可以信任 file_data 的内容,对吗?

实现:

  1. 加载证书:d2i_X509_fp() 函数。现在我有证书了。
  2. 获取证书的公钥:X509_extract_key,现在我有了公钥。
  3. 现在我想加载 file_signature 以使用公钥对其进行解密,但是 file_signature 具有 ASN1 DER 格式,我该如何加载它,我应该使用 OpenSSL 中的什么函数?
  4. 假设我读取了 file_signature,现在我必须使用我的公钥对其进行解密,是否有用于此目的的 API?
  5. 假设我解密 file_signature 并获得 hash_1。
  6. 现在我必须加载 file_data 并使用 SHA1 函数 hash_2 获取它的哈希值,我必须使用什么函数? SHA1(),或 SHA1_Init、SHA1_Update、SHA1_Finish
  7. 假设我得到 hash_1 和 hash_2,我必须如何使用 memcmp 比较它们?
  8. 假设我比较它们,如果它们相等,我可以使用 file_data。

另一个问题是 file_signature 是 128 字节 len,当我解密它时,我得到 128 字节 hash_1(我是否正确),但是当我得到 file_data hash_2 的哈希时,它的长度只有 20 字节,所以我如何比较它们,或者我误解了什么?

感谢您的帮助!附:对不起我的英语不好;)。

最佳答案

如果您得到一个 128 字节的 file_signature,那么它可能不是 ASN.1 编码的。 128 位恰好是 1024 位 key 的 key 长度(如今的低端,请查看 keylength.com)。如果使用 RSA,则不会直接加密散列:首先将其包装在 ASN.1 结构中,然后根据 PKCS#1 v1.5(谷歌)进行填充。

通常您不会在 RSA 加密之外单独执行散列。像 openssl 这样的库将包含在自动计算散列的地方执行验证的函数(毫无疑问,这将是 openssl_verify())。这些功能也将为您进行比较。

请注意,您需要建立对公钥的信任,否则攻击者可能会生成一个随 secret 钥对并向您发送一个不同的公钥以及攻击者签名的数据。通常,公钥是通过事先直接通信或使用 PKI 基础设施(证书链)来信任的。

关于通过 openssl 函数使用 sha1withRsa 检查文件是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5631692/

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