BTC-密码学原理

哈希

一、哈希函数基础概念

哈希函数(Hash Function)是一种将任意长度的输入数据转换为固定长度输出的数学函数。简单来说,它就像一个"数字指纹生成器",无论输入多大,输出都是固定长度的字符串。

通俗解释:想象一下,你有一本厚厚的《红楼梦》,无论你把这本书放在哪个地方,都能通过一个独特的"指纹"(哈希值)来标识它。这个指纹很短,但能唯一标识整本书。

二、加密哈希函数的三大特性

在比特币中,哈希函数是核心密码学工具,它必须满足三个关键特性:

1. 抗碰撞性(Collision Resistance)

定义:很难找到两个不同的输入,使得它们的哈希值相同。

通俗解释:就像世界上没有两片完全相同的雪花,哈希函数也应保证不同内容产生不同指纹。

技术细节

  • 由于输入空间远大于输出空间,理论上碰撞不可避免
  • 但好的哈希函数能让找到碰撞的计算量极大,几乎不可能
  • 比特币中使用的SHA-256算法,碰撞概率极低,需要约2^128次计算才能找到碰撞

应用场景:比特币中用于验证交易完整性。如果有人篡改交易内容,哈希值会改变,系统能立即检测到。

疑问1. 什么是输入空间和输出空间?
  • 输入空间:所有可能的输入数据的集合。在哈希函数中,输入可以是任意长度的任何数据(文本、图片、视频等),这个空间几乎是无限大的。

  • 输出空间:哈希函数产生的哈希值的集合。例如,SHA-256的输出是256位,所以输出空间大小为2^256(约1.1579×10^77)。

2. 为什么输入空间远大于输出空间?
  • 哈希函数的输出长度是固定的,比如SHA-256固定输出256位。
  • 但输入可以是任意长度的任何数据,理论上输入空间是无限的。
3. 鸽巢原理(Pigeonhole Principle)的解释

鸽巢原理是一个简单的数学原理:如果你有n个物品和m个容器,当n > m时,至少有一个容器包含多于一个物品。

在哈希函数中:

  • 输入数据(物品)数量:几乎无限
  • 哈希值(容器)数量:固定,如2^256

因为输入数量远大于输出数量,所以必然会有至少两个不同的输入产生相同的哈希值,这就是"碰撞"。

4.SHA-256 的碰撞抵抗强度

SHA-256 的输出是 256 位(即 2^256 种可能的哈希值)。根据生日攻击,要找到一对碰撞,平均需要尝试大约 2^(n/2) 次,其中 n 是哈希值的位数(这里 n=256)。

2^128 是一个天文数字,大约是 340 亿亿亿亿(3.4×10^38)。即使使用全世界最强大的计算机,也需要远超宇宙年龄的时间才能完成这个数量的计算。

因此,SHA-256 的碰撞抵抗强度是 128 位安全级别

2. 隐藏性(Hiding)

定义:从哈希值无法反推出原始输入。

通俗解释:就像把一锅汤煮成"指纹",你无法从指纹还原出汤的成分。

技术细节

  • 哈希函数是单向的,不可逆的
  • 成立前提:输入空间足够大,分布均匀
  • 例如,SHA-256的输出是256位,输入空间极大,暴力破解几乎不可能

应用场景:比特币中用于"数字承诺"(Digital Commitment)。例如,预测股市走势时,先公布哈希值,再公布预测内容,证明预测是在结果之前做出的。

3. 谜题友好性(Puzzle Friendly)

定义:哈希值的计算事先不可预测,必须通过尝试才能找到特定条件的输出。

通俗解释:就像猜密码,你不知道哪个密码能打开门,只能一个一个试。

技术细节

  • 没有捷径,必须通过穷举法
  • 与"工作量证明"(PoW)直接相关

应用场景:比特币挖矿的核心原理。矿工需要不断调整随机数(Nonce),直到找到满足特定条件的哈希值。

三、BTC中使用的哈希算法

1. SHA-256(Secure Hash Algorithm 256)

特点

  • 输出长度:256位(64个十六进制字符)

  • 用途:比特币区块头哈希、交易哈希、挖矿

  • 为什么选择它:安全性高,抗碰撞性强

    输入:"Hello, Bitcoin!"
    SHA-256输出:
    "0b9d2a1d6c6d5c8a4f3e7c6d2a1d6c6d5c8a4f3e7c6d2a1d6c6d5c8a4f3e"

2. RIPEMD-160

特点

  • 输出长度:160位

  • 用途:生成比特币钱包地址

  • 为什么选择它:在生成地址时,与SHA-256结合使用

    输入:"04a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
    RIPEMD-160输出:
    "5e8d9a4b3c2f1e0d9a8b7c6d5e4f3a2b1c0d9e8f"

签名

核心比喻:玉玺与印鉴

  • 你的私钥 = 玉玺上独一无二的雕刻纹理。这是绝密,只有皇帝(你)持有。

  • 你的公钥 = 根据玉玺纹理制作出的公开"印鉴图案"。任何人都可以拿到这个图案,用来核验。

  • 你的地址 = 印鉴图案的"编号"或"二维码"。一个更短、更方便公开分享的收款标识。

  • 交易信息 = 一份需要颁布的圣旨(内容:"朕将100两黄金赐予爱卿张三")。

  • 数字签名 = 用玉玺在这份具体圣旨上盖出的、独一无二的"朱砂印"

一、非对称密码学基础

1. 私钥:你的终极秘密

  • 专业上说:一个随机生成的256位二进制数(介于1到约10^77之间)。宇宙中的原子数大概在10^80个,所以猜中你的私钥概率极低。

  • 通俗理解 :就像在1到"全宇宙沙子总数"之间,随机挑一个数字记在你的脑子里。这就是你的全部权力,丢了它,你的钱就永远找不回了;泄露它,你的钱就是别人的了。

2. 公钥:由私钥推导而出的公开锁孔

  • 专业上说 :通过 椭圆曲线乘法(ECDSA的基础) 这个单向函数计算得出。公式 公钥 = 私钥 * GG是椭圆曲线secp256k1上一个公认的起点。

  • 通俗理解 :有一个设计极其精巧的、只能单向运转的"机器"。你把你的私钥数字 喂进去,机器会吐出一个复杂的几何图形(公钥)。全世界都能看到这个图形,但谁也无法通过这个图形反推出你当初喂进去的数字是什么。这就是数学上的"单向门"。

3. 地址:公钥的压缩快递单号

  • 专业上说:对公钥进行SHA256和RIPEMD160两次哈希运算,再进行Base58Check编码得到。用于公开收款。

  • 通俗理解:那个几何图形(公钥)太长了,不方便传播。我们就把它扔进一个"粉碎搅拌机"(哈希函数),出来一串固定长度的、看似乱码的字符串。这个字符串就是地址。它也是单向的,无法反推。

关系链
私钥(绝密数字) → [单向椭圆曲线机器] → 公钥(公开的几何图形) → [单向哈希搅拌机] → 地址(公开的收款码)

这个链条的单向性是比特币安全的根基。


二、颁布圣旨------交易的签名过程

假设你要转1个BTC给朋友。你需要创建一笔交易,并对它进行"玉玺盖印"。

步骤1:创建待签名消息

你写好了交易内容:"从我的地址A(这笔钱之前是锁给我的),转1个BTC到地址B,找零0.5个BTC回到我的新地址C。"

  • 关键点 :在签名前,比特币软件会做一个特殊处理:它会把你输入中原本应该放签名的地方,替换成上一笔交易锁定这笔钱的脚本 (里面包含你的公钥哈希)。这样做的目的是为了精准地声明:"我正在动用那一笔特定的钱。"

步骤2:哈希运算

将上面这份"圣旨草稿"通过SHA256算法计算两次,得到一个256位的"数字指纹"(哈希值 z)。

  • 通俗理解:给这份圣旨做一个极其灵敏的"DNA检测"。哪怕圣旨上改一个标点符号,这个"DNA指纹"都会完全不同。

步骤3:生成签名

现在,用你的私钥 和刚才的"DNA指纹" z,运行ECDSA签名算法。这个算法会输出两个数字 (r, s),合起来就是你的数字签名

  • 专业细节 :算法内部会引入一个随机数(k),确保每次签名都不同,防止被追踪或破解。r 是椭圆曲线上一个临时点的坐标,s 是一个由私钥、指纹和随机数计算出的值。

  • 通俗理解 :你的玉玺(私钥)和这份圣旨的DNA指纹(z)一起,在一个特殊的、带有随机纹理的印泥里蘸了一下,然后盖在圣旨上,形成了一个独一无二的、无法仿制的朱砂印(签名 (r, s)。即使是同一份圣旨,两次盖印的微观纹理也会不同,但都能被同一个"印鉴图案"验证。

步骤4:封装并发送

将这份盖好朱砂印的圣旨(交易),连同你的公开印鉴图案(公钥),一起广播给比特币网络。

三、全网的验证过程

任何一个比特币节点(好比朝堂上的文武百官)收到你的交易后,都会进行严谨的核验:

  1. 提取要素 :从交易中取出三样东西:公开的印鉴图案(公钥K)朱砂印(签名 (r, s))圣旨文字(交易信息)

  2. 重现指纹 :用同样的方法(步骤1&2),对圣旨文字进行 完全相同的 "DNA检测",得到它认为的指纹 z'

  3. 数学核验 :启动ECDSA验证算法。这是一个纯粹的数学公式 。它将 公钥K签名(r, s)计算出的指纹z' 代入公式进行运算。

  4. 裁决时刻

    • 如果公式成立:那就证明了两个铁的事实:

      • 这个朱砂印,必须且只能由持有对应玉玺(私钥)的人盖出。

      • 这份圣旨的DNA指纹与盖印时完全一致,内容自盖印后从未被篡改

    • 如果公式不成立:要么是玉玺不对(私钥无效),要么是圣旨被调包(交易被篡改)。交易将被立即驳回。

关键的精妙之处 :验证者完全不需要知道你的私钥是什么。他们只需要你的公钥和签名,通过纯粹的数学计算,就能以极高的确定性确认你的身份和交易的完整性。这就是非对称密码学的魔力。

四、高级特性与安全深析

1. 签名类型(SIGHASH):给圣旨的哪部分盖印?

  • ALL(默认):玉玺盖在整个圣旨上,所有内容(输入、输出)都已确认,不可更改。

  • NONE :玉玺只盖在"朕已阅"这部分,不锁定收款人。危险! 别人可以改掉你的收款地址。

  • SINGLE :玉玺盖在朕已阅和指定的一个收款人上。

  • ANYONECANPAY:可以和上面组合。意思是"朕这部分钱已经同意动了,其他人也可以往这笔交易里加钱"。用于构建复杂交易。

2. 为什么绝对安全?(基于的数学难题)

  • 椭圆曲线离散对数问题 :已知 公钥 = 私钥 * G,想从公钥反推私钥,在现有计算能力下需要数亿年。这是私钥安全的基石。

  • 哈希函数的抗碰撞性:无法伪造另一份不同的"圣旨",使其DNA指纹和原版一模一样。这是交易不可篡改的基石。

3. 对未来的考量(量子计算)

量子计算机理论上能破解椭圆曲线密码(通过秀尔算法)。但比特币社区早已关注:

  • 地址是哈希过的:量子计算机无法直接从地址反推公钥。

  • 升级能力:如果危机临近,比特币可以通过软分叉升级到抗量子的签名算法(如基于哈希的签名)。你的资金只需要在升级后用新算法进行一次交易即可保全。

总结:比特币签名的精髓

比特币的签名系统,是一套将 "绝对权力归于私钥""公开验证无需信任" 完美结合的杰作。它用最严谨的数学,在去中心化的混沌世界里,建立了坚不可摧的身份与授权秩序。

你可以这样向任何人概括

"比特币的签名,就像你用一把全世界只有你知道密码的隐形钥匙,在一张交易单上签下了一个用数学公式生成的、独一无二的魔法印章。全网任何人都能用公开的'解密板'(公钥)来验证这个魔法印章的真伪,但谁也造不出第二枚。"

相关推荐
Web3VentureView3 小时前
培养全球Web3人才:SYNBO商学院正式启动运营
网络·金融·重构·web3·区块链
小明的小名叫小明3 小时前
区块链核心知识点梳理(8)-钱包与账户体系
区块链
小明的小名叫小明3 小时前
区块链核心知识点梳理(9)-加密算法详解
区块链
焦点链创研究所4 小时前
Fusaka 升级:以太坊的 “数据革命”,而非简单扩容
区块链
小明的小名叫小明4 小时前
区块链核心知识点梳理(7)-Gas 机制与优化
区块链
小明的小名叫小明5 小时前
区块链核心知识点梳理(面试高频考点5)-以太坊交易参数详解
区块链
L、2187 小时前
Flutter + OpenHarmony + 区块链:构建去中心化身份认证系统(DID 实战)
flutter·华为·去中心化·区块链·harmonyos
小明的小名叫小明8 小时前
区块链核心知识点梳理(10)- Layer2 解决方案
区块链
旺仔Sec9 小时前
2026年河北省职业院校技能大赛“区块链技术应用”竞赛样题
区块链·智能合约