隨機 Bitcoin 地址的問題

對於那些使用過 Bitcoin 的人來說,您可能已經注意到 Bitcoin 地址可能相當難以處理——它們難以記憶且在視覺上不討喜。一個典型的 Bitcoin 地址看起來像這樣:

1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

雖然安全,但這類地址帶來了幾個挑戰:

  • 可記憶性: 人類不可能記住
  • 驗證: 在發送資金時容易發生複製貼上錯誤
  • 品牌化: 企業無法將品牌融入地址中
  • 信任: 接收者無法輕易驗證地址真實性

本文介紹了 vanity 地址生成——一種建立具有自訂前綴的個性化 Bitcoin 地址的方法,例如 1Love...1Bitcoin...1YourName...

理解 Bitcoin 地址生成

如果您不熟悉 Bitcoin 地址是如何生成的,以下是技術序列:

標準地址生成過程

graph TD
    A[生成隨機<br/>256-bit 私鑰] -->|ECDSA secp256k1| B[計算公鑰<br/>PubKey = PrivKey × G]
    B -->|SHA-256| C[雜湊公鑰<br/>256-bit 輸出]
    C -->|RIPEMD-160| D[公鑰雜湊<br/>20 bytes]
    D -->|添加版本位元組 0x00| E[版本化雜湊<br/>21 bytes]
    E -->|雙重 SHA-256<br/>取前 4 bytes| F[添加校驗和<br/>總計 25 bytes]
    F -->|Base58 編碼| G[Bitcoin 地址<br/>1A1zP1eP5Q...]

    style A fill:#4CAF50
    style B fill:#2196F3
    style C fill:#FF9800
    style D fill:#FF9800
    style E fill:#9C27B0
    style F fill:#00BCD4
    style G fill:#4CAF50

地址生成步驟:

  1. 生成隨機數: 建立一個 256-bit 隨機私鑰
  2. 橢圓曲線密碼學: 使用 secp256k1 曲線計算公鑰: 公鑰 = 私鑰 × G(其中 G 是生成點)
  3. 雜湊函數:
    • 對公鑰應用 SHA-256
    • 對 SHA-256 結果應用 RIPEMD-160
  4. 添加版本位元組: 為主網添加前綴 0x00
  5. 校驗和: 計算版本化雜湊的雙重 SHA-256,附加前 4 bytes
  6. Base58 編碼: 將結果編碼為人類可讀格式(26-35 個字元,以 ‘1’ 開頭)

關鍵屬性: 隨機生成的私鑰對應一個唯一的地址,無法反向工程。給定一個地址,在計算上不可能推導出私鑰(這是 Bitcoin 安全性的基礎)。

Vanitygen 命令列工具生成具有特定前綴模式的自訂 Bitcoin 地址

使用 Vanitygen 生成 Vanity 地址

要建立特殊地址,您可以使用開源工具 vanitygen1。這個強大的軟體使用暴力搜尋來尋找產生具有您所需前綴的地址的私鑰。

Vanitygen 的工作原理

Vanitygen 採用簡單但計算密集的演算法:

  1. 生成隨機私鑰: 建立一個隨機的 256-bit 數字
  2. 推導地址: 執行完整的地址生成序列
  3. 模式匹配: 檢查產生的地址是否以您所需的前綴開頭
  4. 重複: 如果沒有匹配,生成另一個隨機密鑰並重複

這本質上是一個試錯搜尋,通過可能的私鑰的廣大空間(2²⁵⁶ 種可能性),直到找到一個產生您所需地址前綴的密鑰。

難度和計算時間

生成 vanity 地址的難度隨著每個額外字元呈指數級增長:2

前綴長度 可能組合 平均嘗試次數 CPU 時間(約) GPU 時間(約)
1 個字元 58 29 < 1 秒 < 1 秒
2 個字元 3,364 1,682 < 1 秒 < 1 秒
3 個字元 195,112 97,556 ~5 秒 < 1 秒
4 個字元 11,316,496 5,658,248 ~5 分鐘 ~30 秒
5 個字元 656,356,768 328,178,384 ~5 小時 ~20 分鐘
6 個字元 38,068,692,544 19,034,346,272 ~12 天 ~10 小時
7 個字元 2,207,984,167,552 1,103,992,083,776 ~2 年 ~3 週
8 個字元 128,063,081,718,016 64,031,540,859,008 ~100 年 ~4 年

注意: Base58 字母表排除了容易混淆的字元(0、O、I、l),因此每個位置有 58 種可能的字元。

範例: 生成以 “1Bitcoin”(在 ‘1’ 後的 7 個字元)開頭的地址,使用高階 GPU 可能需要大約 2-3 週,或在 CPU 上需要數年。

CPU 與 GPU 性能

Vanitygen 支援 CPU 和 GPU 加速:

CPU 模式:

  • 速度: 每秒約 100,000 - 500,000 個密鑰(現代 CPU)
  • 優點: 在任何電腦上都可用,無需特殊設定
  • 缺點: 比 GPU 慢 100-1000 倍

GPU 模式(使用 OpenCL/CUDA):

  • 速度: 每秒約 5000 萬 - 2 億個密鑰(高階 GPU)
  • 優點: 大規模平行計算,快 100-1000 倍
  • 缺點: 需要相容的 GPU,更高的功耗

性能基準(約):

  • Intel i7 CPU: 每秒約 400,000 個密鑰
  • NVIDIA RTX 3080: 每秒約 1.5 億個密鑰
  • AMD RX 6800: 每秒約 1.2 億個密鑰
終端機顯示成功生成具有自訂 vanity 前綴的個性化 Bitcoin 地址

多貨幣支援

此外,以前有一個進階版本叫做 vanitygen-plus(以前在 exploitagency/vanitygen-plus,現已歸檔),它基於 samr7/vanitygen 並支援廣泛的加密貨幣:

  • Bitcoin 家族: Bitcoin、Bitcoin Testnet、Bitcoin Cash
  • Altcoins: Litecoin、Dogecoin、Dash、Monacoin、Namecoin、Peercoin
  • 隱私幣: DeepOnion、Blackcoin
  • 其他: 許多具有類似地址格式的額外加密貨幣

對於多貨幣支援,使用者可以透過在 GitHub 上搜尋 “vanitygen” 替代方案或探索支援現代地址格式(Bech32、SegWit)的較新工具來找到活躍的分支。

實用使用指南

基本使用範例

生成以 “1Love” 開頭的地址:

./vanitygen 1Love

不區分大小寫搜尋(找到 1love、1Love、1LOVE 等):

./vanitygen -i 1love

正規表示式模式(以 “xyz” 結尾的地址):

./vanitygen 1.*xyz

GPU 加速:

./oclvanitygen -D 0:0 1Love
# -D 0:0 指定 platform:device

同時搜尋多個模式:

./vanitygen 1Love 1Bitcoin 1Satoshi

真實世界用例

1. 企業品牌化

  • 交易所: 1Binance...1Coinbase...
  • 商家: 1Shop...1Store...
  • 服務: 1Donate...1Tips...

2. 個人識別

  • 名字: 1Alice...1Bob...
  • 日期: 1Jan2024...
  • 令人難忘的詞: 1Lucky...1Happy...

3. 增強驗證

  • 捐贈地址容易辨識
  • 降低地址替換攻擊的風險
  • 為常規接收者提供視覺確認

關鍵安全考量

1. 隨機性至關重要

需要注意的關鍵方面是,這些生成的地址的安全性在很大程度上依賴於所使用的隨機數生成器的隨機性。必須驗證這些工具中隨機數生成器的可靠性:

良好實踐:

  • 使用具有經過審計程式碼的信譽良好的開源工具
  • 確保您的系統的熵池足夠(Linux 上的 /dev/random)
  • 避免使用線上 vanity 地址生成器(它們可能竊取私鑰)

不良實踐:

  • ❌ 永遠不要使用為您生成密鑰的線上「vanity 地址服務」
  • ❌ 不要信任閉源工具
  • ❌ 避免使用可疑或未經審計的隨機數生成的工具

2. 2013 年 Android 錢包漏洞的教訓

歷史提供了一個警示故事: 2013 年,Android Bitcoin 錢包遭受了弱隨機數生成,導致重複的私鑰和 55.82 BTC 的盜竊。這表明差的隨機性 = 安全性受損,無論加密強度如何。

3. 分割密鑰 Vanity 生成

為了最大限度的安全性,考慮分割密鑰 vanity 生成:

  1. 第三方生成部分密鑰: 不受信任的一方搜尋 vanity 前綴
  2. 您添加您的隨機密鑰: 將他們的部分密鑰與您自己的隨機私鑰組合
  3. 結果: 具有所需前綴的地址,但第三方從未擁有完整的私鑰

這允許使用更快的第三方服務,而無需信任他們訪問資金。

4. 驗證您的工具

在使用任何 vanity 地址生成器之前:

  • 檢查 GitHub stars/forks(samr7/vanitygen 有 2,000+ stars)
  • 閱讀原始碼或獲取安全審計結果
  • 從原始碼編譯而不是下載預先建置的二進位檔案
  • 在將大量資金用於之前先用小額測試

進階技巧和竅門

大小寫敏感性很重要

Bitcoin 地址區分大小寫。難度差異很大:

  • 1Love(特定大小寫): 中等難度
  • -i 1love(任何大小寫): 由於不區分大小寫匹配,容易 58 倍

用於建立創意地址的正規表示式模式

# 以 "end" 結尾的地址
./vanitygen 1.*end$

# 在任何地方包含 "love" 的地址
./vanitygen 1.*love

# 多個詞
./vanitygen "1.*(love|moon|star)"

監控生成進度

Vanitygen 顯示即時統計資料:

Difficulty: 264104224
Pattern: 1Bitcoin
Address: 1BitcoinA8kS9fj3K2mP5zE6nQ7xR4yW
Pubkey: 04a1b2c3d4...
Privkey: 5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF
[Current speed: 154.23 Mkey/s]

這有助於根據目前的雜湊率估計剩餘時間。

替代方案和現代發展

SegWit 和 Bech32 地址

現代 Bitcoin 使用 SegWit 地址(以 “bc1” 開頭),提供:

  • 更低的交易費用
  • 更好的錯誤檢測
  • 原生 SegWit 格式

生成 vanity Bech32 地址需要支援新格式的更新工具。

Vanity 地址的風險

雖然方便,但 vanity 地址有權衡:

優點:

  • ✅ 令人難忘且可品牌化
  • ✅ 為常規使用者提供簡便驗證
  • ✅ 企業的專業外觀

缺點:

  • ❌ 揭示您花費了計算資源(潛在的財富訊號)
  • ❌ 更長的前綴生成成本昂貴
  • ❌ 如果使用不受信任的生成器,會增加攻擊面

結論: 在便利性和安全性之間取得平衡

Vanity Bitcoin 地址提供了一種實用的方法,使加密貨幣更加使用者友善,同時保持安全性——前提是您遵循最佳實踐。關鍵要點:

  1. 僅使用受信任的開源工具,如 samr7/vanitygen
  2. 永遠不要信任線上生成器處理您的私鑰
  3. 驗證生成器的隨機性
  4. 從小處開始,使用 4-5 個字元的前綴(合理的生成時間)
  5. 使用 GPU 加速以獲得更長前綴的更快結果

對於技術傾向的人來說,vanity 地址生成展示了 Bitcoin 加密安全性背後的優雅數學,同時提供了實際好處:更容易辨識、記憶和驗證的地址。

無論您是尋求品牌認可的企業還是希望在 Bitcoin 地址上添加個性化風格的個人,vanitygen 都可以實現——只要記住安全第一,便利第二。

參考文獻