gpt4 book ai didi

java - 无签名数据和签名数据

转载 作者:行者123 更新时间:2023-12-01 23:39:53 26 4
gpt4 key购买 nike

我必须签名并将数据发送到服务器。使用 Bouncy caSTLe 我生成了 CMSSignedData 对象。我是密码学新手,据我了解,我必须将签名的数据以及签名的数据发送到服务器。我必须将其作为单个文件发送。我可以获取使用签名的数据

CMSProcessableByteArray cpby = (CMSProcessableByteArray) sigData.getSignedContent() ;
byte[] data = (byte[])cpby.getContent();

这里 sigData 是 CMSSignedData 对象

我认为代码

byte[] signed = sigData.getEncoded() 

获取字节数组中的签名数据。

问题是创建包含数据和签名数据的文件的一般方法是什么。我只是将两个字节数组相加吗?数组signed[]也包含数据吗?如果是这样,我如何从数组signed[]中检索数据。我问这个问题是因为我需要遵循类似的过程来检索数据和签名数据,以验证服务器响应的过程。

最佳答案

您使用的“签名”类型基于 CMS (以前称为“PKCS#7”)。这是一种标准格式,用于通过加密或签名或两者来封装某些数据;这是递归的,因此您可以嵌套多个级别。

CMS 对象是由这段 ASN.1 定义的 ContentInfo 结构:

  ContentInfo ::= SEQUENCE {
    contentType ContentType,
content [0] EXPLICIT ANY DEFINED BY contentType }

  ContentType ::= OBJECT IDENTIFIER

当对象描述签名时,contentType字段包含“签名数据”的标识符,contentSignedData结构体定义为:

  SignedData ::= SEQUENCE {
    version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }

实际的加密签名位于 signerInfos 对象中,而 encapContentInfo 可能包含已签名的数据。这就是重点。 EncapsulatedContentInfo 结构是:

  EncapsulatedContentInfo ::= SEQUENCE {
    eContentType ContentType,
eContent [0] EXPLICIT OCTET STRING OPTIONAL }

看到“可选”了吗?这意味着 CMS 对象可能包含也可能不包含已签名的数据。

当 CMS 对象包含已签名的数据时,您最终会得到一个单个对象,编码为字节数组(这就是使用 ASN.1 的要点:所有这些对象都可以随意编码和解码)。另一方面,如果 CMS 对象包含已签名的数据,则这是一个分离签名。当然,如果没有要签名的数据的副本,就无法执行签名的验证,因此如果签名是“分离的”,那么必须有其他方式来传达数据本身给验证者。

分离签名在 S/MIME 受加密保护的电子邮件中很受欢迎(S/MIME可以被描述为“电子邮件中的CMS对象”),因为分离的签名然后作为电子邮件附件发送,而电子邮件文本内容保持不变:因此,电子邮件的内容仍然可以被软件读取完全不知道 S/MIME 是什么,并且无法从 CMS-with-data 对象中提取数据。

就您而言,您必须提供验证者完成其工作所需的任何内容。这应该已经在您当前正在实现的协议(protocol)中定义。协议(protocol)可能会告诉您要签名的数据已经可以通过另一个 channel 供验证者使用;或者它可能会告诉您必须使用非分离的 CMS 签名对象。

如果没有明确定义的协议(protocol),而你只是随手制定协议(protocol),那么这将导致灾难。我强烈希望情况并非如此。密码学很难使用,主要是因为无法测试你是否正确地使用了它。

关于java - 无签名数据和签名数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129951/

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