jjzjj

linux -/dev/random 被认为是真正随机的吗?

coder 2023-06-16 原文

例如,它是否可以用于生成一次一密 key ?
另外,它的来源是什么?如何使用它来生成介于 xy 之间的随机数?

最佳答案

严格来说,/dev/random 不是真的完全随机的。 /dev/random假设在某种程度上不可预测的硬件资源为基础;然后它使用函数(主要是散列函数)混合这些数据,这些函数也被假定为单向的。因此,/dev/random 的“真正随机性”因此与混合函数的内在安全性相关,这种安全性并不比任何其他密码原语(尤其是隐藏在/dev/urandom.

/dev/random/dev/urandom 之间的区别在于,前者将尝试维持一个估计(这意味着“疯狂猜测”)它已经收集了很多熵,并且将拒绝输出比这更多的比特。另一方面,/dev/urandom 将愉快地从它拥有的熵中产生数兆字节的数据。

这两种方法之间的安全差异是没有意义的,除非您假设“经典”密码算法可以被破解,并且您使用极少数信息论算法之一(例如 OTPShamir's secret sharing );并且,即便如此,/dev/random 可能被认为比 /dev/urandom 更安全,前提是混合函数仍然被认为是单向的,这是与可以破解经典密码算法的想法不兼容。因此,在实践中,甚至在理论上,都没有任何区别。您可以将 /dev/urandom 的输出用于 OTP,它不会因为 /dev/urandom 内部的任何结构而被破坏——所获得的实际管理流将是弱点(尤其是长期存储)。另一方面,/dev/random 有非常实际的问题,即它可以在不合时宜的瞬间阻塞。当自动操作系统安装阻塞(数小时!)时真的很烦人,因为 SSH 服务器 key 生成坚持使用 /dev/random 并且不必要地停止熵。

有许多应用程序将 /dev/random 视为一种仪式,就好像它比 /dev/urandom“更好”,可能是因果报应等级。这是完全错误的,尤其是当 alea 与经典加密算法一起使用时(例如生成 SSH 服务器公钥)。不要那样做。相反,使用 /dev/urandom 你会活得更久、更快乐。即使是一次性一密本。

(只是为了完整起见,在 Linux 上实现的 /dev/urandom 有一个怪癖:它永远不会阻塞,即使它没有收集任何熵所有自上次启动以来。发行版通过在安装时使用 /dev/random 创建“随机种子”来避免此问题,并在每次启动时使用该种子来初始化 /使用的 PRNG dev/urandom; 立即重新生成一个新的随机种子,用于下次启动。这确保 /dev/urandom 始终在足够大的内部种子上工作。 的 FreeBSD 实现/dev/urandom 将阻塞直到达到给定的熵阈值,这样更安全。)

关于linux -/dev/random 被认为是真正随机的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635277/

有关linux -/dev/random 被认为是真正随机的吗?的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  3. ruby - 在好的 Ruby 代码中没有注释是否被认为是可以接受的? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion我审查了一些用Ruby编写的专业代码,没有发现任何评论。代码读起来相当清晰,但没有self记录。我应该期望专业编写的Ruby代码有注释吗?或者,是否有一些Ruby原则认为注释不是必需的?

  4. ruby-on-rails - 我需要一个真正的 UNIX RoR 开发环境 - 2

    从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby

  5. ruby - 如何在 Ruby 中生成一个非常大的随机整数? - 2

    我想在ruby​​中生成一个64位整数。我知道在Java中你有很多渴望,但我不确定你会如何在Ruby中做到这一点。另外,64位数字中有多少个字符?这是我正在谈论的示例......123456789999。@num=Random.rand(9000)+Random.rand(9000)+Random.rand(9000)但我认为这是非常低效的,必须有一种更简单、更简洁的方法来做到这一点。谢谢! 最佳答案 rand可以将范围作为参数:pa=rand(2**32..2**64-1)#=>11093913376345012184putsa.

  6. ruby-on-rails - 多次选择一个随机数,但绝不会两次选择相同的随机数 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIgeneratealistofnuniquerandomnumbersinRuby?我想做的事:Random.rand(0..10).timesdoputsRandom.rand(0..10)end但如果随机数已经显示过,则无法再次显示。如何最轻松地做到这一点?

  7. ruby - 以随机顺序将数组拆分为多个数组 - Ruby - 2

    我试图在每次运行时以随机顺序将一个名称数组拆分为多个数组。我知道如何拆分它们:name_array=["bob","john","rob","nate","nelly","michael"]array=name_array.each_slice(2).to_a=>[["bob","john"],["rob","nate"],["nelly","michael"]]但是,如果我希望它每次都以随机顺序吐出它们怎么办? 最佳答案 在做同样的事情之前,打乱数组。(Array#shuffle)name_array.shuffle.each_s

  8. ruby - 当前的 Ruby 方法是通过 super 调用的吗? - 2

    在运行时的方法中,有没有办法知道该方法是否已通过子类中的super调用?例如moduleSuperDetectordefvia_super?#whatgoeshere?endendclassFooincludeSuperDetectordefbarvia_super??'super!':'nothingspecial'endendclassFu"nothingspecial"Fu.new.bar#=>"super!"我如何编写via_super?,或者,如果需要,如何编写via_super?(:bar)? 最佳答案 可能有更好的方法

  9. ruby -\b 在 Ruby 正则表达式中的真正含义是什么? - 2

    我有一个文件,其中包含诸如“CanyonSt/27thWay”之类的短语,我正试图使用​​Ruby正则表达式将其转换为“CanyonStand27thWay”。我使用file=file.gsub(/(\b)\/(\b)/,"#{$1}and#{$2}")进行匹配,但我我对\b的真正含义以及为什么$1包含斜线之前的单词边界之前的所有字符以及为什么$2包含从下一个单词开始的单词边界之后的所有字符感到有点困惑。通常,我希望正则表达式括号中的任何内容都在$1和$2中,但我不确定单词边界周围的括号真正意味着什么,因为从单词字符到字符的转换之间确实没有任何内容一个空白字符。

  10. ruby - Ruby 导入的方法总是私有(private)的吗? - 2

    最好用一个例子来解释:文件1.rb:deffooputs123end文件2.rb:classArequire'file1'endA.new.foo将给出错误“':调用了私有(private)方法'foo'”。我可以通过执行A.new.send("foo")来解决这个问题,但是有没有办法公开导入的方法?编辑:澄清一下,我没有混淆include和require。另外,我不能使用正常包含的原因(正如许多人正确指出的那样)是因为这是元编程设置的一部分。我需要允许用户在运行时添加功能;例如,他可以说“run-this-app--includefile1.rb”,应用程序的行为将根据他在file1

随机推荐