如何安裝pandom : 一個(gè)針對(duì)Linux的真隨機(jī)數(shù)生成器
本教程只針對(duì) amd64/x86_64 架構(gòu) Linux 內(nèi)核版本大于等于 2.6.9 的系統(tǒng)。本文將解釋如何安裝 pandom,這是一個(gè)由 ncomputers.org 維護(hù)的定時(shí)抖動(dòng)真隨機(jī)數(shù)生成器。
簡(jiǎn)介
在現(xiàn)在的計(jì)算機(jī)狀況下,比如說(shuō)配置了固態(tài)硬盤(SSD)的個(gè)人電腦和虛擬專用服務(wù)器(VPS)的環(huán)境中,Linux 內(nèi)核內(nèi)置的真隨機(jī)數(shù)發(fā)生器提供的吞吐量很低。
而出于各種不同的加密目的使得對(duì)真隨機(jī)數(shù)的需求持續(xù)增長(zhǎng),從而使得這個(gè)低吞吐量問(wèn)題在 Linux 實(shí)現(xiàn)中變得越來(lái)越嚴(yán)重。
在與上述相同的物理或者虛擬環(huán)境下,并假設(shè)沒有其它進(jìn)程以 root 身份向 /dev/random 進(jìn)行寫操作的話,64 ubits/64 bits 的 pandom 可以以 8 KiB/s 的速率生成隨機(jī)數(shù)。
1 pandom 的安裝
1.1 獲得 root 權(quán)限
Pandom 必須以 root 身份來(lái)安裝,所以在必要的時(shí)候請(qǐng)運(yùn)行如下命令:
- su -
1.2 安裝編譯所需的依賴
為了下載并安裝 pandom,你需要 GNU as 匯編器、GNU make、GNU tar 和 GNU wget (***兩個(gè)工具通常已被安裝)。隨后你可以按照你的意愿卸載它們。
基于 Arch 的系統(tǒng):
- pacman -S binutils make
基于 Debian 的系統(tǒng):
- apt-get install binutils make
基于 Red Hat 的系統(tǒng):
- dnf install binutils make
- yum install binutils make
基于 SUSE 的系統(tǒng):
- zypper install binutils make
1.3 下載并析出源碼
下面的命令將使用 wget 和 tar 從 ncomputers.org 下載 pandom 的源代碼并將它們解壓出來(lái):
- wget http://ncomputers.org/pandom.tar.gz
- tar xf pandom.tar.gz
- cd pandom/amd64-linux
1.4 在安裝前進(jìn)行測(cè)試 (推薦)
這個(gè)被推薦的測(cè)試將花費(fèi)大約 8 分鐘的時(shí)間,它將檢查內(nèi)核支持情況并生成一個(gè)名為 checkme 的文件(在下一節(jié)中將被分析)。
- make check
1.5 確定系統(tǒng)的初始化程序
在安裝 pandom 之前,你需要知道你的系統(tǒng)使用的是哪個(gè)初始化程序。假如下面命令的輸出中包含 running,則意味著你的系統(tǒng)使用了 systemd,否則你的系統(tǒng)則可能使用了一個(gè) init.d 的實(shí)現(xiàn)(例如 upstart、sysvinit)。
- systemctl is-system-running
- running
1.6 安裝 pandom
一旦你知道了你的系統(tǒng)使用何種 Linux 實(shí)現(xiàn),那么你就可以相應(yīng)地安裝 pandom 了。
使用基于 init.d 作為初始化程序(如: upstart、sysvinit)的系統(tǒng):
假如你的系統(tǒng)使用了一個(gè) init.d 的實(shí)現(xiàn)(如: upstart、sysvinit),請(qǐng)運(yùn)行下面的命令來(lái)安裝 pandom:
- make install-init.d
以 systemd 作為初始化程序的系統(tǒng):
假如你的系統(tǒng)使用 systemd,則請(qǐng)運(yùn)行以下命令來(lái)安裝 pandom:
- make install-systemd
2 checkme 文件的分析
在使用 pandom 進(jìn)行加密之前,強(qiáng)烈建議分析一下先前在安裝過(guò)程中生成的 checkme 文件。通過(guò)分析我們便可以知道用 pandom 生成的數(shù)是否真的隨機(jī)。本節(jié)將解釋如何使用 ncomputers.org 的 shell 腳本 entropyarray 來(lái)測(cè)試由 pandom 產(chǎn)生的輸出的熵及序列相關(guān)性。
注:整個(gè)分析過(guò)程也可以在另一臺(tái)電腦上完成,例如在一個(gè)筆記本電腦或臺(tái)式機(jī)上。舉個(gè)例子:假如你正在一個(gè)資源受到限制的 VPS 上安裝 pandom 程序,或許你更傾向于將 checkme 復(fù)制到自己的個(gè)人電腦中,然后再進(jìn)行分析。
2.1 獲取 root 權(quán)限
entropyarray 程序也必須以 root 身份來(lái)安裝,所以在必要時(shí)請(qǐng)運(yùn)行如下命令:
- su -
2.2 安裝編譯所需的依賴
為了下載并安裝 entropyarray, 你需要 GNU g++ 編譯器、GNU make、GNU tar 和 GNU wget。在隨后你可以任意卸載這些依賴。
基于 Arch 的系統(tǒng):
- pacman -S gcc make
基于 Debian 的系統(tǒng):
- apt-get install g++ make
基于 Red Hat 的系統(tǒng):
- dnf install gcc-c++ make
- yum install gcc-c++ make
基于 SUSE 的系統(tǒng):
- zypper install gcc-c++ make
2.3 下載并析出源碼
以下命令將使用 wget 和 tar 從 ncomputers.org 下載到 entropyarray 的源碼并進(jìn)行解壓:
- wget http://ncomputers.org/rearray.tar.gz
- wget http://ncomputers.org/entropy.tar.gz
- wget http://ncomputers.org/entropyarray.tar.gz
- tar xf entropy.tar.gz
- tar xf rearray.tar.gz
- tar xf entropyarray.tar.gz
2.4 安裝 entropyarray
注:如果在編譯過(guò)程中報(bào)有關(guān) -std=c++11 的錯(cuò)誤,則說(shuō)明當(dāng)前系統(tǒng)安裝的 GNU g++ 版本不支持 ISO C++ 2011 標(biāo)準(zhǔn),那么你可能需要在另一個(gè)支持該標(biāo)準(zhǔn)的系統(tǒng)中編譯 ncomputers.org/entropy 和 ncomputers.org/rearray (例如在一個(gè)你喜愛的較新的 Linux 發(fā)行版本中來(lái)編譯)。接著使用 make install 來(lái)安裝編譯好的二進(jìn)制文件,再接著你可能想繼續(xù)運(yùn)行 entropyarray 程序,或者跳過(guò)運(yùn)行該程序這一步驟,然而我還是建議在使用 pandom 來(lái)達(dá)到加密目地之前先分析一下 checkme 文件。
- cd rearray; make install; cd ..
- cd entropy; make install; cd ..
- cd entropyarray; make install; cd ..
2.5 分析 checkme 文件
注:64 ubits / 64 bits 的 pandom 實(shí)現(xiàn)所生成的結(jié)果中熵應(yīng)該高于 15.977 且 max 字段低于 70。假如你的結(jié)果與之相差巨大,或許你應(yīng)該按照下面第 5 節(jié)介紹的那樣增加你的 pandom 實(shí)現(xiàn)的不可預(yù)測(cè)性。假如你跳過(guò)了生成 checkme 文件的那一步,你也可以使用其他的工具來(lái)進(jìn)行測(cè)試,例如 偽隨機(jī)數(shù)序列測(cè)試。
- entropyarray checkme
- entropyarray in /tmp/tmp.mbCopmzqsg
- 15.977339
- min:12
- med:32
- max:56
- 15.977368
- min:11
- med:32
- max:58
- 15.977489
- min:11
- med:32
- max:59
- 15.977077
- min:12
- med:32
- max:60
- 15.977439
- min:8
- med:32
- max:59
- 15.977374
- min:13
- med:32
- max:60
- 15.977312
- min:12
- med:32
- max:67
2.6 卸載 entropyarray (可選)
假如你打算不再使用 entropyarray,那么你可以按照你自己的需求卸載它:
- cd entropyarray; make uninstall; cd ..
- cd entropy; make uninstall; cd ..
- cd rearray; make uninstall; cd ..
3 使用 debian 的軟件倉(cāng)庫(kù)來(lái)進(jìn)行安裝
假如你想在你基于 debian 的系統(tǒng)中讓 pandom 保持更新,則你可以使用 ncomputers.org 的 debian 軟件倉(cāng)庫(kù)來(lái)安裝或者重新安裝它。
3.1 獲取 root 權(quán)限
以下的 debian 軟件包必須以 root 身份來(lái)安裝,所以在必要時(shí)請(qǐng)運(yùn)行下面這個(gè)命令:
- su -
3.2 安裝密鑰
下面的 debian 軟件包中包含 ncomputers.org debian 軟件倉(cāng)庫(kù)的公匙密鑰:
- wget http://ncomputers.org/debian/keyring.deb
- dpkg -i keyring.deb
- rm keyring.deb
3.3 安裝軟件源列表
下面這些 debian 軟件包含有 ncomputers.org debian 軟件倉(cāng)庫(kù)的軟件源列表,這些軟件源列表對(duì)應(yīng)***的 debian 發(fā)行版本(截至 2017 年)。
注:你也可以將下面的以 # 注釋的行加入 /etc/apt/sources.list 文件中,而不是為你的 debian 發(fā)行版本安裝對(duì)應(yīng)的 debian 軟件包。但假如這些源在將來(lái)改變了,你就需要手動(dòng)更新它們。
Wheezy:
- #deb http://ncomputers.org/debian wheezy main
- wget http://ncomputers.org/debian/wheezy.deb
- dpkg -i wheezy.deb
- rm wheezy.deb
Jessie:
- #deb http://ncomputers.org/debian jessie main
- wget http://ncomputers.org/debian/jessie.deb
- dpkg -i jessie.deb
- rm jessie.deb
Stretch:
- #deb http://ncomputers.org/debian stretch main
- wget http://ncomputers.org/debian/stretch.deb
- dpkg -i stretch.deb
- rm stretch.deb
3.4 升級(jí)軟件源列表
一旦密鑰和軟件源列表安裝完成,則可以使用下面的命令來(lái)更新:
- apt-get update
3.5 測(cè)試 pandom
測(cè)試完畢后,你可以隨意卸載下面的軟件包。
注:假如你已經(jīng)在你的 Linux 中測(cè)試了 pandom , 則你可以跳過(guò)這一步。
- apt-get install pandom-test
- pandom-test
- generating checkme file, please wait around 8 minutes ...
- entropyarray in /tmp/tmp.5SkiYsYG3h
- 15.977366
- min:12
- med:32
- max:57
- 15.977367
- min:13
- med:32
- max:57
- 15.977328
- min:12
- med:32
- max:61
- 15.977431
- min:12
- med:32
- max:59
- 15.977437
- min:11
- med:32
- max:57
- 15.977298
- min:11
- med:32
- max:59
- 15.977196
- min:10
- med:32
- max:57
3.6 安裝 pandom
- apt-get install pandom
4 管理 pandom
在 pandom 安裝完成后,你可能想對(duì)它進(jìn)行管理。
4.1 性能測(cè)試
pandom 提供大約 8 kB/s 的隨機(jī)數(shù)生成速率,但它的性能可能根據(jù)環(huán)境而有所差異。
- dd if=/dev/random of=/dev/null bs=8 count=512
- 512+0 records in
- 512+0 records out
- 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.451253 s, 9.1 kB/s
4.2 熵和序列相關(guān)性檢驗(yàn)
除了 ncomputers.org/entropyarray,還存在更多的測(cè)試,例如 Ilja Gerhardt 的 NIST 測(cè)試套件。
- entropyarray /dev/random 1M
4.3 系統(tǒng)服務(wù)
pandom 還可以以系統(tǒng)服務(wù)的形式運(yùn)行。
基于 init.d 的初始化系統(tǒng)(如 upstart、sysvinit):
- /etc/init.d/random status
- /etc/init.d/random start
- /etc/init.d/random stop
- /etc/init.d/random restart
以 systemd 作為初始化程序的系統(tǒng):
- systemctl status random
- systemctl start random
- systemctl stop random
- systemctl restart random
5 增強(qiáng)不可預(yù)測(cè)性或者性能
假如你想增加你編譯的 pandom 程序的不可預(yù)測(cè)性或者性能,你可以嘗試增加或刪減 CPU 時(shí)間測(cè)量選項(xiàng)。
5.1 編輯源文件
請(qǐng)按照自己的意愿,在源文件 test.s 和 tRNG.s 中增加或者移除 measurement blocks 字段。
- #measurement block
- mov $35,%rax
- syscall
- rdtsc
- [...]
- #measurement block
- mov $35,%rax
- syscall
- rdtsc
- [...]
5.2 測(cè)試不可預(yù)測(cè)性
我們總是建議在使用個(gè)人定制的 pandom 實(shí)現(xiàn)來(lái)用于加密目地之前,先進(jìn)行一些測(cè)試。
- make check
5.3 安裝定制的 pandom
假如你對(duì)測(cè)試的結(jié)果很滿意,你就可以使用下面的命令來(lái)安裝你的 pandom 實(shí)現(xiàn)。
- make install
更多額外信息及更新詳見 http://ncomputers.org/pandom 。
(題圖:Pixabay,CC0)