Private-Key
如何計算正確格式的版本一迷你鍵的可能數量?
我正在做一個小型研究項目,收集有關迷你鑰匙的資訊。在那個研究過程中,我遇到了幾個與第一版 minikey 的假定鍵空間相關的問題,我無法回答這些問題。上述迷你鑰匙,主要用於卡薩修斯系列 1 硬幣,由以下參數組成
- 使用 Base58 編碼方案生成
- 共有22個字元,其中21個是隨機的,第一個字元是大寫的S前綴
有以下要求被認為是格式良好的:
- 如果 minikey 附加了 ? 在使用 SHA256 散列的字元串末尾導致第一個字節為 00,該字元串是格式良好的 minikey
關鍵問題:有沒有什麼方法可以計算出 58^21 大鍵空間中的潛在鍵數量,這些鍵空間被認為是正確格式化的?
我目前的懷疑是不可能這樣做,因為驗證涉及散列,並且需要整個 minikey 輸入的整個輸入來生成正確的散列(這意味著可能為了計算有效鍵的可能數量,每個潛在的鍵, 需要生成一個不可能大的鍵空間,這目前是不可能的)。但是,我問這個問題是希望這種懷疑是不正確的,並且以某種方式可以計算出有效格式良好的密鑰的可能數量。
要閱讀有關此主題的內容,我建議您查看:
<https://en.bitcoin.it/wiki/Mini_private_key_format>
請注意,python 腳本需要稍作修改才能在 Python2.7 上執行
粗體表示關鍵問題 斜體表示重要思想
注意:這篇文章故意不涵蓋更安全的 Casascius 系列 2 密鑰,但它可能假設存在系列 1 密鑰的答案,該過程也可以在系列 2 上使用。
因為可以認為 SHA-256 的輸出在整個空間中是均勻分佈的,並且該屬性通過這些輸出的第一個字節,所以您可以通過非常好的近似值輕鬆計算該數字。在您提到的空間中,每 256 個中就有一個是有效的迷你鑰匙。這個近似值非常好,因為正如你所指出的,空間非常大,所以它遵循大數定律。
但是,如果您需要一個確切的數字,那麼您的假設將是正確的,但是,計算此數字將需要檢查空間中每個可能的“候選”迷你鍵,這實際上是對整個空間的暴力破解,並且在計算上是不可行的。