我为上传验证生成md5内容哈希值,但最近我注意到,对于在支持FIPS的计算机上运行的任何用户,这都会失败。 FIPS禁用openssl md5,当我尝试初始化hashlib时导致ValueError
。通常我会使用SHA,但我依赖的是需要内容-md5标头的外部服务。
我的问题是:有没有办法强制Python使用非openssl散列函数?有一些关于添加usedforsecurity
标志的谈话here,但它似乎没有去过任何地方。
答案 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()