2009-08-05 73 views
4

我正在使用桌面应用程序,并希望使用碰巧可用的任何硬件随机数字生成器,但我不希望用户必须执行任何令人困惑的设置才能使用它。它的Java/Clojure基于Java世界中的某些东西将会很好,尽管我愿意与任何东西一起工作。知道这样做的任何程序吗?他们是跨平台吗?以编程方式使用硬件随机数字发生器

+1

什么操作系统? GNU/Linux内置有'/ dev/random'设备。 – 2009-08-05 20:35:24

+0

'/ dev/random'是一个软件生成器;它仅仅使用与硬件相关的噪声作为源。这个问题是关于输出随机数据的实际硬件设备,这些数据是通过物理随机过程生成的 – Cascabel 2009-08-05 20:41:16

+0

@Jefromi:你怎么知道的? – 2009-08-05 21:08:14

回答

6

您应该使用Java SecureRandom类。用户可以通过设置其preference order来覆盖硬件RNG的默认算法选择。这适用于所有的Java应用程序,包括你的。

+0

推论是应用程序需要一个SecureRandom引擎类,以适应可能“恰好可用”的每个设备。除非那里的人已经为常见设备维护了这样的类库,否则这是一项艰巨的任务! – 2009-08-05 22:54:06

+0

或者可以有一个SecureRandom引擎使用操作系统工具与硬件RNG进行交互 – bdonlan 2009-08-06 01:46:22

+0

@bdolan:我认为这不会起作用。 AFAIK没有连接RNG硬件的具体标准,也没有标准的OS级服务。 – 2009-08-06 09:31:03

2

这取决于您需要生成的随机数的质量。具体而言,您需要购买多少entropy

如果您确实需要一些不依赖于可预测时钟的硬核随机数,您可能需要查看第三方可用的生成器。

http://en.wikipedia.org/wiki/Hardware_random_number_generator

有些使用热能,等等,以增加每比特的熵。

+0

OP的问如何与任何可用的接口连接,当然?这里熵的数量是多少? – bdonlan 2009-08-05 20:40:00

+1

香草机中只有这么多选项可用。我只是让他知道,所有的随机数字并不相同,并试图告诉他一些替代方案。我的答案可能不是他正在寻找的,但我认为这与他的问题有关。 – 2009-08-05 20:42:01

+0

简短的回答是“足以让我的用户数据安全地抵御所有的攻击,但不包括折磨” – 2009-08-05 21:49:13