Random-Number-Generator
這些隨機字節的安全性如何?
在我們的 Python 程式碼庫中,生成了一些我們希望加密安全的隨機字節。以前,程式碼是:
capability = "".join(secrets.choice(string.digits) for i in range(33))
我已將其更改為:
capability = secrets.token_bytes(16)
據我估計,第一個版本在 10 位之間選擇了 33 次,因此熵為 33*log 2 (10)=110 位,而第二個版本的熵為 128 位。這個計算正確嗎?
從理論上講,您的數學是正確的。事實上,使用可列印的數字來儲存隨機性是儲存和可讀性之間的權衡。但是,由於您在談論加密安全,所以我想提一點。
在考慮隨機性時,您應該記住兩件事:不可預測性和均勻性。
不是你的情況,但是,如果你使用的是 python 內置外掛
random
,你有統一性但不是不可預測性,因為它使用了 PRNG。因此,根據 Kerchoff 定律,從密碼學角度講,你得到 0 熵。如果您正在使用
secrets
. 它使用(例如在 Linux 中)/dev/urandom
這通常被認為是加密安全的 ,除非在某些情況下(例如,在啟動時)你會得到一個估計*量的熵(你實際上無法測量它),你希望它會少一點比你理論上的。關於是否使用
/dev/urandom
或/dev/random
. 你可以在這裡閱讀更多內容,也可以在下面查看 SAI Peregrinus 的評論。