樹莓派的硬體隨機數產生器

來源:互聯網
上載者:User

大部分電腦不能產生真正的隨機數。他們使用產生很長偽隨機數流的公式,但是真正的隨機來自類比元件的熱噪音。Raspberry Pi有這樣一個電子元件,它可以為安全傳輸提供種子資料(seed data)。直到最近才為這個電子元件提供了驅動。想要啟用它(在Raspbian上):

  1. 確保你的系統是最新的
    sudo apt-get update
    sudo apt-get -y dist-upgrade
    sudo rpi-update
    and, if necessary, reboot.
  2. 安裝模組:
    sudo modprobe bcm2708-rng
  3. 想要確保它總是被載入,在/etc/modules中添加下述行(以root許可權編輯):
    bcm2708-rng
  4. 對於一些RNG相關工作,安裝rng-tools:
    sudo apt-get install rng-tools

現在/dev/hwrng裝置就可用了,但是只能以root使用者讀取。

隨機看起來是什麼樣子

隨機數看起來相當枯燥。這是隨機的RGB值:

sudo cat /dev/hwrng  | rawtoppm -rgb 256 256 | pnmtopng > random$(date +%Y%m%d%H%M%S).png

(你需要安裝netpbm工具包才能執行上述命令)

隨機聽起來是什麼樣子

兩段簡短的WAV噪音樣本:

  • random20130603234239
  • random20130603234250

是的,聽起來像靜電幹擾。這是使用rndsound.sh這個指令碼做的。你需要安裝sox才能執行它。

這不隨機

如果聽起來像靜電幹擾,即使有時候像靜電幹擾,那麼它也有可能不是真正的隨機噪音。偽隨機數並不隨機的一個聲名狼藉的案例是RANDU,咋一看產生非常隨機的結果,但是仔細研究發現結果是可預測的。

我寫了(我認為是)一個C語言實現的RANDU:randu.c。雖然它可以產生聽起來近似隨機的音頻資料(randu17.wav),但是如果你以映像的形式輸出:

這些條紋泄露了真像;本來是不應該有規律的。測試隨機資料是難的,然而——你確實需要大量的測試,即使其中某些測試對於真正的隨機輸出也可能會失敗。謝天謝地,當你安裝了rngtools,它包含rngtest,一個簡單的隨機資料檢測器:

sudo cat /dev/hwrng | rngtest -c 1000
rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests…
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=67.969; avg=921.967; max=1953125.000)Kibits/s
rngtest: FIPS tests speed: (min=842.881; avg=3208.336; max=6407.890)Kibits/s
rngtest: Program run time: 27658884 microseconds

很幸運對於這次運行沒有測試失敗;有時會有一些失敗。但是對於RANDU,情況就很糟糕了:

./randu 17 | rngtest -c 1000
rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests…
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 0
rngtest: FIPS 140-2 failures: 1000
rngtest: FIPS 140-2(2001-10-10) Monobit: 730
rngtest: FIPS 140-2(2001-10-10) Poker: 1000
rngtest: FIPS 140-2(2001-10-10) Runs: 289
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=45.630; avg=14255.221; max=19073.486)Mibits/s
rngtest: FIPS tests speed: (min=23.694; avg=154.238; max=176.606)Mibits/s
rngtest: Program run time: 141071 microseconds

看到了嗎?好多失敗。它一點兒都不隨機。如果你真的想要測試隨機性,可以採用dieharder測試。雖然它需要執行很長時間。

推薦閱讀:

Raspberry Pi 樹莓派搭LAMP伺服器

Raspberry Pi 樹莓派上安裝Weston

在樹莓派Raspberry Pi上安裝遊戲模擬器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.