- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发使用 AES-CCM 模式的安全应用程序。申请要求如图。
我对解密感到震惊,因为我的应用程序在解密时也需要一个 TAG。
根据 openssl EVP Authenticated Encryption and Decryption ,我们应该提供 TAG 以及 TAG 长度,如下所示。
/* Set expected tag value. */
if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, 14, tag))
handleErrors();
如果我不设置标签信息,结果将全为零。我已经在 e_aes.c at line 3835 了解了 AES-CCM 的实现细节。 ,并发现如果预期标签与生成的标签匹配,则只更新结果。 (这是我的理解)
能否建议我如何处理这个问题。
编辑 我已经根据要求创建了图像。实际上,在客户端代码中,它们正在存储加密后的 TAG 值,并与描述时生成的 TAG 进行比较。即,比较发生在客户端代码中。所以我需要将解密中生成的TAG还原到客户端代码。
最佳答案
CCM(带 CBC-MAC 的计数器)在 RFC3610 中定义. EVP_Authenticated_Encryption_and_Decryption 中描述的带有 EVP 的 CCM 实现如下:
加密:在 encryption 期间标签已生成:
int ccm_encrypt(...){
...
/* Set tag length */
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, 14, NULL);
...
/* Get the tag */
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_GET_TAG, 14, tag); // tag is generated here
...
}
然后,标签将与密文一起传送给收件人。
解密:在decryption期间接收到的标签用于身份验证:
int ccm_decrypt(...){
...
/* Set expected tag value. */
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, 14, tag); // tag is provided here
...
/* ...obtain the plaintext output...*/
ret = EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len); // tag is verified here
...
}
解密仅在解密中使用的标签与加密期间创建的标签相同时才有效。否则 EVP_DecryptUpdate
返回 0 并为解密数据提供零值数组。
我不知道图像的来源,但 IMO 使用 EVP_aes_256_ccm()
解密 AES-CCM 的描述不正确。
编辑:
使用EVP_aes_256_ccm()
时,必须知道加密标签才能解密(如上所述),因为解密和身份验证在一个步骤中完成。
当然,解密和认证也可以分两步进行:第一步,使用AES-CTR进行解密,即确定明文和标签(CBC-MAC 1) .在第二步中,使用 CBC-MAC 从明文中再次计算标签 (CBC-MAC 2)(就像在加密过程中所做的那样)。如果两个标签(CBC-MAC 1 和 CBC-MAC 2)相同,则身份验证成功。
然而,据我所知,没有直接支持此方法的 EVP 方法。然而,CCM只是一个组合AES-CTR 和 CBC-MAC,根据 RFC3610 组合.因此,您也可以通过这种方式实现 CCM 并使用AES-CTR 和 CBC-MAC 所需的 EVP_methods:
EVP_aes_256_ctr()
。EVP_aes_256_cbc()
。EVP_aes_256_cbc()
替换为 EVP_aes_256_ctr()
时。EVP_aes_256_cbc()
之外,这里不需要其他 EVP 方法。由于 AES-CTR 和 AES-CBC 已经在各自的 EVP 方法中实现,因此这两种机制的输入格式需要付出最大的努力。可以在 NIST Special Publication 800-38C 中找到很好的描述.需要注意的是今天AES-GCM已成为最流行的 AE(AD) 模式,参见例如this post .
关于c++ - 如何使用openssl获取AES-CCM解密的Tag信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209532/
我们与一位客户存在某种问题,该客户认为我们发送的 XML 文件中的两个版本的空标记之间存在语义差异(纯 XML 没有 HTML ..)。 他们期望: 我们发送: 我
我想计算文本中 pp/np/vp 的数量,但我不知道如何在 openNLP chunker 中识别 PP-tags/NP-tags/VP-tags?我已经尝试过这段代码,但它不起作用。 Chunker
从我正在阅读的代码的上下文来看,它看起来像 $("")创建一个标签,其中 $('')是一个搜索标签的选择器。这里发生了什么?实际上,我可能没有掌握第二个语法,但我确信我已经完成了 $('idName'
我正在使用 Builder::XmlMarkup 创建 xml。我想创建一个没有内容的标签,因为 api 强制我创建它。如果我使用博客 xml.tag do end 我得到了我想要的 但我希望它更短
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Using the XHTML closing slash (/) on normal tags? Are
默认情况下, someXmlWriter.WriteElementString("my-tag", someString); 产生 我环顾四周XmlWriterSettings强制作者生成 的可能选
如何修改tag-it ui插件https://github.com/aehlke/tag-it (版本 v2.0)因此它只允许选择 x 个标签,以及如何仅允许“availableTags-option
我能够解析这样的内容: value 通过: File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = Doc
我不太确定如何编写这个查询,它可以在一个查询中完成。案例如下: 我需要选择标签名称列表,并为每个标签获取最近标记的专辑信息。这意味着,如果用户创建名为“Pamela Anderson”的专辑并将该专辑
这个问题在这里已经有了答案: Where should I put tags in HTML markup? (21 个回答) JavaScript at bottom/top of web pa
Django 2 by Example 中的教程,我不明白: step (2): Why is `Count('tags')` **not** counting the total number of
我是 jekyll 的新手,正在构建我的网站。 我有一个“帖子”布局,我希望与帖子相关的所有标签都出现在左栏中。我遇到的问题是,使用 {{ page.tags }} 会返回一个未以逗号分隔且看起来很乱
如何将一个目录下的所有hash tag重写为slash tag? ( Apache ) http://www.domain.com/company/index#about => http://www.
在查询 Flickr API 并检查返回的标签时,我注意到我收到了未在 Web 界面上显示的其他标签。例如对于此图像: http://www.flickr.com/photos/77060598@N0
我有类似 的东西我想得到这个: <1> <2> 但我只想在 中应用它标签而不是其他任何地方。 我已经有了这个: $txt = $this->input->post('
我想删除 xxx yyyy zzz 用 php。但是,首先,我想控制字符串是否以 开头并以 结尾 是否有用于此目的的函数? if(string begins with '' and ends wi
在我的模板中加载自定义标签时出现此错误。我访问了许多关于此的主题,并且确保确认我没有犯一些常见错误: 包含标签的文件在 templatetags 中文件夹。 此 templatetags文件夹包含 _
API doc中没有关于构造函数的文档。我想了解SvgElement.tag()的用途/用例。 最佳答案 SvgElement.tag(String tag)构造函数为对应的SvgElement值创建
$('*').data('tag', "tagged"); $('li[tag=tagged]').length 返回零... 最佳答案 $('*').data('tag', "tagged"); $
下面的代码出错了。我该如何解决这个问题? {% block header %} {% endblock %} 错误输出: TemplateSyntaxError : Invalid bloc
我是一名优秀的程序员,十分优秀!