区块链快速入门
文档
Wiki
区块链基础 大纲
学习区块链,要解决的问题:
哈希算法
非对称加密算法,例如RSA,ECC椭圆曲线加密
数据结构 例如 tree
分布式架构,分布式架构中经典的CAP理论。分布式账本。
P2P网络通信
比特币的一个区块中,包含了什么信息?
一个区块是怎样产生,怎样加到链上的?
P2P系统的共识算法有哪些?比特币采用的Pow算法是怎样实现的?
每个节点中记录了多少区块链的信息?轻节点和全节点的区别?
比特币源码大部分是使用C++开发的。
比特币脚本是一种独特的语言
比特币钱包可以用任意编程语言实现,用Java也可以。
以太坊平台编程语言是,其风格与类似。
框架对Go语言的支持比较友好。
Rust语言是非常新的一门语言,有其独特优势。
哈希算法
1, 什么是哈希算法?
哈希是hash的音译,也翻译作散列函数,不是一种固定的算法而是一种思想。
哈希算法可以把任意长度的输入,经过散列算法算出固定长度的输出。
典型的散列函数有无限的定义域,和有限的值域。哈希算法是不可逆的()。
并非所有哈希算法都是均匀散列的,但为了减少哈希碰撞,应该把哈希算法设计为均匀散列。
2, 有哪些常用的哈希算法?
MD5,SHA-1,SHA-2系列(包括SHA-256)
3, 比特币采用的是什么哈希算法?
SHA-256
4, 经过SHA-256算法的计算会生成多少位的数字?
64位16进制数字。
5, 什么是哈希碰撞?
对于给定的哈希函数和X,计算出H(X),若找到了Y≠X,且H(Y)=H(X),则称之为哈希碰撞。
哈希碰撞是无法避免的,但可以足够难。如果一种哈希算法的人为寻找哈希碰撞足够难,则
称为 。
6, SHA-256具备哪些性质?
SHA-256是一种哈希算法,所以首先具备的特性,
而且使用SHA-256算法是很难人为制造哈希碰撞的,代价足够大,所以具备 特性
从上述两个特性推测,我们能够实现
这也是比特币采用这种哈希算法的原因。
此外比特币还要求 特性,就是说给定一个哈希值范围,我们无法预测输入是怎样才能满足
哈希值属于该范围。
7、哈希算法在比特币中的应用
哈希指针,默克尔树。
8、为什么通过哈希值查询速度很快
因为区块链系统中维护了一个,以哈希值为key,value中记录了索引主要信息。
参考:现在有区块的哈希值,请问如何检索区块
比特币(或其他公链的)源码。
椭圆曲线加密
0,非对称加密算法需要解决什么类型的数学问题?
要解决正向计算很简单(多项式时间复杂度),而逆向计算很难(指数级时间复杂度)的问题。
主流的非对称加密算法有RSA,ECC等。
1,什么是公钥私钥?有什么作用?
公钥私钥是一对儿密钥,用于对明文信息加解密。其中公钥是公开给外界的,
私钥是只有自己知道的,需要保密 。公钥加密的消息只有用私钥才能解密。
私钥加密的信息只有用公钥才能解密。
2,非对称加密的加解密过程是怎样的?
例如A给B发信息,需要途径C,在不加密
的情况下,C能看到A对B发的信息内容。而非对称加密的过程是这样的,B公开
公钥,外界包括A,C都能获得B的公钥,A想给B发信息,首先用B的公钥对明文
进行加密并交给C,C没有解密方法,看不到信息内容,交给B,B用自己的私钥进行解密,
获得信息内容。
3,非对称加密签名算法的过程是怎样的?
A如何证明发出的消息是A发出的,而不是别人?
首先A用自己的私钥对信息的哈希值进行加密,哈希值和密文发送给B,B使用公钥解密,
与哈希值对比,一致则证明是A发出的,不是别人。
4,椭圆曲线加密算法中的椭圆曲线具体指什么?
由方程描述的曲线:y²=x³+ax+b 其中4a³+27b²≠0
5,为什么密码学上不直接使用椭圆曲线,而是使用有限域上的椭圆曲线?
实数域的椭圆曲线是连续的,有无限个点,运算过程不精确。而密码学要求有限个点,要求运算精确。
其方程为:y²=x³+ax+b mod p 其中4a³+27b²≠0 mod p
p 为质数,x y a b 为小于p的非负整数。
6,如何根据椭圆曲线上的G点和给定的k,计算kG点?
在G点作切线,与椭圆曲线交叉于A点,则A关于x轴的对称点为2G点。
连接G和2G点作直线,与椭圆曲线交叉于B点,则B关于x轴的对称点为3G点。
依次类推,直到求出kG点。
7,如何根据有限域椭圆曲线的G点和给定的k,计算kG点?
相关公式如下:有限域GF§上的椭圆曲线y² = x³ + ax + b,若P(Xp, Yp), Q(Xq, Yq),且P≠-Q,
则R(Xr,Yr) = P+Q 由如下规则确定:
Point (P,Q){//伪代码
Xr = (λ² - Xp - Xq) mod p//求R点的X值
Yr = (λ(Xp - Xr) - Yp) mod p//求R点的Y值
其中λ = (Yq - Yp)/(Xq - Xp) mod p(若P≠Q), //P≠Q时求参数λ
λ = (3Xp² + a)/2Yp mod p(若P=Q) //P=Q时求参数λ
R(Xr,Yr);
Point G1 = new Point(0,1); //举例说明,求G1(0,1)点的kG1
Point kG1 = new Point(0,1);
for(int i=0;i kG=(kG1,G1); //多次循环,调用k次求得kG
8,有限域椭圆曲线加密算法中的公钥私钥分别指什么?能否根据公钥和G计算私钥?
k和kG,其中公钥kG记为K。
根据私钥计算公钥难度较低(多项式计算),
根据公钥和G计算私钥难度为指数级,几乎不可能。
9,有限域椭圆曲线加解密的过程是怎样的?
明文记为椭圆曲线的点M(明文嵌入,有相关算法支持)
形成一个随机数r
加密者已知:M r G K
加密过程是形成点对C={rG,M+rK}
解密者收到C,已知k,G
解密过程:M+rK-k*rG=M+rkG-rkG=M
10,有限域椭圆曲线签名加解密过程是怎样的?
10.1、发送过程:
发送者(已知私钥kimToken钱包官网,公钥K = kG,G点(x,y))有消息M以太坊和比特币区块链钱包,首先对M求哈希h,并准备一个随机数r。
s = (h+kx)/r,签名{rG,s}
发送M和签名{rG,s}给接收者。
10.2、验证过程:
验证者已知:公钥K,G点(x,y),收到的消息M,求得M的哈希值h。
求(hG+Kx)/s = (hG+kGx)r/(h+kx) = rG(h+kx)/(h+kx) = rG
若求得的rG和接收到的rG一致,则证明发送者身份真实。
10.3、在区块链系统中的实际应用:
签名发送者就是账户的实际拥有人,签名并发送的过程就是发起一笔交易的过程。
验证者就是矿工,验证过程就是打包区块并记账的过程。
11,比特币选择的是什么曲线?
实际应用中,我们并不需要关心椭圆曲线的众多参数如何选取(要选对参数对于普通使用者来说
并不现实),只要从密码学家们精心挑选的一堆曲线中选择一个就行了。一般来说曲线,
是比较常用的,比特币选择则是因为它效率较高,并且其参数是可预测的,
降低了包含后门的可能性。
G点怎么取?
比特币中的G点是一个常数,对于所有比特币用户来说都是同一个。
In form G is given by:
G = 02
and in form it is:
G = 04
参考:比特币(BSV)知识库:比特币协议-G(椭圆曲线基点)
12,比特币的钱包地址和公钥有怎样的关系?
钱包地址是公钥经过哈希和编码生成的,详见钱包地址生成图。
参考:
椭圆曲线加密算法
比特币地址详解
关于密码中的RSA算法和ecc(椭圆曲线)算法加密过程是怎样的?
CAP BASE
CAP
C 一致性
A 可用性
P 分区容错性
首先要理解分区容错性:P成立:容:允许。允许分区,允许犯错。
也就是说允许任意节点之间的网络故障,即节点之间传输的消息丢失这种情况出现。
P不成立:不允许任意节点之间的信息传输丢失。
在分布式系统中,节点之间传输信息丢失是无法避免的,你没法保证网络那头不会停电,
也没法知道他掉线是因为他妈妈拔了网线。
所以分布式系统一定要分区容错,允许分布式系统中的节点宕机掉线。
C 是一致性,即分布式系统中的各个节点的数据应保持一致。
如果强调一致性,则每次节点收到写请求并写入新数据,
会锁定其他节点的读写操作并要求其他全部节点都同步数据,数据一致之后才解锁。
考虑到分区容错性的存在,则过于强调C可能会导致同步操作的时间很长而影响可用性。
A 是可用性,即发送的请求能比较快的收到响应。
强调A可用性,则需要牺牲一些一致性。
C和A之间不可能完全同时满足,需要权衡,找到一个平衡点。
这就引出了BASE理论。
核心思想是:既然无法做到强一致性,那么就让分布式系统中的每个节点(应用)根据
自身特点,采用适当的方式来使系统达到最终一致性。
基本可用
Soft State 软状态
最终一致性
最终一致性指的是分布式系统经过一定时间后能够让节点之间数据达到一致。最终两个字很微妙,
因为系统达到一致所经历的时间可能是几毫秒,也可能是几个小时。
软状态指的是在系统达到最终一致性之前存在的,各个节点之间数据可能不一致的状态。
基本可用指的是系统虽然出现了一些不可预知的故障,但基本上还是能用的,只是相比于正常系统
而言,会有响应时间上的损失或功能上的损失(如引导到降级页面)。
在实践当中,应根据系统业务具体特点权衡取舍。
例如银行转账强调的是一致性,要求数据务必准确,
电商抢购可以引导到降级页面,可以读到库存脏数据,但下单时会校验数据库中真实库存并提示库存不足。
区块链数据结构
1、比特币的一个区块包含哪些信息?
每个区块首先包含很多笔交易tx[ ~ ~ ~]。2020年区块容量1mb,大约包含4000笔交易信息。
这些交易的信息的哈希值通过 Tree生成一个根哈希(字段),用于 Proof
还包含前一个区块的哈希值。(为了保证整条区块链不可篡改)
此外还包含版本号、时间戳、区块大小、区块号、高度、随机值nonce等等很多信息。
2、什么是 Tree?
个人理解:存储hash值的二叉树,作用是通过根节点的一个哈希值验证全部数据是否正确。
3、在实践中,我们可以在区块链浏览器,通过区块高度查看区块信息,也可以通过交易哈希查看每一笔交易的详细信息。我们还可以调用开发者提供的API来进行这些查询操作。
共识协议
1、什么是拜占庭将军问题?
在有叛军的情况下,将军们如何通过信使传递信息并达成一致的问题。
叛军数目不可以超过比例,否则会达不成一致,比例高到一定程度甚至会达成错误共识。
设将军数N,含叛变将军数f,达成一致的条件为:N>3f+1
验证:假设4个将军,含1个叛军,
2、解决拜占庭将军问题的算法是?
PBFT算法
3、比特币采用什么共识算法?
Pow proof of work 工作量证明。
4、挖矿和记账的过程是怎样的?
区块链可以看作一个分布式的账本,全节点,一般是大型矿场,具备完整的账本。
挖矿的目的是获取记账权的,记账的时候可以记录一笔原本不存在的比特币给自己,相当于铸币。
挖矿的具体过程:矿工首先打包一个区块,区块中包含很多笔交易,然后不断随机生成nonce值并计算区块哈希值,试图使区块哈希值满足
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。