加密货币是数字化货币的一种形式,其安全性和运作机制依赖于密码学技术。与传统货币不同,加密货币无需中央机构(如银行)来管理发行和交易验证,而是通过技术手段确保系统的安全性和一致性。
密码学基础
密码学是加密货币的核心技术之一,它通过数学协议确保系统规则的安全执行。加密货币主要依赖两种密码学原语:密码学哈希函数和数字签名。
密码学哈希函数
哈希函数是一种数学函数,具有以下三个基本属性:
- 输入可以是任意长度的字符串
- 输出是固定长度的字符串(通常为256位)
- 计算高效,对于n位字符串的计算时间为O(n)
密码学哈希函数还需要满足三个安全属性:
1. 抗碰撞性
抗碰撞性意味着无法找到两个不同的输入x和y,使得H(x)=H(y)。虽然从数学上讲碰撞必然存在(因为输入空间大于输出空间),但找到碰撞在计算上是不可行的。
应用:消息摘要
抗碰撞性使得哈希输出可用作消息摘要。例如,在文件存储系统中,用户只需保存文件的哈希值,即可验证下载的文件是否与原始文件一致。
2. 隐藏性
隐藏性要求给定哈希输出y=H(x),无法推算出输入x。为实现这一属性,输入必须来自高最小熵分布(即非常分散的分布)。
应用:承诺方案
承诺方案类似于将值密封在信封中:你承诺了一个值但保持其秘密,之后可打开信封揭示该值。使用哈希函数实现的承诺方案为:commit(msg, nonce)=H(nonce‖msg),其中nonce是随机数。
3. 谜题友好性
谜题友好性意味着对于任意输出值y,如果k来自高最小熵分布,则无法在远小于2^n的时间内找到x使得H(k‖x)=y。
应用:搜索谜题
搜索谜题要求在大空间中寻找解,没有捷径可走。比特币挖矿就是一种计算谜题,利用了哈希函数的这一特性。
SHA-256算法
比特币主要使用SHA-256哈希算法,它采用Merkle-Damgård结构将固定长度压缩函数转换为可处理任意长度输入的哈希函数。该算法接受512位块的处理,产生256位输出。
哈希指针与数据结构
哈希指针不仅指向数据存储位置,还包含数据的加密哈希值,从而允许验证数据是否被篡改。
区块链
区块链是使用哈希指针构建的链表结构。每个块包含数据指向前一个块的哈希指针。只要记住链头的哈希指针,就能检测整个链中的任何篡改尝试。
Merkle树
Merkle树是使用哈希指针构建的二叉树结构,允许高效验证大量数据的完整性。它的优势在于能够提供简洁的成员证明,只需显示从该数据块到根的路径上的块,验证时间与空间均为对数级。
排序Merkle树还可证明非成员身份,通过显示目标值前后的两个连续项来证明某项目不在树中。
数字签名
数字签名是手写签名的数字模拟,必须满足两个属性:
- 只有你能制作自己的签名,但任何人都能验证其有效性
- 签名与特定文档绑定,不能转移到其他文档
数字签名方案包含三个算法:
- 生成密钥对:(sk, pk) := generateKeys(keysize)
- 签名:sig := sign(sk, message)
- 验证:isValid := verify(pk, message, sig)
ECDSA算法
比特币使用椭圆曲线数字签名算法(ECDSA),基于secp256k1曲线,提供128位安全性。关键尺寸为:
- 私钥:256位
- 未压缩公钥:512位
- 压缩公钥:257位
- 签名:512位
使用ECDSA时,良好的随机源至关重要,否则可能泄露私钥。
公钥作为身份
公钥可视为系统中的一个身份实体。任何人都可以随时生成新的密钥对来创建新身份,实现去中心化身份管理。在比特币中,这些身份称为地址,实际上是公钥的哈希值。
尽管这些身份看起来随机且与真实世界身份无关,但通过分析行为模式可能推断出真实身份,这是加密货币隐私问题的核心。
两种简单加密货币
Goofycoin
Goofycoin是最简单的加密货币,只有两条规则:
- Goofy可以通过签署声明创建新硬币
- 硬币所有者可以通过签署声明将硬币转让给他人
但Goofycoin存在双重支付问题,无法防止同一硬币被多次花费。
Scroogecoin
Scroogecoin通过引入由Scrooge维护的只追加账本(区块链)来解决双重支付问题。交易分为两种:
- CreateCoins:由Scrooge签署创建新硬币
- PayCoins:消费一些硬币并创建等值的新硬币
Scroogecoin虽然解决了双重支付问题,但存在中心化问题:Scrooge拥有过大权力,可以拒绝服务、收取交易费用或随意创建新硬币。
去中心化加密货币需要解决的核心问题是:如何在不依赖中心权威的情况下,让所有用户就交易历史达成共识?这正是比特币要解决的问题。
常见问题
加密货币为什么需要密码学?
密码学提供了无需中央机构即可强制执行系统规则的技术手段,包括防止篡改、确保交易不可否认性和创建新货币单位的规则。
哈希函数在加密货币中起什么作用?
哈希函数用于创建数据摘要、构建数据结构(如区块链和Merkle树)、实现承诺方案和挖矿谜题,是多种加密货币功能的基础。
数字签名如何保证交易安全?
数字签名确保只有硬币所有者才能转让硬币,且签名与特定交易绑定,无法被重用或篡改。
公钥作为身份有什么优势?
允许用户自行生成身份而无需中央注册机构,提供了去中心化身份管理的能力,用户可以创建多个身份或保持一定程度的匿名性。
Goofycoin和Scroogecoin的主要区别是什么?
Goofycoin简单但存在双重支付问题;Scroogecoin通过中心化的只追加账本解决了双重支付问题,但引入了中心化风险。
比特币如何解决Scroogecoin的中心化问题?
比特币通过去中心化共识机制消除了中心权威,让所有网络参与者共同维护交易账本并就其有效性达成一致。