使用openssl时,我被教导使用RAND_load_file
和RAND_write_file
来确保库始终使用良好的熵。但是如果RAND_load_file
因文件不存在而失败,我需要从其他地方获取熵。我们假设我使用/ dev / random或/ dev / urandom来执行此操作。在考虑我从“不太好的来源”(如/ dev / urandom)获取初始熵之前,即使文件不存在,也是使用RAND_write_file
的好习惯吗?
答案 0 :(得分:1)
我做了一些研究,并使用了this book中的内容和this one这样的通用来源,我的结论是,一个好的做法是始终使用RAND_write_file
。从书中我得到/ dev / random应始终使用,其次是使用RAND_load_file
。结果是,即使我的应用程序这次无法读取文件,我也应该将其编写以供将来的应用程序或其他应用程序使用。
这会导致文件不存在且/ dev / random不可用的特殊情况。如果我只使用/ dev / urandom我的种子可能很弱,如果我使用RAND_write_file
,种子在理论上就会很弱。我想在这一点上,这意味着如果你真的是偏执狂,你永远不想写这个文件,因为这是播种不好的结果。但是如果你知道攻击者第一次出现就不存在,因为攻击者无法知道发生了什么(即文件是否具有良好或可预测的熵)。此外,攻击者无法知道不同应用程序使用RAND_write_file
的次数。
所以我想这取决于你环境中的偏执狂;使用RAND_write_file
绝对是良好的公民身份,但如果不是,你不想欺骗其他文件包含良好熵的应用程序。