比特币钱包,密钥,地址
钱包就是密钥所在之处,钱包是私钥的容器,通过有序文件或者简单的数据库实现或者用原有的私钥通过单向哈希函数生成每一个新的私钥,并将新的密钥顺序连接。
比特币钱包包含的是私钥而不是比特币,一个用户可以有一个或者多个私钥的钱包,钱包中含有成对的私钥和公钥,用户用私钥来签名交易,比特币是以交易输出的形式来存储在区块链中。(避免地址重复原则—每个比特币地址只能用一次交易)
数字密钥由用户生成并且存储在一个简单的数据库中。
钱包分为确定性钱包和非确定性钱包。
非确定性钱包是随机生成的私钥的集合,Just a Bunch Of Key(JBOK),一次性生成足够数量的私钥,保存所有的副本,每一把都需要备份,一旦丢失则钱包控制的资金就丢失了,不鼓励使用。
确定性钱包也叫种子钱包(HD钱包属于确定性钱包),从一个主密钥生成海量的子密钥,一旦控制了主密钥,就可以生成所有的子密钥,确定性钱包是树状结构,仅备份一次就行。确定性钱包的好处:1.安全(可以离线存储主密钥)2.权限控制(树形结构对应各分支部门)3.便于记账
私钥(k)经过单向椭圆曲线相乘算法变为公钥(K)
公钥(K)经过单向双哈希函数变为比特币地址
单向不可逆数学函数:素数幂和椭圆曲线乘法比特币地址=RIPEMD160(SHA256(K))(通常是经过Base58Check)
Base58Check编码:比特币地址前缀为0x00,私钥编码前缀为0x80,checksum=sha256(sha256(prefix+data))取前4个字节
最终比特币地址为:prefix+data+checksum前4字节
椭圆加密算法ECC(加密/解密 签名 生成软件序列号)
无穷远点与平常点
射影平面坐标系A(X:Y:Z)
椭圆曲线(维尔斯塔拉斯方程) y^2*z+a1*x*y*z+a3*y*z^2=x^3+a2*x^2*z+a4*x*z^2+a6*z^3 椭圆曲线不是椭圆
椭圆曲线的切线斜率 k=(3*x^2+2*a2*x+a4+a1*y)/(2*y+a1*x+a3)
由连续到离散:满足有限域Fp上的三个法则
加密解密基于一个数学上的难题(RSA):给定两个素数p、q很容易相乘得到n,而对n进行
因式分解相对困难
首先,A选定一个椭圆曲线Ep(a,b)选取其中一点G
A选择一个私钥k,并且生成公钥K=kG
A将K,G,Ep(a,b)传给B
B将明文编码到Ep(a,b)上的一点M,并且产生一个随机数r(r<n)
B计算点C1=M+rK,C2=rG,将C1 C2传给A
A收到信息后可以计算出M,并将M解码得到明文
加密/解密参数选择:T=(p,a,b,G,n,h)p,a,b用来确定一条椭圆曲线,G为基点,n为点
G的阶,h是椭圆曲线上所有点的个数m与n相除的整数部分
满足条件:p越大越安全,但是计算速度会变慢,200位左右可以满足一般的安全要求
p!=n*h
pt!=1(mod n) 1<=t<=20
4*a^3+27*b^2!=0(mod p)
n位素数
h<=4
安全散列算法SHA256
输入报文最大长度要求为2^64bit,然后按512bit一组进行分组,最终产生的是一个256bit的报文摘要
首先,附加填充比特,对输入的报文进行填充使报文长度与448模512同余(长度=448mod512)填充比特范围是1到512,填充比特最高位为1,其余位为0(后面会加上一个64bit原始报文的长度信息)
然后,附加长度值,将64bit表示的初始报文的位长度附加在填充的报文后
初始化缓存,用一个256bit的缓存来存放散列函数的中间及最终结果,每一步使用一个32bit的常数值KT和一个32bit的WT
A=0x6A09E667
B=0xBB67AE85
C=0x3C6EF372
D=0xA54FF53A
E=0x510E527F
F=0x9B05688C
G=0x1F83D9AB
H=0x5BE0CD19
用六种基本逻辑函数处理报文分组序列,64步迭代运算
参与运算的都是32bit的数,WT是分组之后的报文,512bit=32bit*16.也就是说WT
T=1,2,3,4……16由该组报文产生
WT T=17,18,19……64由WT推导公式计算出来,WT的递推公式为:
WT=σ1(Wt-2)+Wt-7+σ0(Wt-15)+Wt-16
不断处理分组的报文,SHA256算法最后一个分组产生的输出就是报文摘要
SHA-1与MD5的比较
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
对强行供给的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
RIPEMD160算法:是针对MD4和MD5算法缺陷分析提出的算法,摘要长度160,用BouncyCastle实现
将摘要转换为40位16进制的数