有没有办法在python中使用非openssl md5 for hashlib?

时间:2016-02-23 19:21:33

标签: python hash md5 hashlib

我为上传验证生成md5内容哈希值,但最近我注意到,对于在支持FIPS的计算机上运行的任何用户,这都会失败。 FIPS禁用openssl md5,当我尝试初始化hashlib时导致ValueError。通常我会使用SHA,但我依赖的是需要内容-md5标头的外部服务。

我的问题是:有没有办法强制Python使用非openssl散列函数?有一些关于添加usedforsecurity标志的谈话here,但它似乎没有去过任何地方。

2 个答案:

答案 0 :(得分:2)

答案"如何从FIPS模式机器发送内容-md5标头"在启用FIPS模式时您不会使用非FIPS验证的算法,因为您可能会违反联邦法规或组织政策,因为FIPS启用机器的唯一重要原因是否存在监管(或可能是预防性政策)的要求。

this github issues list中也有一些讨论,建议content-md5必须是可选的。

根据监管要求,您不能使用MD5,因为它不是符合FIPS标准的算法,因此无法通过FIPS验证(!)实施。

您需要执行以下操作之一:

  • 使该服务不需要content-md5标题

  • 使用其他服务

  • 使用不需要处于FIPS模式的其他原始机器

如果您的管理层需要参考,请直接从nist.gov上查看Annex A Approved Security Functions for FIPS PUB 140-2

答案 1 :(得分:2)

Flag usedforsecurity = False仅在某些发行版上可用,因为它不是上游的一部分。您可以在Red Hat Enterprise Linux和衍生产品中找到它们(CentOs,Scientific Linux,Oracle Unbreakable Linux,...)。

你可以自由地使用md5(和其他加密危险的哈希)只用于非加密的东西,例如用它来缓存结果。

md5=hashlib.new('md5',usedforsecurity=False) md5.update(data_to_hash) hex=md5.hexdigest()