閱讀781 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何安裝 pandom : 一個針對 Linux 的真隨機數生成器

本教程隻針對 amd64/x86_64 架構 Linux 內核版本大於等於 2.6.9 的係統。本文將解釋如何安裝 pandom,這是一個由 ncomputers.org 維護的定時抖動真隨機數生成器。

簡介

在現在的計算機狀況下,比如說配置了固態硬盤(SSD)的個人電腦和虛擬專用服務器(VPS)的環境中,Linux 內核內置的真隨機數發生器提供的吞吐量很低。

而出於各種不同的加密目的使得對真隨機數的需求持續增長,從而使得這個低吞吐量問題在 Linux 實現中變得越來越嚴重。

在與上述相同的物理或者虛擬環境下,並假設沒有其它進程以 root 身份向 /dev/random 進行寫操作的話,64 ubits/64 bits 的 pandom 可以以 8 KiB/s 的速率生成隨機數。

1 pandom 的安裝

1.1 獲得 root 權限

Pandom 必須以 root 身份來安裝,所以在必要的時候請運行如下命令:


  1. su -

1.2 安裝編譯所需的依賴

為了下載並安裝 pandom,你需要 GNU as 匯編器、GNU make、GNU tar 和 GNU wget (最後兩個工具通常已被安裝)。隨後你可以按照你的意願卸載它們。

基於 Arch 的係統:


  1. pacman -S binutils make

基於 Debian 的係統:


  1. apt-get install binutils make

基於 Red Hat 的係統:


  1. dnf install binutils make
  2. yum install binutils make

基於 SUSE 的係統:


  1. zypper install binutils make

1.3 下載並析出源碼

下麵的命令將使用 wget 和 tar 從 ncomputers.org 下載 pandom 的源代碼並將它們解壓出來:


  1. wget http://ncomputers.org/pandom.tar.gz
  2. tar xf pandom.tar.gz
  3. cd pandom/amd64-linux

1.4 在安裝前進行測試 (推薦)

這個被推薦的測試將花費大約 8 分鍾的時間,它將檢查內核支持情況並生成一個名為 checkme 的文件(在下一節中將被分析)。


  1. make check

1.5 確定係統的初始化程序

在安裝 pandom 之前,你需要知道你的係統使用的是哪個初始化程序。假如下麵命令的輸出中包含 running,則意味著你的係統使用了 systemd,否則你的係統則可能使用了一個 init.d 的實現(例如 upstart、sysvinit)。


  1. systemctl is-system-running
  2. running

1.6 安裝 pandom

一旦你知道了你的係統使用何種 Linux 實現,那麼你就可以相應地安裝 pandom 了。

使用基於 init.d 作為初始化程序(如: upstart、sysvinit)的係統:

假如你的係統使用了一個 init.d 的實現(如: upstart、sysvinit),請運行下麵的命令來安裝 pandom:


  1. make install-init.d

以 systemd 作為初始化程序的係統:

假如你的係統使用 systemd,則請運行以下命令來安裝 pandom:


  1. make install-systemd

2 checkme 文件的分析

在使用 pandom 進行加密之前,強烈建議分析一下先前在安裝過程中生成的 checkme 文件。通過分析我們便可以知道用 pandom 生成的數是否真的隨機。本節將解釋如何使用 ncomputers.org 的 shell 腳本entropyarray 來測試由 pandom 產生的輸出的熵及序列相關性。

:整個分析過程也可以在另一台電腦上完成,例如在一個筆記本電腦或台式機上。舉個例子:假如你正在一個資源受到限製的 VPS 上安裝 pandom 程序,或許你更傾向於將 checkme 複製到自己的個人電腦中,然後再進行分析。

2.1 獲取 root 權限

entropyarray 程序也必須以 root 身份來安裝,所以在必要時請運行如下命令:


  1. su -

2.2 安裝編譯所需的依賴

為了下載並安裝 entropyarray, 你需要 GNU g++ 編譯器、GNU make、GNU tar 和 GNU wget。在隨後你可以任意卸載這些依賴。

基於 Arch 的係統:


  1. pacman -S gcc make

基於 Debian 的係統:


  1. apt-get install g++ make

基於 Red Hat 的係統:


  1. dnf install gcc-c++ make
  2. yum install gcc-c++ make

基於 SUSE 的係統:


  1. zypper install gcc-c++ make

2.3 下載並析出源碼

以下命令將使用 wget 和 tar 從 ncomputers.org 下載到 entropyarray 的源碼並進行解壓:


  1. wget http://ncomputers.org/rearray.tar.gz
  2. wget http://ncomputers.org/entropy.tar.gz
  3. wget http://ncomputers.org/entropyarray.tar.gz
  4. tar xf entropy.tar.gz
  5. tar xf rearray.tar.gz
  6. tar xf entropyarray.tar.gz

2.4 安裝 entropyarray

:如果在編譯過程中報有關 -std=c++11 的錯誤,則說明當前係統安裝的 GNU g++ 版本不支持 ISO C++ 2011 標準,那麼你可能需要在另一個支持該標準的係統中編譯 ncomputers.org/entropy 和 ncomputers.org/rearray (例如在一個你喜愛的較新的 Linux 發行版本中來編譯)。接著使用 make install來安裝編譯好的二進製文件,再接著你可能想繼續運行 entropyarray 程序,或者跳過運行該程序這一步驟,然而我還是建議在使用 pandom 來達到加密目地之前先分析一下 checkme 文件。


  1. cd rearray; make install; cd ..
  2. cd entropy; make install; cd ..
  3. cd entropyarray; make install; cd ..

2.5 分析 checkme 文件

:64 ubits / 64 bits 的 pandom 實現所生成的結果中熵應該高於 15.977 且 max 字段低於 70。假如你的結果與之相差巨大,或許你應該按照下麵第 5 節介紹的那樣增加你的 pandom 實現的不可預測性。假如你跳過了生成 checkme 文件的那一步,你也可以使用其他的工具來進行測試,例如 偽隨機數序列測試


  1. entropyarray checkme
  2. entropyarray in /tmp/tmp.mbCopmzqsg
  3. 15.977339
  4. min:12
  5. med:32
  6. max:56
  7. 15.977368
  8. min:11
  9. med:32
  10. max:58
  11. 15.977489
  12. min:11
  13. med:32
  14. max:59
  15. 15.977077
  16. min:12
  17. med:32
  18. max:60
  19. 15.977439
  20. min:8
  21. med:32
  22. max:59
  23. 15.977374
  24. min:13
  25. med:32
  26. max:60
  27. 15.977312
  28. min:12
  29. med:32
  30. max:67

2.6 卸載 entropyarray (可選)

假如你打算不再使用 entropyarray,那麼你可以按照你自己的需求卸載它:


  1. cd entropyarray; make uninstall; cd ..
  2. cd entropy; make uninstall; cd ..
  3. cd rearray; make uninstall; cd ..

3 使用 debian 的軟件倉庫來進行安裝

假如你想在你基於 debian 的係統中讓 pandom 保持更新,則你可以使用 ncomputers.org 的 debian 軟件倉庫來安裝或者重新安裝它。

3.1 獲取 root 權限

以下的 debian 軟件包必須以 root 身份來安裝,所以在必要時請運行下麵這個命令:


  1. su -

3.2 安裝密鑰

下麵的 debian 軟件包中包含 ncomputers.org debian 軟件倉庫的公匙密鑰:


  1. wget http://ncomputers.org/debian/keyring.deb
  2. dpkg -i keyring.deb
  3. rm keyring.deb

3.3 安裝軟件源列表

下麵這些 debian 軟件包含有 ncomputers.org debian 軟件倉庫的軟件源列表,這些軟件源列表對應最新的 debian 發行版本(截至 2017 年)。

:你也可以將下麵的以 # 注釋的行加入 /etc/apt/sources.list 文件中,而不是為你的 debian 發行版本安裝對應的 debian 軟件包。但假如這些源在將來改變了,你就需要手動更新它們。

Wheezy:


  1. #deb http://ncomputers.org/debian wheezy main
  2. wget http://ncomputers.org/debian/wheezy.deb
  3. dpkg -i wheezy.deb
  4. rm wheezy.deb

Jessie:


  1. #deb http://ncomputers.org/debian jessie main
  2. wget http://ncomputers.org/debian/jessie.deb
  3. dpkg -i jessie.deb
  4. rm jessie.deb

Stretch:


  1. #deb http://ncomputers.org/debian stretch main
  2. wget http://ncomputers.org/debian/stretch.deb
  3. dpkg -i stretch.deb
  4. rm stretch.deb

3.4 升級軟件源列表

一旦密鑰和軟件源列表安裝完成,則可以使用下麵的命令來更新:


  1. apt-get update

3.5 測試 pandom

測試完畢後,你可以隨意卸載下麵的軟件包。

:假如你已經在你的 Linux 中測試了 pandom , 則你可以跳過這一步。


  1. apt-get install pandom-test
  2. pandom-test
  3. generating checkme file, please wait around 8 minutes ...
  4. entropyarray in /tmp/tmp.5SkiYsYG3h
  5. 15.977366
  6. min:12
  7. med:32
  8. max:57
  9. 15.977367
  10. min:13
  11. med:32
  12. max:57
  13. 15.977328
  14. min:12
  15. med:32
  16. max:61
  17. 15.977431
  18. min:12
  19. med:32
  20. max:59
  21. 15.977437
  22. min:11
  23. med:32
  24. max:57
  25. 15.977298
  26. min:11
  27. med:32
  28. max:59
  29. 15.977196
  30. min:10
  31. med:32
  32. max:57

3.6 安裝 pandom


  1. apt-get install pandom

4 管理 pandom

在 pandom 安裝完成後,你可能想對它進行管理。

4.1 性能測試

pandom 提供大約 8 kB/s 的隨機數生成速率,但它的性能可能根據環境而有所差異。


  1. dd if=/dev/random of=/dev/null bs=8 count=512
  2. 512+0 records in
  3. 512+0 records out
  4. 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.451253 s, 9.1 kB/s

4.2 熵和序列相關性檢驗

除了 ncomputers.org/entropyarray,還存在更多的測試,例如 Ilja Gerhardt 的 NIST 測試套件


  1. entropyarray /dev/random 1M

4.3 係統服務

pandom 還可以以係統服務的形式運行。

基於 init.d 的初始化係統(如 upstart、sysvinit):


  1. /etc/init.d/random status
  2. /etc/init.d/random start
  3. /etc/init.d/random stop
  4. /etc/init.d/random restart

以 systemd 作為初始化程序的係統:


  1. systemctl status random
  2. systemctl start random
  3. systemctl stop random
  4. systemctl restart random

5 增強不可預測性或者性能

假如你想增加你編譯的 pandom 程序的不可預測性或者性能,你可以嚐試增加或刪減 CPU 時間測量選項。

5.1 編輯源文件

請按照自己的意願,在源文件 test.s 和 tRNG.s 中增加或者移除 measurement blocks 字段。


  1. #measurement block
  2. mov $35,%rax
  3. syscall
  4. rdtsc
  5. [...]
  6. #measurement block
  7. mov $35,%rax
  8. syscall
  9. rdtsc
  10. [...]

5.2 測試不可預測性

我們總是建議在使用個人定製的 pandom 實現來用於加密目地之前,先進行一些測試。


  1. make check

5.3 安裝定製的 pandom

假如你對測試的結果很滿意,你就可以使用下麵的命令來安裝你的 pandom 實現。


  1. make install

原文發布時間為:2014-05-17

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-19 12:04:28

  上一篇:go  《HttpClient官方文檔》2.8 HttpClient代理配置
  下一篇:go  《HttpClient官方文檔》HTTP驗證4.4-4.7