一、数字货币
目的:便捷、去中心化
切入点:
货币数字化——->交易数字化(用RSA解决)
中心节点记账——>记账去中心化
交易数字化包括:账户数字化(唯一标识问题)、金额数字化、签名数字化(身份认证问题)
记账去中心化(分布式数据完整性问题)包括:谁来记账(矿工)?账本可信(账本完整性保护问题)?
唯一性和身份认证问题可以借助于公钥密码,用公钥作为账户时候可以顺便解决账户唯一性的问题(以RSA为例),以私钥为数字签名。
哈希函数解决账本完整性保护问题
二、账户与签名数字化
公钥密码(非对称密码)与RSA
公钥如何解决身份认证?
公钥e作用:向外界标榜自己的身份——>账户
私钥d作用:对消息生成数字签名——>生成签名
用数字签名向外界表明自己的身份与公钥标榜的身份相符
密钥分发问题(公钥加密、私钥解密):A想给B发文件,A可以用B的公钥把文件加密发给B,B用自己的私钥解密
身份认证问题(私钥加密、公钥解密):A给B发消息,A用自己的私钥将消息加密得到密文(此处的密文就是所谓的数字签名,消息比较长,加密的其实不是消息本身,而是消息的哈希值),A将密文和消息本身传送给B,B用A的公钥解密得到明文,将明文与原始消息对比,一致就说明发送者是A,因为只有拥有与A公钥对应的私钥的人才可以做到一致
RSA相关数学基础:整除、最大公因子(欧几里得算法)、互素、乘法逆元、欧拉函数、欧拉定理
a经过若干次幂再模n后又等于a,若把这个操作拆分成两步,第一步就相当于加密,第二部相当于解密
RSA算法原理:
对RSA的攻击原理:破解私钥的关键是对n做素因子分解
解决攻击方法:让n的素因子变得很难?让n只有两个素因子,且素因子很大
因为素因子分解很难,所以由公钥e计算出私钥d也很难
交易数字化的步骤:
- 用RSA生成公钥e和私钥d,用公e作为自己的账号
- 填写交易信息T:转出转入账户、金额、其他
- 用私钥对交易信息T的哈希值进行加密生成数字签名s,将数字签名s加入交易信息,得到最终的交易信息
其他用户如何验证我的签名是否有效?
用我的账户(我的公钥)对数字签名进行解密,从而得到交易的哈希值,将交易的哈希值和原始的哈希值进行对比,一致则签名有效,不一致则无效(交易信息被篡改或者有人伪造了我的签名)
RSA如何实现账户数字化的唯一性?
三:账本完整性保护
(一)哈希函数
任意长度消息M输入,固定长度h=H(M)输出,称h为M的哈希值
性质:高效、公开、单向性和抗碰撞性
例如:MD5、SHA
应用:消息认证、单项口令文件、入侵检测和病毒检测
(二)挖矿
工作量证明:POW——记账人付出巨大的工作量证明他的账本没有被篡改
我们集体给记账人出一个难题,比如要求所有区块的哈希值都必须小于某个数字n,否则账本不合法
我们允许记账人在每个区块计录的交易信息之外,额外加入一条数据Nonce,记账人寻找合适的Nonce值使得哈希值合法
计算Nonce值并创建区块:挖矿
记账人:矿工
谁记账,给谁奖励比特币
比特币来源:无中生有、交易手续费