Hash 带衬垫的PK11_标志

Hash 带衬垫的PK11_标志,hash,cryptography,mozilla,pkcs#11,nss,Hash,Cryptography,Mozilla,Pkcs#11,Nss,从中可以看出 对于低级签名,请使用PK11_Sign()。这两种功能都可以 PKCS#1包装数据。PK11_标志不执行BER 散列的编码(在SGN_u函数中完成) 从代码API /* * sign a hash. The algorithm is determined by the key. */ SECStatus PK11_Sign(SECKEYPrivateKey *key, SECItem *sig, const SECItem *hash) Q1)我的PK11_签名函数导致签名无

从中可以看出

对于低级签名,请使用PK11_Sign()。这两种功能都可以 PKCS#1包装数据。PK11_标志不执行BER 散列的编码(在SGN_u函数中完成)

从代码API

/*
 * sign a hash. The algorithm is determined by the key.
 */
SECStatus
PK11_Sign(SECKEYPrivateKey *key, SECItem *sig, const SECItem *hash)
Q1)我的PK11_签名函数导致签名无效。哈希->数据的输入是来自“Hello SHA-256”的SHA-256的A7CD893B31B0EA44ED1AA7CAFCDA6587444CC5A02EF26FECCEAE9A8BECB83A0哈希。数据->len为64。然后,代码执行十六进制到二进制的转换。然后我将这些信息传递给PK11_标志。我有没有漏步

Q2)哈希的BER编码是什么意思?如果我们在hextecimel中有一个hash字符串,那么我们将其转换为hash的二进制,即BER?或者这个句子的意思是,它只支持DER


Q3)任何类似于上述操作的PK11_标志样本?

我无法回答Q1,因为我不熟悉NSS API,但我认为Q2很容易回答

当您按照PKCS#1()中定义的RSASSA-PKCS1-v1#5签名方案创建签名时,您需要首先计算哈希值并将其放入DigestInfo结构中:

DigestInfo ::= SEQUENCE {
    digestAlgorithm AlgorithmIdentifier,
    digest OCTET STRING
}

然后需要对DigestInfo进行BER编码并使用私钥进行加密。因此,您不仅要加密原始散列值,还要加密BER编码的DigestInfo结构,该结构包含原始散列值和散列算法OID。

Q1:是的,您需要使用SHA-256 OID的ASN.1/DER编码加上散列值本身的标记和长度来预加密散列值

Q2:BER是ASN.1的基本编码规则,它是根据ASN.1定义对数据进行的二进制标记长度值(TLV)编码。DER是BER的标准子集。你肯定应该在这里使用DER

问题3:没有,但我认为我可以为您加快速度,因为创建甚至学习ASN.1相当耗时。由于OID(哈希算法的标识符)和哈希长度保持静态,因此DER编码也是静态的。因此,您可以在您选择的散列中添加以下十六进制的前缀


RSA PKCS#1 2.1(和2.2)第9.2节注1:

  • 对于附录B.1中提到的六个散列函数,DER DigestInfo值的编码T等于以下值:


  • 请注意,如果您正确地执行了所有操作,那么您应该能够在运行时将所有操作直接作为二进制处理;不需要先将散列的输出编码为二进制,然后再重新编码。

    谢谢您提供的信息。最后我得到了一个有效的签名,基于你在第一季度的答案。很高兴这有帮助,如果你找到适合你的答案,别忘了点击“接受”(左边的V标记)。我注意到你到目前为止还没有任何答案,这表明你要么不知道,要么还没有得到任何有用/完整的答案。
      MD2:     (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04
                   10 || H.
      MD5:     (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04
                   10 || H.
      SHA-1:   (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H.
      SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00
                   04 20 || H.
      SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00
                   04 30 || H.
      SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00
                      04 40 || H.