usedforsecurity的意义何在?

What is the point of usedforsecurity?

提问人:Passer By 提问时间:11/5/2023 更新时间:11/11/2023 访问量:109

问:

该参数已添加到 Python 3.9 中 hashlib 中的每个哈希函数中。usedforsecurity

在 3.9 版更改: 所有 hashlib 构造函数都采用默认值为 True 的仅关键字参数 usedforsecurity。false 值允许在受限环境中使用不安全和被阻止的哈希算法。False 表示哈希算法未在安全上下文中使用,例如作为非加密单向压缩函数。

但是,这提供了指导

  1. 何时应使用usedforsecurity
  2. 何时不应使用usedforsecurity
  3. 什么是“受限环境”

虽然我不是安全研究人员,但我非常清楚 md5 在任何意义上都安全。因此,这个名字在很多方面都让我难以置信。usedforsecurity

有什么意义?usedforsecurity

python-3.x 安全 哈希

评论

2赞 user2357112 11/5/2023
“False 表示哈希算法未在安全上下文中使用”,这比何时应该使用此参数的“指导”要多得多。
0赞 Kelly Bundy 11/5/2023
查看 Python 的更新日志,以获取指向引入它的冗长问题/讨论的链接。
0赞 Passer By 11/5/2023
@user2357112 这没有任何意义,因为 a) 如果没有任何权衡,那么你为什么要关闭它 b) md5(和其他几个)显然不应该在安全环境中使用。想象一下,你的房间里有一个按钮,上面有一个标签:“按下可延长你的寿命”。这对你来说是不是有点可疑?
0赞 Frank C. 11/5/2023
其他人则向你指出了其他材料,你应该围绕改变的理由进行更多的研究。
0赞 President James K. Polk 11/6/2023
其基本思想是防止程序员意外使用不安全的哈希算法。

答:

2赞 user2357112 11/5/2023 #1

文档中给出的解释非常清楚何时应该使用或不应该使用:如果您出于安全目的不使用该算法,则通过。usedforsecurityFalse

这些影响确实值得更多解释。在大多数 Python 构建中,此参数不执行任何操作。默认情况下,不安全的算法处于启用状态。

“受限环境”主要是使用 OpenSSL FIPS 模块(或 3.0 之前的 OpenSSL OpenSSL 上的 OpenSSL FIPS 模式)来禁用不安全算法的罕见 Python 版本。如果你通过了,Python 会告诉 OpenSSL 无论如何都允许不安全的算法(如果你想查看代码,请参阅此处、此处此处)。 如果您真的没有将该算法用于任何需要加密强度保证的事情,这没关系。usedforsecurity=False

如果您想了解更多信息,还可以查看最初导致引入此标志的问题讨论

0赞 Passer By 11/11/2023 #2

TL;DR 对于几乎所有人来说,忽略这个标志,它没有任何影响。


完整的故事涉及 FIPS 以及如何将其公开为 python API。

就我们的目的而言,FIPS 是一个标准,据称它指定了一组安全的做法。在某些情况下(例如,为美国政府机构编写软件),您必须遵守 FIPS。

为了符合 FIPS,python 可以通过从源代码启用 FIPS 构建 python 来打开 FIPS 模式。这是文档中提到的“受限环境”。如果你有一个标准的python版本,那么你就不遵守FIPS,标志实际上什么也没做。

FIPS 的一个方面是限制允许您使用的哈希函数。特别是,FIPS 不允许使用 MD5。在 FIPS 环境中使用 MD5 时,会遇到错误。这就是引入应该解决的问题:如果您真的想在 FIPS 环境中使用 MD5,请为您提供逃生舱口。该参数设计为在每个呼叫站点指定,以便可以根据具体情况进行审核。usedforsecurity

在许多方面似乎都存在与安全有关的混淆。事实并非如此。将其设置为不会降低安全性。但是,在启用了 FIPS 的环境中,它会将哈希函数的实现切换为经过明确认证的实现。usedforsecurityFalse

总之,出于所有意图和目的,也可以调用该参数,因为这是它的唯一目的:如果您碰巧在 FIPS 环境中工作并且仍然需要使用 FIPS 不合规的哈希,则作为逃生舱口。不幸的是,它是所有用户的 API 的一部分,名称具有严重误导性。exceptionforfips