3,区块链加密(react+区块链实战)
- 3.1 哈希
- 3.2 pow-pos-dpos
- 3.3非对称加密
- (1)对称加密AES
- (2)非对称加密RSA
- 3.4 拜占庭将军
- 3.5 P2P网络
- 3.6 区块链
3.1 哈希
密码学,区块链的技术名词
Hash woniu
将其变为hash值
数据指纹
可以将任意长度的数据转换成固定长度的数据
每次对woniu进行哈希得到的值是相同的
逆向困难,即下方的字符串无法逆向回到woniu
输入改变一点,整个哈希会发生非常大的变化
输入敏感
输入碰撞
要想找到某个字符的hash也是该字符否hash几乎是不可能的
3.2 pow-pos-dpos
上节课讲到了哈希
数据校验的应用,如发表一些信息或者软件,信息会被篡改,操作系统数据会被篡改,
在官网上放着哈希,看下周软件是否哈希和官网一样判断是否被篡改
共识,中心化无共识,只有中心说了算
无中心服务器时,如何让各个人达成一致
共识机制
1,POW工作量证明(全网随机出一道数学题,大家一起做,做出来,课卖100元,结果验证很很简单,比较原始,计算消耗能源大)
2,POS权益证明:不是谁干的活多谁转的多,类似公司,谁的权益大谁赚的多,如以太坊,谁的币多,谁拥有的时间越长,谁就获得
3,DPOS代理权益证明,全网广播证明太难,类似人大代表,只需要一部分代表同意即可,如EOS,定期精选EOS,可能会贿赂选节点,这个超级节点的权利
3.3非对称加密
现代科技与密码学分不开
有些人会篡改一些信息
如支付、交流、军事等
需要加密保护信息
最早字母表
(1)对称加密AES
只有一个秘钥,私钥
私钥会共享
发送逻辑,发送者私钥加密信息,发送密文, 接收方就用相同的私钥解密
此时私钥是相同的,计算效率比较高,前提是需要私钥共享
(2)非对称加密RSA
蜗牛 私钥加密信息(私钥签名)+公钥
小明这:收到信息+加密后的签名+公钥(公钥可以公开,只用来校验,公钥可以使用私钥计算得到) 通过公钥验证信息是否合法(只要证明信息合法,则信息明文也就无所谓了)
此时在传递需要认证的消息时,就不用事先共享私钥了,避免风险
这样信息可以证明其正确的,确实由蜗牛发出来的,第二个自己想抵赖也无法抵赖
在此里面也继承了非对称加密的代码,用来测试
公钥可以根据私钥计算得到,不可逆
私钥就是一个随机字符串
1,使用私钥计算公钥如下(getpub方法,woniu为私钥,计算的公钥如下)
2,对某个信息使用私钥进行签名(sign方法,信息-imoocisgood,私钥woniu,得到签名的信息如下)
3,发送消息将“imoocisgood”+签名的信息+公钥三个信息一起发送出去,接收方会接到这三个信息进行校验
4,Verify
区块链中每笔交易的模型
从谁转给谁,转了多少钱,会拼接成字符串,使用私钥加密,对方使用公钥验证解密,偷懒公钥直接使用adress地址,就不用再私发公钥了
本地是随机字符串生成了私钥,再使用私钥生成公钥
本地PUB方法得到本地的公钥,PRV得到本地的私钥
在挖矿,查询余额,转账时使用的都是pub公钥
Mine挖矿
Balance查询余额
3.4 拜占庭将军
当一些节点被黑,发出了错误的信息这怎么解决
拜占庭将军想要在某个时间一起进攻,这种情况就要考虑有些将军叛变,有些命令被篡改
怎么保证只要忠诚的将军收到命令后执行此命令,若有反叛,防止篡改
问题有很多解答
这有容错的机制
分布式系统肯定有的被黑,有的被挂,POW怎么保证
等等
多个将军的系统,无论叛军怎么做,都保证忠诚的将军最后发起进攻
这里就不多介绍了
3.5 P2P网络
点对点的系统
若在电脑下载一个比特币的软件,打开后就成为了一个比特币的节点,但是并没有一个公网IP,但别的网络如何和你进行通信
这就使用了P2P的网络系统
P2P、电驴等P2P的,最早出现原因,将某个电影放在服务器,如果好多成千上百人来访问服务器,服务器的带宽是扛不住的,就使用了点对点的系统,来我这告诉你别的节点文件在哪,去找其下载,这就减轻了中心服务器的压力
有启动节点
像以太坊的完全去中心化的,使用了DHT的kademlia的网络
自己实现的
我们的电脑没有公网ip,只有本地192.168的
我们访问外网的时候,网关会临时给一个公网端口,通过这个端口与外网进行交互
P2P交互逻辑,还是要UDP实现一个简单的P2P网络
加入节点时都会更新本地区块链
当加入新的节点会和所有的节点打个招呼
PEER方法,得到节点信息
机器之间通过中心服务器,网关键加入白名单,为了方便后续的交流沟通
3.6 区块链
分布式,系统在多个节点上
地址区块
地址就是公钥,区块包含什么信息
Detail 44查看某个区块
Index
Previoushash 上一个哈希值
Timestamp 时间戳
Nonce 随机数的难度值
Hash hash的前5个人是0,前面的0越多难度越大
Data 转账信息,这里是只有挖矿的信息故只有一条转账
这就是一个区块的详情
该内置了一个方法update可以用来篡改某个区块的信息,将某个区块的转账金额加1
这里对第40个区块进行篡改
输入bc方法,可以查看完整的区块链,如下找到第40个区块,数据已经被改了
这里的valid方法校验整个区块是否合法
每个区块都有previoushash及hash,而hash是由index,data,previoushash等等得到
使用方法mineblock 40修复第40个的区块,此处的修复是将不合法的第40个区块变为合法,但第41个就不合法了,需要一个个向后修复
虽然修复了第40个区块,但41就不合法了,越是前面的区块越不容易修复
篡改很难几乎不可能的任务
智能合约,现在的大部分的去中心话的应用都是部署在以太坊上的智能合约,后面会有章节专门介绍,转账信息由谁转给谁
后面也会有章节专门介绍,现在比特币只是谁转给谁几个币等,智能做币
而以太坊有图灵完毕的虚拟机,智能合约就是一定地址,一定的代码,在符合条件的时候执行此代码,代码中可以抽奖、预测、游戏等,存在链上,完全去中心化,不受人为干预的
后面会介绍实战开发
钱包
既然币,存储各类数字货币的钱包
所能掌握的就是私钥,会将私钥放在脑子、放在纸上、放在电脑中这些就是钱包,放到脑子记不住,就需要一个钱包来管理
数字货币就不详解了
比特币使用merkle树来计算hash
下一章就是nodejs区块链实战