【问题标题】:Can AES-GCM tag be set after calling EVP_DecryptUpdate?调用 EVP_DecryptUpdate 后可以设置 AES-GCM 标签吗?
【发布时间】:2017-08-05 11:22:17
【问题描述】:

在我看到的所有涉及对 AES-GCM (example) 使用 OpenSSL EVP 接口的代码 sn-ps 中,代码大致如下所示:

EVP_DecryptInit(...);
EVP_CIPHER_CTX_ctrl(..., EVP_CTRL_GCM_SET_TAG, ...);
while (...) {
  EVP_DecryptUpdate(...);
}

success = EVP_DecryptFinal(...);

在调用EVP_CTRL_GCM_SET_TAG 之后 使用EVP_CTRL_GCM_SET_TAG 设置标签是否合法?例如,如果传入的密文正在流式传输,并且标签位于流的末尾,这将很方便。

相关问题:EVP_CTRL_GCM_SET_TAG 是否正式记录在某处?

【问题讨论】:

    标签: openssl aes-gcm


    【解决方案1】:

    在调用 EVP_DecryptUpdate 之后使用 EVP_CTRL_GCM_SET_TAG 设置标签是否合法?例如,如果传入的密文正在流式传输,并且标签位于流的末尾,这将很方便。

    目前很难说,但我猜不是。来自 OpenSSL 的 wiki 页面EVP Authenticated Encryption and Decryption

    标签验证在调用最终的 EVP_DecryptUpdate 时执行,并由返回值反映:没有调用 EVP_DecryptFinal

    GCM 是一种在线模式,这意味着您可以流式传输它。但是,EVP 接口是通用的,它们支持其他经过身份验证的加密模式,例如 CCM。 CCM 模式需要预先确定标签的大小,因为它用于格式化标头。 CCM 是一种离线模式,因为需要事先知道纯文本的标记大小。我正在实现 CCM 限制所有其他类似模式的飞跃。

    此外,OpenSSL 是一个 SSL/TLS 库,而不是通用加密库。作为握手协议的一部分,TLS 协商密码套件和标签长度。 TLS 没有您描述的用例,因此 OpenSSL 没有支持它的操作要求。

    相关,“OpenSSL 是一个 SSL/TLS 库”是库中有时缺少一些好东西的原因。这是一个治理问题。


    相关问题:EVP_CTRL_GCM_SET_TAG 是否正式记录在某处?

    这个问题的答案是否定的:

    $ cd openssl-src
    $ grep -IR EVP_CTRL_GCM_SET_TAG *
    include/openssl/evp.h:# define     EVP_CTRL_GCM_SET_TAG      EVP_CTRL_AEAD_SET_TAG
    $
    

    IF EVP_CTRL_GCM_SET_TAG 已记录在案,然后您会看到带有文件扩展名 *.pod 的命中。 pod 文件是手册页的来源。

    但是上面有一些 wiki 文档。 Matt Caswell 编写了它,他是 OpenSSL 开发人员之一。虽然手册页是官方文档,但 wiki 在这种情况下也同样出色。

    【讨论】:

      【解决方案2】:

      我不知道答案,但我想分享我对此的调查。

      openssl wiki 页面https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption 上的示例显示了这个序列:

      EVP_DecryptUpdate(...);
      EVP_CIPHER_CTX_ctrl(..., EVP_CTRL_GCM_SET_TAG, ...);
      EVP_DecryptFinal(...);
      

      所以您可能认为这是合法的,但在我的测试中只成功了一半:当我设置更改标签时,对 EVP_DecryptFinal_ex 的调用表示错误(返回非 1),但随后对 ERR_print_errors_cb 的调用没有显示任何错误。很奇怪。

      【讨论】:

        猜你喜欢
        • 2015-09-23
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多