跳到主要内容

公钥哈希

介绍公钥哈希,以及它与地址的关系。

公钥哈希简介

公钥哈希故名思义,是公钥的哈希值。在比特币中,公钥哈希是一种常用的地址表示方式,用于接收比特币。

将公钥进行哈希处理一方面是为了将公钥长度固定化,另一方面是为了保护公钥的安全性。公钥哈希是一个固定长度的字符串,通常是160位,可以用各种方式表示,比如Base58编码、Base64编码等。

公钥哈希是比特币地址的核心部分,它是一种经过多次哈希运算生成的短小且安全的表示方式。公钥哈希用来避免直接暴露公钥,增加安全性和隐私性。比特币地址实际上是公钥哈希再经过一些编码步骤处理后的结果。

Hash160

公钥哈希的计算过程通常是先对公钥进行哈希,再对哈希值进行二次哈希。这种计算方式叫做Hash160,是比特币中常用的哈希算法。

从公钥计算公钥哈希

计算公钥哈希的过程包括以下几个步骤:

  1. 计算 SHA-256 哈希:首先对公钥进行 SHA-256 哈希运算,得到一个 256 位的哈希值。
  2. 计算 RIPEMD-160 哈希:然后对 SHA-256 的输出结果进行 RIPEMD-160 哈希运算,得到一个 160 位的哈希值。

这个过程通常称为 Hash160,因为它结合了两种不同的哈希函数。

详细介绍 Hash160 过程

假设公钥表示为 ( K ),计算 Hash160 的具体步骤如下:

  1. 计算 SHA-256 哈希H1=SHA-256(K)H_1 = \text{SHA-256}(K)

  2. 计算 RIPEMD-160 哈希H160=RIPEMD-160(H1)H_{160} = \text{RIPEMD-160}(H_1)

Hash160 过程的公式

使用 KaTeX 表示:

  1. 计算 SHA-256 哈希: H1=SHA-256(K)H_1 = \text{SHA-256}(K)

  2. 计算 RIPEMD-160 哈希: H160=RIPEMD-160(H1)H_{160} = \text{RIPEMD-160}(H_1)

举例说明

假设公钥 ( K ) 为: [ K = 04b0bd634234abbb1ba1e986e8841855dd45b2a4f7cd9b4c8e0ec6ccf97c71548520b2a6d03cfcc92d5a4a3ac2e4ab7c1b3b9d0b4d43fb2314cd2fce6b81f8d2a ]

步骤如下:

  1. 计算 SHA-256 哈希: H1=SHA-256(04b0bd634234abbb1ba1e986e8841855dd45b2a4f7cd9b4c8e0ec6ccf97c71548520b2a6d03cfcc92d5a4a3ac2e4ab7c1b3b9d0b4d43fb2314cd2fce6b81f8d2a)H_1 = \text{SHA-256}\left(04b0bd634234abbb1ba1e986e8841855dd45b2a4f7cd9b4c8e0ec6ccf97c71548520b2a6d03cfcc92d5a4a3ac2e4ab7c1b3b9d0b4d43fb2314cd2fce6b81f8d2a\right) 假设结果为: H1=0x68c1f88b3a3f3e52c7f9bcb15708fbbb5b4083a12c67d32d25fbb3a1de0b6e8eH_1 = 0x68c1f88b3a3f3e52c7f9bcb15708fbbb5b4083a12c67d32d25fbb3a1de0b6e8e

  2. 计算 RIPEMD-160 哈希: H160=RIPEMD-160(0x68c1f88b3a3f3e52c7f9bcb15708fbbb5b4083a12c67d32d25fbb3a1de0b6e8e)H_{160} = \text{RIPEMD-160}\left(0x68c1f88b3a3f3e52c7f9bcb15708fbbb5b4083a12c67d32d25fbb3a1de0b6e8e\right) 假设结果为: H160=0xb2f37a2391e02b1b01a70c8d6c027d0f431cbdc6H_{160} = 0xb2f37a2391e02b1b01a70c8d6c027d0f431cbdc6

这个 160 位的哈希值 ( H_160 ) 就是公钥哈希。

通过这个过程,公钥被转换为一个更短的哈希值,便于存储和使用,并提高了安全性。