BTC-密码学原理

简介:本文主要介绍了BTC中所用到的SHA256与非对称加密的相关内容及其在BTC中的应用。

1、比特币中的密码学原理

比特币中使用到了Hash与非对称加密算法,其中Hash算法使用的是SHA-256。

1.1 SHA256

SHA256的属性有:collision resistance、hiding、puzzle friendly。

  • collision resistance:按照鸽笼原理,必然有两个输入映射到同一个地址,碰撞是客观存在的(x!=y, H(x)=H(y))。虽然碰撞是客观存在的,但是SHA-256碰撞的几率比地球爆炸还小。注:没有哪个hash函数能被数学证明是collision resistance,例如md5。
  • hiding:hash函数的计算过程是单向的,不可逆的。collistion resisitance 与 hiding 可用于 digital commitment(或称之为digital equivalent of a sealed envelope)。例如:猜测股票涨停。实际运用中,hiding性质的前提是输入空间要足够大,分布要足够均匀。
  • puzzle friendly:指 hash 值的计算事先是不可预测的,仅仅知道输入 x 很难知道 hash 计算后的值。如果需要算出的 hash 值落在某一个范围内,那没有什么好办法,只能逐个的尝试,这就是挖矿中工作量证明的来源。

1.2 非对称加密(Asymmetric encryption algorithm)

非对称加密中的公钥与私钥是成对出现的,其密码学基础是椭圆曲线乘法。在比特币中,公钥类似于我们的银行账号,而私钥就像控制账户的密码或支票上的签名。

  • 私钥:私钥是机器随机产生的一组数字,比特币中随机生成的私钥是256位的二进制数,这是一个非常大的数字。
  • 公钥:是通过椭圆曲线乘法从私钥计算得出,这是不可逆的。

椭圆曲线乘法是密码学中称之为“陷阱门”的一种函数:在一个方向(乘法)很容易计算,而在相反的方向(除法)不可能计算。私钥的所有者可以很容易的创建公钥,然后放心地全世界的共享,确信没有人可以从私钥中逆向计算得出公钥。这个数学技巧成为证明比特币所有权的不可伪造和安全的数字签名的基础。

2、比特币中对密码学的应用

2.1 公钥、私钥

比特币是中的公钥、私钥是本地生成的。私钥主要用于对数据(交易)的签名操作,以证明该交易是经过本人的肯定;公钥用于对签名的验证与生成比特币地址。

2.2 传统的比特币地址

传统比特币地址(以数字1开头的地址)是由公钥经过单向的加密散列算法得到,由公钥生成比特币地址时使用的算法是Secure Hash Algorithm(SHA) 和 RACE Integrity Primitives Evaluation Message Digest(RIPEMD),或者叫做SHA256和RIPEMD160。

A = R I P E M D 160 ( S H A 256 ( K ) ) A = RIPEMD160(SHA256(K)) A=RIPEMD160(SHA256(K))
其中K是公钥,A是生成的比特币地址。

比特币通常都是经过“Base58Check”编码的,以此来提高人工可读性、避免歧义,并防止在地址转录和输入中发生错误。

以下流程图描述了如何从公钥生成比特币地址。

Created with Raphaël 2.2.0 公钥 SHA256 RIPEMD160 公钥散列(20字节/160比特) 带上0x00版本号前缀后进行Base58Check 编码 比特币地址(BaseCheck58 编码的公钥散列)

注意:比特币地址与公钥不同。比特币地址是由公钥经过单向的散列函数生成的。

2.3 P2SH(pay-to-script hash)

P2SH是一种比特币地址(以数字3开头的比特币地址),P2SH地址是由一个交易脚本创建的,它定义了谁可以消费这个交易输出。

h a s h = R I P E M D 160 ( S H A 256 ( s c r i p t ) ) hash = RIPEMD160(SHA256(script)) hash=RIPEMD160(SHA256(script))

  1. P2SH与传统比特币地址的区别?
    传统的比特币地址来源于公钥,而公钥来源于私钥。当用户将比特币发送到传统的比特币地址后,比特币只能通过相应的私钥签名和公钥散列值后才能消费。而P2SH指定比特币交易中受益人为一个脚本的散列,而不是公钥的所有者。
  2. P2SH函数最常见的是现实多重签名地址脚本。注意,P2SH不一定和多重签名的标准交易一样。虽然P2SH地址通常都是代表多重签名,但也可能是编码其他类型的交易脚本。

2.3 关于私钥如何保存

私钥的保密需求是毋庸置疑的。

  1. 保存在比特币钱包中。但是若遇到升级或重装钱软件,此时需要将密钥转移另一个钱包。
  2. 保存在U盘中。U盘可能丢失或者被盗。
  3. 保存在纸张上,称之为纸钱包。用户可以采用对密钥加密的方式,例如BIT-38协议加密方式,BIT-38结合自己设置的密码(口令)与私钥生成加密后的私钥,加密后的私钥可以用口令解密,得到原来的私钥。这样就可以保证加密后的私钥在网络上的传输,从而减少了私钥丢失的危险(除非你忘记了加密后的私钥或者口令)。

资料来源:
[1]: Mastering Bitcoin:Programming the Open Blockchain
[2]: 北京大学肖臻老师《区块链技术与应用公开课》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值