本文作者:咔咔

区块链地址生成背后的技术原理是什么?如何确保其安全性与唯一性?

区块链地址生成背后的技术原理是什么?如何确保其安全性与唯一性?摘要: 我会以最广泛使用的 以太坊 和 比特币 为例,因为它们的生成逻辑略有不同,但核心思想一致,核心思想:从“种子”到“地址”区块链地址的生成过程,本质上是一个单向的、不可逆的密码学推导...

我会以最广泛使用的 以太坊比特币 为例,因为它们的生成逻辑略有不同,但核心思想一致。


核心思想:从“种子”到“地址”

区块链地址的生成过程,本质上是一个单向的、不可逆的密码学推导过程,你可以把它想象成一个非常安全的保险箱生成流程:

  1. 终极密码(种子):你首先拥有一个助记词,它由12个或24个单词组成,这是你资产的终极所有权证明,必须绝对保密
  2. 主密钥(派生根):通过助记词,使用一个标准化的算法(BIP39)生成一个种子,再用这个种子生成一个主私钥
  3. 分支密钥(派生路径):从主私钥,通过一个“派生路径”,可以派生出无穷多个子私钥,这就像一个主钥匙可以打开无数个独立的子保险箱。
  4. 保险箱钥匙(私钥):每个子私钥都对应一个独立的账户,拥有该账户的绝对控制权。
  5. 保险箱地址(公钥 & 地址):从每个子私钥,通过密码学算法(椭圆曲线算法)计算出对应的公钥,再通过哈希算法计算出最终的区块链地址,这个地址可以公开,用于接收资金。

整个过程是单向的:地址 → 公钥 → 私钥 → 助记词,你可以从助记词推导出所有地址,但无法从地址反推回你的助记词或私钥,这就是其安全性的来源。


详细步骤分解

第1步:生成助记词

这是整个过程的起点,也是最重要的部分。

  • 是什么:由12到24个随机单词组成的列表。witch collapse practice feed shame open despair creek road again ice least
  • 如何生成
    1. 使用一个高熵的随机源(如你的鼠标移动、键盘敲击等)生成一个随机数。
    2. 这个随机数通过 BIP39 标准算法,被转换成一个二进制数据。
    3. 这个二进制数据被分成多个部分,每个部分对应一个预先定义好的单词列表(词库)中的一个单词。
  • 关键点
    • 必须离线生成:最好在专门的、未联网的硬件钱包或官方App上生成,避免恶意软件窃取。
    • 物理备份:将助记词写在纸上、金属板上等,并存放在安全的地方。绝不要截图或保存在联网设备上!
    • 谁拥有助记词,谁就拥有钱包里的一切资产。

第2步:从助记词生成主私钥

有了助记词,下一步是将其转换成实际可用的密钥。

  1. 生成种子:助记词本身不能直接使用,需要通过一个密钥派生函数,最常用的是 PBKDF2 函数,这个过程通常需要一个“盐”,这个盐是固定的字符串 "mnemonic" + passphrase(可选),通过这个函数,助记词被转换成一个512位的种子

    • 种子 = PBKDF2(助记词, "mnemonic" + passphrase)
  2. 生成主私钥:这个512位的种子会被分成两部分:

    • 前256位:作为主私钥
    • 后256位:作为主链码,链码用于后续的密钥派生,增加了安全性,防止暴力破解。

你拥有了一个主私钥 和一个主链码,它们共同构成了你的根账户

第3步:通过派生路径生成子私钥

一个主私钥可以生成无穷多个子私钥,这被称为分层确定性钱包,遵循 BIP32 标准,这让你可以用一个助记词管理成千上万个地址,方便隐私管理和交易。

派生路径看起来像这样:m / purpose' / coin_type' / account' / change / address_index

  • 以太坊 典型路径m / 44' / 60' / 0' / 0 / 0

    • m: 根
    • 44': BIP44标准,表示这是一个兼容BIP44的钱包。
    • 60': 币种代码,60代表以太坊。
    • 0': 账户编号,0表示第一个账户。
    • 0: 0表示接收地址,1表示找零地址。
    • 0: 地址索引,0, 1, 2, 3... 表示该账户下的第0个、第1个、第2个...地址。
  • 比特币 典型路径m / 44' / 0' / 0' / 0 / 0

    • 除了币种代码 0' 代表比特币外,结构类似。

派生过程: 这个路径中的每一部分,都会结合父私钥父链码,通过一个叫做 HMAC-SHA512 的算法,生成一对子私钥子链码,你可以沿着这个路径无限派生下去。

第4步:从私钥生成公钥

这是区块链技术的核心——非对称加密

  • 是什么:每个私钥都对应一个唯一的公钥,它们像一把钥匙和一把锁的关系。
  • 如何生成
    • 使用椭圆曲线数字签名算法,最著名的是 secp256k1(比特币和以太坊都使用)。
    • 这个过程是单向的:你可以用私钥轻松计算出公钥,但无法从公钥反推回私钥。
    • 数学上公钥 = k * Gk 是私钥(一个很大的随机数),G 是椭圆曲线上的一个固定点(基点)。

第5步:从公钥生成最终地址

地址是公钥的“简化版”或“哈希版本”,用于交易中,而不是直接暴露公钥。

  • 以太坊 地址生成

    1. 对公钥(一个65字节的前缀+坐标点)进行 Keccak-256 哈希运算。
    2. 取哈希结果的后 40位(20字节)。
    3. 在这40位前面加上以太坊地址的固定前缀 0x
    4. 最终格式:0x + 40个十六进制字符。0x742d35Cc6634C0532925a3b8D5c2B4b2a8a5a5c8
  • 比特币 地址生成(有多种格式,最常见的是P2PKH)

    1. 对公钥进行 SHA-256 哈希。
    2. 对第一步的结果进行 RIPEMD-160 哈希,得到一个20字节的数据。
    3. 在这20字节前面加上版本号 0x00(代表主网P2PKH地址)。
    4. 对第3步的结果进行 SHA-256 哈希。
    5. 对第4步的结果再进行一次 SHA-256 哈希,取前4位作为校验和
    6. 将第3步的结果和校验和拼接起来,并进行 Base58Check 编码。
    7. 最终格式:以 13 开头的一串字母和数字。1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

可视化流程图

graph TD
    A[第1步: 生成助记词] --> B[第2步: 生成主私钥 & 主链码];
    B --> C[第3步: 通过派生路径生成子私钥];
    C --> D[第4步: 从子私钥生成子公钥 (ECDSA)];
    D --> E[第5步: 从子公钥生成区块链地址 (Keccak-256/SHA-256+RIPEMD-160)];
    subgraph "用户控制区"
        A;
    end
    subgraph "钱包内部推导"
        B;
        C;
        D;
        E;
    end
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style E fill:#ccf,stroke:#333,stroke-width:2px

总结与最佳实践

  1. 安全第一助记词就是一切,谁拥有它,谁就拥有你的资产,把它想象成银行保险箱的钥匙,必须物理备份并妥善保管。
  2. 使用标准工具:使用信誉良好的钱包软件(如 MetaMask, Trust Wallet, Ledger, Trezor)来生成和管理你的助记词和地址,不要使用来路不明的网站或工具。
  3. 理解派生路径:知道你的钱包是如何从助记词生成不同地址的,这有助于你理解为什么一个钱包可以显示成千上万个地址。
  4. 地址是安全的:你可以将你的区块链地址公开给任何人,用于接收资金,它本身不泄露你的任何私钥信息。

希望这个详细的解释能帮助你彻底理解区块链地址的生成原理!

文章版权及转载声明

作者:咔咔本文地址:https://www.jits.cn/content/33383.html发布于 今天
文章转载或复制请以超链接形式并注明出处杰思科技・AI 股讯

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,1人围观)参与讨论

还没有评论,来说两句吧...