比特币使用ripemd
① 区块链密码算法是怎样的
区块链作为新兴技术受到越来越广泛的关注,是一种传统技术在互联网时代下的新的应用,这其中包括分布式数据存储技术、共识机制和密码学等。随着各种区块链研究联盟的创建,相关研究得到了越来越多的资金和人员支持。区块链使用的Hash算法、零知识证明、环签名等密码算法:
Hash算法
哈希算法作为区块链基础技术,Hash函数的本质是将任意长度(有限)的一组数据映射到一组已定义长度的数据流中。若此函数同时满足:
(1)对任意输入的一组数据Hash值的计算都特别简单;
(2)想要找到2个不同的拥有相同Hash值的数据是计算困难的。
满足上述两条性质的Hash函数也被称为加密Hash函数,不引起矛盾的情况下,Hash函数通常指的是加密Hash函数。对于Hash函数,找到使得被称为一次碰撞。当前流行的Hash函数有MD5,SHA1,SHA2,SHA3。
比特币使用的是SHA256,大多区块链系统使用的都是SHA256算法。所以这里先介绍一下SHA256。
1、 SHA256算法步骤
STEP1:附加填充比特。对报文进行填充使报文长度与448模512同余(长度=448mod512),填充的比特数范围是1到512,填充比特串的最高位为1,其余位为0。
STEP2:附加长度值。将用64-bit表示的初始报文(填充前)的位长度附加在步骤1的结果后(低位字节优先)。
STEP3:初始化缓存。使用一个256-bit的缓存来存放该散列函数的中间及最终结果。
STEP4:处理512-bit(16个字)报文分组序列。该算法使用了六种基本逻辑函数,由64 步迭代运算组成。每步都以256-bit缓存值为输入,然后更新缓存内容。每步使用一个32-bit 常数值Kt和一个32-bit Wt。其中Wt是分组之后的报文,t=1,2,...,16 。
STEP5:所有的512-bit分组处理完毕后,对于SHA256算法最后一个分组产生的输出便是256-bit的报文。
2、环签名
2001年,Rivest, shamir和Tauman三位密码学家首次提出了环签名。是一种简化的群签名,只有环成员没有管理者,不需要环成员间的合作。环签名方案中签名者首先选定一个临时的签名者集合,集合中包括签名者。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者集合中的成员可能并不知道自己被包含在其中。
环签名方案由以下几部分构成:
(1)密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)。
(2)签名。签名者用自己的私钥和任意n个环成员(包括自己)的公钥为消息m生成签名a。
(3)签名验证。验证者根据环签名和消息m,验证签名是否为环中成员所签,如果有效就接收,否则丢弃。
环签名满足的性质:
(1)无条件匿名性:攻击者无法确定签名是由环中哪个成员生成,即使在获得环成员私钥的情况下,概率也不超过1/n。
(2)正确性:签名必需能被所有其他人验证。
(3)不可伪造性:环中其他成员不能伪造真实签名者签名,外部攻击者即使在获得某个有效环签名的基础上,也不能为消息m伪造一个签名。
3、环签名和群签名的比较
(1)匿名性。都是一种个体代表群体签名的体制,验证者能验证签名为群体中某个成员所签,但并不能知道为哪个成员,以达到签名者匿名的作用。
(2)可追踪性。群签名中,群管理员的存在保证了签名的可追踪性。群管理员可以撤销签名,揭露真正的签名者。环签名本身无法揭示签名者,除非签名者本身想暴露或者在签名中添加额外的信息。提出了一个可验证的环签名方案,方案中真实签名者希望验证者知道自己的身份,此时真实签名者可以通过透露自己掌握的秘密信息来证实自己的身份。
(3)管理系统。群签名由群管理员管理,环签名不需要管理,签名者只有选择一个可能的签名者集合,获得其公钥,然后公布这个集合即可,所有成员平等。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
② 为什么区块链私钥 中的字母只有a-f之间
私钥:实际上是一组随机数,关于区块链中的随机数我们已经介绍过了
公钥:对私钥进行椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。
地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址
首先使用随机数发生器生成一个『私钥』。后续的公钥、地址都会由私钥生成,所以一句话概括私钥的重要性:"谁掌握了私钥, 谁就掌握了该钱包的使用权!"
『私钥』经过椭圆曲线算法(SECP256K1)算法加密生成了'公钥'。这是一种非对称单向加密算法,知道私钥可以算出公钥,但知道公钥却无法反向算出私钥
『公钥』经过单向Hash算法(SHA256、RIPEMD160)生成『公钥Hash』
将一个字节的地址版本号连接到『公钥哈希』头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为『公钥哈希』的校验值,连接在其尾部。
将上一步结果使用BASE58进行编码(比特币定制版本),就得到了『钱包地址』。
③ git和区块链的区别
一、相似性
分布式
Git 确保每个代码仓库在本地保留完整的项目库,而不仅仅是自己在工作的这个分支和自己的提交历史。同时也保留了最近这次 pull 下来后的所有快照和索引信息。
区块链上,每个节点在本地保存完整数据库,而不仅仅是自己的交易信息。
可追溯性
Git commit 链上,每个 commit 对象都包含父级对象(上一次 commit 的对象,除了第一个 commit ),对之前的记录全部可追溯。
区块链上,每个区块都包含前一个区块的索引(除了创世区块),可以追溯之前所有有效交易。
不可篡改
Git 的 commit 链中,每个对象本身在存储前都计算校验和,然后以校验和来引用。一旦修改,校验和就会不对, 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。
Git 用以计算校验和的机制叫做 SHA-1 散列( hash,哈希)。 这是一个由 40 个十六进制字符( 0-9 和 a-f )组成字符串,基于 Git 中文件的内容或目录结构计算出来。SHA-1 哈希看起来是这样:区块链中,每个区块包含上个区块 ID,本区块 ID 两个 SHA-256 散列,这两个散列都是基于区块内容计算出来。一旦修改内容,则散列将变化,和其他节点的链不一致,最终不能加入到最长链中,因此无法真正篡改内容。
二、差异性
集体共识和中央节点意志: 1 - 区块链是基于集体共识( POW/POS)来 merge,形成最长链,最长链即为主链。
2 - 而 Git 体系里,通过仓库托管平台来进行多节点合作时,是平台项目的管理者掌握了 merge 的权力,体现的是中央节点的意志。
密码学
1 - 比特币区块链中,密码学主要用到了以下方式
在比特币区块链的整个体系中,大量使用了公开的加密算法,如 Merkle Tree 哈希数算法,椭圆曲线算法、哈希算法、对称加密算法及一些编码算法。各种算法在比特币区块链中的作用如下:
a)哈希算法
比特币系统中使用的两个哈希函数分别是:1.SHA-256,主要用于完成 PoW (工作量证明)计算; 2.RIPEMD160,主要用于生成比特币地址。
b)Merkle 哈希树
基于哈希值的二叉树或多叉树,在计算机领域,Merkle 树大多用来进行完整性验证处理,在分布式环境下,其进行完整性验证能大量减少数据传输和计算的复杂程度。
c)椭圆曲线算法
比特币中使用基于 secp256k1 椭圆曲线数学的公钥密码学算法进行签名与验证签名,一方面可以保证用户的账户不被冒名顶替,另一方面保证用户不能否认其所签名的交易。用私钥对交易信息签名,矿工用用户的公钥验证签名,验证通过,则交易信息记账,完成交易。
d)对称加密算法
比特币官方客户端使用 AES (对称分组密码算法)加密钱包文件,用户设置密码后,采用用户设置饿密码通过 AES 对钱包私钥进行加密,确保客户端私钥的安全。
e)Base58 编码
Base58 是比特币使用的一种独特的编码方式,主要用于产生比特币的钱包地址,其类似于古典密码学里的置换算法机制,目的是为里增加可读性,把二进制的哈希值变成了我们看到的地址“ ”。
2 - Git:主要用了 SSH 秘钥来进行远程登录验证,用了 SHA-1 来进行代码内容校验和。
SSH 是 Secure Shell 的缩写,由 IETF 的网络工作小组( Network Working Group )所制定,是一种专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH 传输的过程如下: (1)远程主机收到用户的登录请求,把自己的公钥发给用户。 (2)用户使用这个公钥,将登录密码加密后,发送回来。 (3)远程主机用自己的私钥,解密登录密码,如果密码正确,允许用户登录。
④ 比特币钱包地址是如何得到的不是比特币地址而是钱包地址!
首先,你应该在大脑中想象出一个“钱包”的概念。你的bitcoin都放在你的“钱包”中一个钱包可以包含很多很多......很多个地址。地址的形式就是形如。
利用比特币钱包中生成的比特币地址你可以接收来自他人的比特币,你也可以将你帐户上的比特币转到他人的比特币地址上面。比特币地址就像银行卡号一样,具有支付、转账、提现功能,但在转账时,你只有知道别人的比特币地址才能进行比特币转账。
如果我们把比特币钱包简单比作成银行卡账户的话,那么比特币钱包地址就可以看成是银行卡账号。不同的是,比特币地址是可以不存储在网络上的,更是可以独立于你的钱包而存在的。
(4)比特币使用ripemd扩展阅读:
比特币地址是一串由 26位到34位字母和数字字符串组成的。 看上去像一堆乱码一样,说白了这个就像你的银行卡卡号一样。 通过区块链查可以查每个比特币地址的所有转账记录,公开透明。
比特币钱包地址生成:通过随机选出256位二进制数字,形成私钥,然后通过加密函数来生成地址。这个生成方向是单向的。也就是你知道了地址是无法通过解密方法来计算出私钥的。就目前的人类计算机运算能力无法破解,你可以很放心地把地址公布到网上。
参考链接:比特币|网络
⑤ 离线生成的比特币地址是如何避免冲突的
BTC的地址生成过程如下,完整的可以查一下比特币中文维基:
比特币地址的生成过程
(说明: 有些数字以"0x"开头,意思是此数字使用十六进制表示法。"0x"本身没有任何含义,它是C语言流传下来的,约定俗成的写法,比如0xA就是十进制的10。另外,1个字节 = 8位二进制 = 2位十六进制)。
第一步,随机选取一个32字节的数、大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥。
第二步,使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥。 (共65字节, 1字节 0x04, 32字节为x坐标,32字节为y坐标)关于公钥压缩、非压缩的问题另文说明。
第三步,计算公钥的 SHA-256 哈希值
第四步,取上一步结果,计算 RIPEMD-160 哈希值
第五步,取上一步结果,前面加入地址版本号(比特币主网版本号“0x00”)
00
第六步,取上一步结果,计算 SHA-256 哈希值
第七步,取上一步结果,再计算一下 SHA-256 哈希值(哈哈)
第八步,取上一步结果的前4个字节(8位十六进制)
D61967F6
第九步,把这4个字节加在第五步的结果后面,作为校验(这就是比特币地址的16进制形态)。
00D61967F6
第十步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)。