提问人:Passer By 提问时间:11/5/2023 更新时间:11/11/2023 访问量:109
usedforsecurity的意义何在?
What is the point of usedforsecurity?
问:
该参数已添加到 Python 3.9 中 hashlib 中的每个哈希函数中。usedforsecurity
在 3.9 版更改: 所有 hashlib 构造函数都采用默认值为 True 的仅关键字参数 usedforsecurity。false 值允许在受限环境中使用不安全和被阻止的哈希算法。False 表示哈希算法未在安全上下文中使用,例如作为非加密单向压缩函数。
但是,这提供了零指导
- 何时应使用
usedforsecurity
- 何时不应使用
usedforsecurity
- 什么是“受限环境”
虽然我不是安全研究人员,但我非常清楚 md5 在任何意义上都不安全。因此,这个名字在很多方面都让我难以置信。usedforsecurity
有什么意义?usedforsecurity
答:
文档中给出的解释非常清楚何时应该使用或不应该使用:如果您出于安全目的不使用该算法,则通过。usedforsecurity
False
这些影响确实值得更多解释。在大多数 Python 构建中,此参数不执行任何操作。默认情况下,不安全的算法处于启用状态。
“受限环境”主要是使用 OpenSSL FIPS 模块(或 3.0 之前的 OpenSSL OpenSSL 上的 OpenSSL FIPS 模式)来禁用不安全算法的罕见 Python 版本。如果你通过了,Python 会告诉 OpenSSL 无论如何都允许不安全的算法(如果你想查看代码,请参阅此处、此处和此处)。 如果您真的没有将该算法用于任何需要加密强度保证的事情,这没关系。usedforsecurity=False
如果您想了解更多信息,还可以查看最初导致引入此标志的问题讨论。
TL;DR 对于几乎所有人来说,忽略这个标志,它没有任何影响。
完整的故事涉及 FIPS 以及如何将其公开为 python API。
就我们的目的而言,FIPS 是一个标准,据称它指定了一组安全的做法。在某些情况下(例如,为美国政府机构编写软件),您必须遵守 FIPS。
为了符合 FIPS,python 可以通过从源代码启用 FIPS 构建 python 来打开 FIPS 模式。这是文档中提到的“受限环境”。如果你有一个标准的python版本,那么你就不遵守FIPS,标志实际上什么也没做。
FIPS 的一个方面是限制允许您使用的哈希函数。特别是,FIPS 不允许使用 MD5。在 FIPS 环境中使用 MD5 时,会遇到错误。这就是引入应该解决的问题:如果您真的想在 FIPS 环境中使用 MD5,请为您提供逃生舱口。该参数设计为在每个呼叫站点指定,以便可以根据具体情况进行审核。usedforsecurity
在许多方面似乎都存在与安全有关的混淆。事实并非如此。将其设置为不会降低安全性。但是,在启用了 FIPS 的环境中,它会将哈希函数的实现切换为经过明确认证的实现。usedforsecurity
False
总之,出于所有意图和目的,也可以调用该参数,因为这是它的唯一目的:如果您碰巧在 FIPS 环境中工作并且仍然需要使用 FIPS 不合规的哈希,则作为逃生舱口。不幸的是,它是所有用户的 API 的一部分,名称具有严重误导性。exceptionforfips
评论