亂數夠不夠亂

原本是想在台大駭客松期間, 找出虛擬幣電子錢包是否能產生夠亂的 seed 來生成新帳號. 但這個題目並沒得到團隊內部的認同, 只好把它寫成文章跟大家一起探討.

其實, 大家可能還無法理解, 為何亂數或虛擬錢包的帳戶, 有多重要?像銀行的帳戶, 裡面的金庫, 只要銀行沒遭小偷. 基本上即使帳簿丟了, 或印章丟了. 大不了拿雙證件, 到銀行再領一本新帳簿, 錢都還在…

但, 虛擬幣世界, 帳號是自己產生的 (如果你還想要保留一絲絲的個資與隱私權, 不要跟真實世界一樣, 玩 line 或 FB, 幾乎大家都忘了什麼是隱私權了.) 也就連同, 金庫的鑰匙 (也就是私鑰) 都要自己管. 如果亂數不夠亂, 私鑰產生也可能重複, 那電子錢包的錢就有可能會被偷走.

問題 1

亂數夠不夠亂, 亂的程度是多少, 英文叫 Entropy, 中文字叫 “熵”

所以我們要先找到一個工具, 來檢驗我們的 “熵” 值, 就可以比較出哪一個亂數比較亂.

問題 2

那多大的 “熵” 對數位錢包的保護才夠? (假設不管錢包裡有多少錢, 我們都不想被偷.)

問題 3

如果虛擬錢包用小微處理器, 運算速度比筆電或手機慢很多. 產生亂數的速度就會變慢, 到底多慢能被使用者接受.

我想研究方向有幾種方法如下;

解決方案 1

TRNG (true random number generator) 硬體亂數產生器, 可以在 Wiki 找到資料如下

或用 USB 介面的 TRNG

但現在大家的電腦跟手機, CPU 都變快了, 應該也可以用軟體來產生. 但我們還是要檢查一下, 夠不夠亂, 或應該說, 在可忍受的時間內, 能產生什麼夠亂的亂數. 在 Linux 電腦上, 我們可以用一些工具軟體來測量.

rng-tools 原始碼

dieharder 原始碼

解決方法 2: PRNG

PRNG (Pseudorandom number generators), 用軟體來產生亂數.

https://en.wikipedia.org/wiki/List_of_random_number_generators#Pseudorandom_number_generators_.28PRNGs.29

最後, 用 dieharder 或其他測試軟體, 來測亂數的效能

解決方法 3: Linux 也有基本的 “熵”

SSL 是現在最常用的加密機制, https 網站也都有加密 (理論上, 不應該再用 http 了), 如果亂數不夠亂, SSL 也會有問題.

以下指令能檢查你電腦現在的亂數有多亂:

cat /proc/sys/kernel/random/entropy_avail

如果值小於 1000, 其實有點不夠亂.

未來如果用 Linux OS 做電子錢包, 測試亂數夠不夠亂, 變得很重要.