2.1 密码学基本概念与安全目标:备料的化验单


2.1 密码学基本概念与安全目标:备料的化验单

密码学的五大安全目标是机密性、完整性、真实性、不可否认性与可用性;支撑它们的原语分为编码、哈希、对称加密、非对称加密与数字签名。区块链对这五味材料的用法与直觉相反:它几乎不用加密来保密账本,而是大量用哈希与签名来保证完整、真实与不可抵赖。本节先校准术语,再看每味材料在链上的岗位。

进料检验前,先纠正一个高频误会

新手最容易把"密码学"理解成"加密",再把"加密"理解成"把数据变成密文"。照这个理解去看比特币会当场懵住:账本完全公开,任何人都能读到所有交易,这算哪门子加密?误会源于把密码学压缩成了机密性这单项目标。真实的密码学是一张化验单,机密性只是其中一行——对于公开账本这种产品,更要紧的化验项是完整性(账本没被偷改)、真实性(转账确是持钥人发起)与不可否认性(签过字就无法耍赖)。备料车间的头等大事,是搞清每味材料对应化验单的哪一行,别拿防腐剂当润滑剂用。

另一个要拆开的混淆是"编码不是加密"。编码(如 Base64)只是换一种写法,任何人都能还原,不提供任何安全;加密必须依赖密钥,没有密钥就无法还原。下面用实验把"编码、哈希、加密"三者一次性区分清楚。

化验单上的五行目标与五味材料

先看化验单,再看材料如何覆盖每一行。

安全目标 含义 被破坏的样子 区块链中的承担材料
机密性 未经授权者读不懂内容 账本或私钥被他人读取 私钥文件加密保管;链上机密交给第 5 章的隐私技术
完整性 内容未被未授权修改 交易金额被偷改、区块被替换 哈希钢印、链式引用、Merkle 根
真实性 数据确实来自声称的来源 他人冒名发起转账 数字签名验签
不可否认性 事后无法否认自己的行为 转账成功后声称"不是我" 签名唯一依赖私钥,公开可复验
可用性 合法用户随时能用 网络分区、垃圾交易 flooding 网络层与共识层(第 3、4 章)

注意最后一行的位置:可用性不是某种材料单独扛得住的,它主要由网络与熔炉工段负责。密码学材料管住前四行。

五味材料的岗位划分:编码负责表示(不做安全承诺);哈希负责指纹(单向、无密钥);对称加密负责高效保密(一把钥匙两用);非对称加密负责密钥分发与保密通信(公钥加密、私钥解密);数字签名负责授权与防抵赖(私钥签、公钥验)。后两者共用同一套数学地基(公私钥对),但用法方向相反。

亲手化验:编码、哈希与加密的对照实验

分别对同一句转账指令做编码与哈希,观察性质差异:

import base64 import hashlib order = "PAY alice 5 BTC" # 编码:人人可逆,无安全性 encoded = base64.b64encode(order.encode()).decode() print("Base64:", encoded) # UAVkgYWxpY2UgNSBCVEMK 之类 print("还原: ", base64.b64decode(encoded).decode()) # 原文照出 # 哈希:单向指纹,改一字全变 h1 = hashlib.sha256(order.encode()).hexdigest() h2 = hashlib.sha256("PAY alice 6 BTC".encode()).hexdigest() print("5 币摘要:", h1[:24], "...") print("6 币摘要:", h2[:24], "...") print("摘要长度:", len(h1), "个十六进制位")

Base64 行会出现"原文照出"——它不保密任何东西;哈希行则演示了两件事:输出固定长度、输入微调导致输出面目全非(雪崩效应,下一节细讲)。再加一段带密钥的加密,补齐三方对照:

def xor_cipher(data: bytes, key: bytes) -> bytes: # 极简对称加密示意:逐字节循环异或 return bytes(b ^ key[i % len(key)] for i, b in enumerate(data)) secret = b"PAY alice 5 BTC" key = b"\x9a\x3c\x77\x01" cipher = xor_cipher(secret, key) print("密文:", cipher.hex()) print("同一把钥匙解密:", xor_cipher(cipher, key)) print("换一把钥匙解密:", xor_cipher(cipher, b"\x11\x22\x33\x44"))

同一把钥匙能还原、换钥匙得到乱码——这就是"保密性依赖密钥而非算法保密"的最小演示。真实的对称算法(如 AES、ChaCha20)在混淆与扩散上做了多层设计,但安全模型相同:算法公开,秘密只在钥匙里(柯克霍夫原则)。区块链账本公开、签名公开、验证公开,唯独私钥保密——整座工厂的安全边界画得极窄,也因此审计得极清。

工程现实:目标如何映射到链上岗位

把化验单带到铸造车间走一圈,看每味材料的实际工位。交易内容在网络上明文广播(机密性让位于可审计性,这是产品定位而非疏忽);每笔交易附 ECDSA 或 Schnorr 签名(真实性、不可否认性);区块头写入本块交易的 Merkle 根(完整性——批量检验);每个区块头嵌上一块头的哈希(完整性——链式焊缝);私钥文件本身用口令对称加密保存在钱包里(机密性的最后阵地)。

⚠️ 工程现场最常见的化验错误:拿哈希当加密用。有人把用户身份信息哈希后上链,以为既隐藏了隐私又留下了凭据。普通哈希对低熵输入毫无抵抗力——手机号、身份证号这类空间很小的输入,攻击者拿字典穷举即可反查。真要隐藏,得用带盐密钥哈希或第 5 章的零知识工具。另一个对称的错误是拿加密当完整性用:只用对称加密、不附认证标签的旧协议模式,攻击者虽读不懂密文,却能翻转密文比特间接篡改明文——这正是认证加密(先认证后解密)被写进现代规范的原因。

攻防边界:化验单上没有"绝对合格"

密码学材料的强度都以"计算上不可行"为口径,而不是逻辑上不可能。哈希的抗碰撞靠输出空间大到碰撞难以寻找;签名的不可伪造依赖私钥空间大到穷举不可行,以及数学难题(椭圆曲线离散对数)没有已知快捷解。化验合格的料,装错了地方照样塌方:随机数源质量差曾让同一私钥在两笔签名中重用随机数,攻击者解方程般推出私钥,早期某安卓钱包的真实事故即源于此;侧信道攻击不破数学,专攻实现的时间与功耗泄漏。

一句话收进工具箱:区块链不靠隐藏取胜,靠"改不动、赖不掉"取胜;机密性这味材料在链上用得节制,隐私场景交给第 5 章的专用产线。

化验单到此填完。下一节钻进第一味主力材料——哈希函数,看这枚钢印如何从数学上做到"改一字,全变样",以及矿工如何把它变成抽奖机。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U