從太子集團的陳志到硬體錢包Coldcard,全部因為隨機數導致私鑰破解,那隨機數跟私鑰有什麼關係?為什麼他們的隨機數會出問題?
首先比特幣私鑰本身就是一個256位的隨機數,而這也是比特幣最安全的核心保障,因為這個數字的組合總共有10的77次方,遠遠大於地球上沙子的數量,大約等於整個可觀測宇宙中的原子總數,這種天文數字即使動用地球上所有的計算資源都不可能暴力窮舉出來。
那既然規模如此龐大,陳志和Coldcard又是怎麼被偷的?核心就是在於,私鑰安全的前提是因為它是個隨機數,而如果你的私鑰生成的過程根本不隨機,那根本用不到什麼量子計算機,隨便一台電腦跑幾個小時就能把你的私鑰算出來。
隨機數分為兩種,偽隨機數和真隨機數,簡單來說凡是透過一定的數學公式使用程式碼產生的都是偽隨機數,而透過物理現象產生的隨機數才是真隨機數。
例如你使用Python的random()函數產生一個隨機數是214,你以為真的是電腦給你隨機選了一個數字,實際上這個數字是透過一個數學公式產生出來的,比如下一個數字=當前數字*7+3-5,那麼你只要知道計算的公式就可以窮舉出來這個公式能產生出的所有結果。
首先比特幣私鑰本身就是一個256位的隨機數,而這也是比特幣最安全的核心保障,因為這個數字的組合總共有10的77次方,遠遠大於地球上沙子的數量,大約等於整個可觀測宇宙中的原子總數,這種天文數字即使動用地球上所有的計算資源都不可能暴力窮舉出來。
那既然規模如此龐大,陳志和Coldcard又是怎麼被偷的?核心就是在於,私鑰安全的前提是因為它是個隨機數,而如果你的私鑰生成的過程根本不隨機,那根本用不到什麼量子計算機,隨便一台電腦跑幾個小時就能把你的私鑰算出來。
隨機數分為兩種,偽隨機數和真隨機數,簡單來說凡是透過一定的數學公式使用程式碼產生的都是偽隨機數,而透過物理現象產生的隨機數才是真隨機數。
例如你使用Python的random()函數產生一個隨機數是214,你以為真的是電腦給你隨機選了一個數字,實際上這個數字是透過一個數學公式產生出來的,比如下一個數字=當前數字*7+3-5,那麼你只要知道計算的公式就可以窮舉出來這個公式能產生出的所有結果。
