繁体   English   中英

使用bouncycastle生成经过身份验证的CMSEnvelopedData消息

Generate authenticated CMSEnvelopedData Messages with bouncycastle

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用密码加密数据并将其存储在ASN.1编码的CMS消息中(使用C#和BouncyCastle 1.4)

我的代码似乎有两个问题:

  • 数据似乎没有使用HMAC签名,因此当我篡改encodeData(通过启用注释行)时,解密仍然成功。

  • 当我解密自己篡改过的数据时,我得到了贝克损坏的纯文本。 但是, 只有两个明文数据块被破坏。 这似乎表明加密实际上并未使用CBC模式。

    编辑 :忽略第二点, 这正是CBC应该如何工作的

这是我正在测试的内容:

public void TestMethod1()
{
    byte[] data = new byte[1024]; // plaintext: a list of zeroes

    CmsEnvelopedDataGenerator generator = new CmsEnvelopedDataGenerator();
    CmsPbeKey encryptionKey = new Pkcs5Scheme2PbeKey("foo", new byte[] { 1, 2, 3 }, 2048);
    generator.AddPasswordRecipient(encryptionKey, CmsEnvelopedDataGenerator.Aes256Cbc);
    CmsProcessableByteArray cmsByteArray = new CmsProcessableByteArray(data);
    CmsEnvelopedData envelopeData = generator.Generate(cmsByteArray, CmsEnvelopedDataGenerator.Aes256Cbc);

    byte[] encodedData = envelopeData.GetEncoded();

    // encodedData[500] = 10; // tamper with the data

    RecipientID recipientID = new RecipientID();
    CmsEnvelopedData decodedEnvelopeData = new CmsEnvelopedData(encodedData);
    RecipientInformation recipient = decodedEnvelopeData.GetRecipientInfos().GetFirstRecipient(recipientID);

    byte[] data2 = recipient.GetContent(encryptionKey);

    CollectionAssert.AreEqual(data, data2);
}

我究竟做错了什么? 写这个的正确方法是什么?

1 个回复

要将HMAC添加到CMS消息中,必须使用AuthenticatedData结构。

我对Bouncy Castle并不是特别熟悉,但是粗略地看一下API,我会说它不支持AuthenticatedData。 实际上,它似乎仅支持SignedData进行身份验证。

因此,您的选择似乎是:

  1. 使用另一个库(或编写您自己的代码)来处理AuthenticatedData结构。
  2. 计算HMAC并以非标准方式(以专有属性或带外)提供。
  3. 请将SignedData与RSA密钥对一起使用。
9 如何为NTLM身份验证生成type3消息?

我想从Linux服务器发送测试邮件。 在telnet和ehlo之后,我使用AUTH NTLM,然后发送了type1消息,得到了响应,但我不知道如何形成类型3消息才能成功进行身份验证。 我是否需要使用第2类消息中的某些信息? 这是一个示例https://docs.microsoft.com/ ...

暂无
暂无

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

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