智能合约技术学习part1
一、了解学习区块链
1.什么是区块链?
百度百科解释:区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。
区块链 的特征有 分布式去、中心化、可信任、匿名性、信息不可逆等。
我们可以把区块链理解为一个在互联网上的一个受到所有用户信任的用户账单,这个账单写入后原有数据不能进行更改,写入数据所有人都可以查看、并且这个账单每个人同时都可以拥有。
所以再次总结下来区块链有个主要特点去中心化,可以简单理解为“我们不需要一个领导者,我们人人都是领导者”。
区块链有几个概念
2.区块链应用的技术:
区块链的起源是源于比特币,现主要用于数字货币加密,在维基百科中介绍了区块链是借由密码学串接并保护内容的串联文字(又称区块)
每个区块包含了前一个区块的加密散列(hash函数)、对应时间戳记以及交易资料
这里提到了比特币,我们可以通过比特币的特点再来理解一下区块链技术,首先最大的有点就是匿名性,比特币的匿名性保证了数据的安全,通过分布式去中心化保证了比特币的公平性,
3.区块链技术与密码学知识:
首先我们学习一下信息安全的五要素:1.完整性 2.可用性 3.保密性 4.不可否认性 5.可控性。这五个属性同时也与区块链技术密不可分。
但是在区块链中有两大非常重要的加密技术就是:①散列加密技术和②非对称加密,为什么要用到这两个呢,我们刚才讲了区块链有两个特点分别是分布式,那么我们怎么样去证明这个数据就是属于这一个区块呢又或者是否被篡改过呢?我们就会用到信息认证技术里面的散列加密,同时要保证数据的安全性肯定是要用到加密技术这里我们选用非对称加密
①散列加密:
也就是哈希函数(hash函数)也被称为杂凑函数或散列函数用于检测报文是否被更改。其输入为一可变长度x,返回一固定长度串,该串被称为输入x的hash值(信息摘要),还有更形象的说法是“数字指纹”。
哈希函数是将任意报文压缩到固定长度的二进制串
哈希函数的特性:1.输出的数据长度不变 2.相同的输入的输出结果也必定相同 3.输入内容相似输出的结果也会相差很大 4.输入完全不同的数据也会有低概率哈希值相同 5.不可能通过哈希值返回算出原数据(不可逆)6.计算简单
常见的哈希函数:MD4 MD5 SHA-0 SHA-1 SHA-2
哈希函数在区块中的应用前面说了主要是快速验证和防止篡改。
快速验证:哈希函数在区块链中,生成各种数据的摘要,当比较两个数据是否相等时,只需要比较他们的摘要就可以了。例如,比较两个交易是否相等,只需要比较两者的hash值,快捷又方便。
防止篡改:传递一个数据,要保证它在传递过程中不被篡改,只需要同时传递它的摘要即可。收到数据的人将这个数据重新生成摘要,然后比较传递的摘要和生成的摘要是否相等,如果相等,则说明数据在传递过程中没有被篡改。
区块链中hash函数的演进
Sha全称是Secure Hash Algorithm,是美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列密码散列函数。它经历了SHA-0、SHA-1、SHA-2、SHA-3系列的发展。比特币采用sha256算法属于SHA-2系列,在中本聪发明比特币时是最先进最安全的算法之一。
随着显卡挖矿和矿池的出现,社区担心算力的集中,违背去中心化的原则。于是,莱特币提出了Scrypt算法。莱特币除了此算法外,其它部分完全fork比特币。和sha256相比,此算法需要更多的内存和更长的计算时间,能够抵御矿机。但是此算法没有经过严格的安全审查和全面论证。
所谓的串联算法,同我们初中物理里面所说的串联是同样的道理,就是使用很多种hash算法经过多轮运算,前一轮结果用于后一轮hash的输入。市面上的X11、X13、X15等就是这种算法。
所谓的并联算法,也和物理中的并联差不多,即先将输入用不同的hash函数求解,然后将求解的结果混淆,形成最终的hash算法的结果。
Ethash是值得一提的hash算法。它是以太坊中使用的pow的hash算法。该算法能抵御矿机,基本上能做到ethash挖矿时和CPU性能无关,却和内存大小和内存带宽成正比。该算法的流程如下:
- 对于每一个块,首先计算一个种子(seed),该种子只和当前块的信息有关;
- 然后根据种子生成一个32M的随机数据集(Cache);
- 紧接着根据Cache生成一个1GB大小的数据集合(DAG),DAG可以理解为一个完整的搜索空间,挖矿的过程就是从DAG中随机选择元素(类似于比特币挖矿中查找合适Nonce)再进行哈希运算。
②非对称加密:
也就是公钥密码体制是指一个加密系统的加密密钥和解密密钥是不一样的,或者说一个不能推导出另外一个。其中公钥是用于加密是公开的,还有一个叫私钥用于解密,是保密的。其中具有代表性的也就是区块链的基础RSA公钥密码算法。
RSA公钥密码算法:
RSA算法是一种比较典型的公开密钥加密算法,其安全性建立在“大多数分解和素性检测”这一已知的著名数论基础难题上,即:两个大素数相乘在计算中很容易实现,但是将该乘数的积分分解为两个大素数因子的计算量是相当巨大的,在实际中难以实现。
RSA公钥密码算法加密过程:
步骤 | 说明 | 描述 |
---|
1 | 选择一对不相等且足够大的质数 | p,q | 2 | 计算p,q的乘积 | n=p*q | 3 | 计算n的欧拉函数 | y(n)=(p-1)*(q-1) | 4 | 选择一个与y(n)互质的正整数e | 1<e<y(n) | 5 | 计算出e对于y(n)的模反元素d | de mod y(n)=1 | 6 | 公钥 | KU=(e,n) | 7 | 私钥 | KR=(d,n) |
非对称加密在区块链中主要应用于信息加密、数字签名和登录认证。即是主要应用在区块链数字货币交易中,防止篡改和伪造信息。
信息加密:信息发送者A利用信息接收者B的公钥将信息加密后再发给B,B即可利用自己的的私钥将信息解密。
数字签名场景:则是由发送者A 采用自己的私钥加密信息后发送给B,B使用A 的公钥对信息解密、从而可确保信息是由A发送的。
登录认证场景:则是由客户端使用私钥加密登录信息后发送给服务器,后者接收后采用该客户端的公钥解密并认证登录信息。
4.区块链的分布式数据库
说起区块链经常提到分布式和去中心化,那么什么是分布式呢?分布式在区块链里面有什么应用呢?
首先分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。可以理解为这个账单同时存在与多个人手中,一人改动集体改动。
分布式和去中心化相当于一个父子集的关系,去中心化是分布式的子集,相当于分布式里面包含去中心化这一个特点,当然也可以包含中心化的特点。
分布式算法在现代计算机应用中有几个优点1、稀有资源可以共享;2、通过分布式计算可以在多台计算机上平衡计算负载;3、可以把程序放在最适合运行它的计算机上;
二、以太坊
以太坊英文Ethereum
以太坊的基本概念和工作原理
1.以太坊的特点
以太坊在执行一个称为智能合约的程序;
他的本质是一个基于交易的状态机;
以太坊平台使开发人员能够构建具有内置经济功能的强大的去中心化应用程序(DApp);在持续自我正常运行的同时,他还减少或消除审查,第三方界面和交易对手风险。
2.以太坊的组成部分
P2P网络
以太坊在以太坊主网络上运行,该网络可在TCP30303上寻找,并运行一个名为DΞVp2p的协议
交易
以太坊交易是网络消息,其中包括 发送者、接收者、 值(value)和 数据的有效载荷
以太坊虚拟机(EVM)
以太坊状态由以太坊虚拟机(EVM)处理,这是一个执行字节码(机器语言指令)的基于堆栈的虚拟机
数据库
以太坊的以太链作为数据库(通常是Google的LevelDB)本地存储在每个节点上,包含序列化后的交易状态和系统状态。
客户端
以太坊有几种可操作的客户端软件实现,其中最突出的是Go-Ethereum 和 Parity
3.去中心化应用
基于以太坊可以创建智能合约来构建去中心化应用(简称DApp)
以太坊的构想是成为DApp编程开发平台
DApp至少由 区块链上的智能合约和web前端用户界面
4.代币(Token)
可称做通行证,本意为“令牌”,代表有所有权资产、货币、权限等在区块链上的抽象
可替代性通行证(fungible token):指的是基于区块链技术发行的,互相可以代替的,可以接近无限拆分的token
非同质通证:(non-fungible token):指的是基于区块链 技术发行是唯一的,不可替代的,大多数情况下不可拆分的token,如NFT
5.私钥、公钥和地址
私钥:
以太坊私钥事实上只是一个256位的随机数(2^8位)用于发送以太的交易中创建签名来证明自己对资金的所有权
公钥:
公钥是由私钥通过椭圆曲线加密secp256k1算法单向生成的512位(512/8=64字节)数
补充:椭圆曲线加密secp256k1算法
地址:
地址是由公钥的keccak-256单向哈希,取最后20个字节(160位)派生出来的标识符
|