繁体   English   中英

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

[英]Check if the file is correct using sha1withRsa via openssl functions

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

主要思想:某公司A创建file_data,然后使用SHA1获取file_data的哈希,并使用RSA私钥对该哈希进行加密并获取file_signature。 然后,公司A向我发送了file_data和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. 现在,我必须使用SHA1函数hash_2加载file_data并获取其哈希,必须使用什么函数? SHA1()SHA1_Init, SHA1_Update, SHA1_Finish吗?
  7. 假设我得到hash_1和hash_2,如何使用memcmp比较它们?
  8. 假设我比较它们,如果它们相等,则可以使用file_data。

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

谢谢你的帮助! ps:抱歉我的英语;)。

如果获得128字节的file_signature,则可能不是ASN.1编码的。 128位正好是1024位密钥的密钥长度(在当今的低端,请查看keylength.com)。 如果使用RSA,则不会直接对哈希进行加密:首先将其包装在ASN.1结构中,然后将其填充,所有操作均根据PKCS#1 v1.5(Google it)。

通常,您不会将散列与RSA加密分开进行。 像openssl这样的库将包含在自动计算哈希值的情况下执行验证的功能(毫无疑问,这将是openssl_verify())。 这些功能还将为您进行比较。

请注意,您将需要建立对公共密钥的信任,否则攻击者可能只生成一个随机密钥对,并向您发送不同的公共密钥以及攻击者签名的数据。 通常,预先使用直接通信或使用PKI基础结构(证书链)来信任公用密钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM