一、数据链上ID:哈希
哈希算法:
一种只能加密,不能解密的密码学算法。特点:
1、可以将任意长的信息转换成一段固定长度的字符串,这些字符串就算输入值只改变一点,输出的哈希值也是天差地别。
2、只有完全一样的输入值,才有完全一样的输出值。
3、输入值和输出值之间没有规律,不能通过输出值找到输入值,要想找到输入值,只能通过枚举法,寻找满足条件的输出值。
哈希是如何工作的
哈希值指针将每个区块连接到它的前身,方法是在前一个区块中持有数据的哈希值。因为每个块都会链接到它的前身,所以区块链中的数据是不可变的。哈希函数意味着任何事务的变更都会产生完全不同的哈希值,这将改变所有后续块的哈希值。
不同的区块链使用不同的加密算法,比特币区块链使用的是SHA256算法,该算法生成一个32个字节的哈希值。Dogecoin和Litecoin则采用了Scrypt算法,一种更快、更轻的算法。
哈希算法的应用
1、安全加密:
1、MD5(Message-Digest Algorithm,MD5消息摘要算法)是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
比如:
比如从图片二进制串码开头取100个字节,中间100字节,最好100字节,然后将300个字节放到一块通过哈希算法得到一个哈希字符串作为图片的唯一标识。再想提高效率,还可以再与图片的路径进行运算进一步得到hash值。
2、SHA1及其他(Secure Hash Algorithm.安全散列算法)是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
3、DES(Data Encryption Standard,数据加密标准)
4、AES(Advanced Encryption Standard,高级加密标准)
2、 数据校验(用于检验数据的完整性和正确性):
BT 下载的原理是基于P2P 协议的。多个机器上并行下载一个2GB 的电影,这个电影文件可能会被分割成很多文件块。等所有的文件块都下载完成之后,再组装成一个完整的电影文件就行了。但这样容易造成数据串改,可以通过哈希算法,对100 个文件块分别取哈希值,然后对下载好的文件块逐一求哈希值,然后跟种子文件中保存的哈希值比对。如果不同,说明文件块不完整
####3、 散列函数
散列函数对于散列算法冲突的的要求要低很多。即使出现冲突,通过开放寻址法或链表法解决,关注的是能否均匀分布。
哈希算法在分布式中的应用
1、负载均衡
负载均衡的算法有很多,比如轮询,随机,加权轮询等。如何实现一个会话粘滞的负载均衡算法呢?也就是说需要在同一客户端,在一次会话中的所有请求都路由到同一个服务器上。
一般的解决方法是:
维护一张映射表,表的内容是客户端的IP地址或者会话ID与服务器编号的映射关系。客户端每一次请求都要先在映射表中查找路由到的服务器编号。然后再请求编号对应的服务器。
缺点:
1、如果客户端很多就需要维护更多的映射关系
2、客户端上线下线,服务器扩容,缩容都会导致映射失败,维护映射表成本大
但是通过哈希算法就可以解决:
通过哈希算法对客户端IP地址或者会话ID计算哈希值,然后与服务器的大小进行取模运算。最终得到的值就是对应的服务器编号。这样就可以把同一个IP的请求路由到同一个后端服务器上
2、数据分片(下面两个例子讲得通透)
1、如何统计‘搜索关键词’的出现次数?假如有1T的日志文件,记录了用户的搜索关键词,如何快速统计每个关键词被搜索的此说呢?难点:数据量太大,无法放在一台机器的内存中,如果只有一台机器处理,时间会很长因此我们用n台机器并行处理。从搜素记录中依次读取关键词,通过哈希函数计算出哈希值然后跟n取模运算,最终得到的值,就是被分配到的机器号这样相同的关键词就被分散到同一机器。每个机器分别计算关键词出现的次数,最后合并就是最终的结果。
2、如何快速判断图片是否在图库中?假如有一亿张图片,显然在一台机器构建散列表是行不通的,因为一台机器的内存有限我们需要n台机器,用哈希算法取每张图片的唯一标识,在和n求余取模运算,得到的就是要分到的机器号,然后把唯一标识和路径发往这台机器构建散列表。当我们查找一个图片时,就用同样的哈希算法得到哈希值和n取模运算,假如得到的是k,就去k这台机器寻找针对海量的数据,可以用多机分布式处理。借用这中分片的思想,可以突破单机内存,和CPU的限制
3、分布式存储
面对海量的数据和海量的用户,为了提高数据的读取和写入能力,一般都采用分布式来存储数组,比如分布式缓存。海量的数据需要缓存,一个缓存机器肯定是不够的,所以需要将数据分布在多台机器.借用数据分片的思想,通过哈希算法对数据取哈希值,然后对机器个数取模,这个最终值就是存储的缓存机编号。
问题:
在机器数进行扩容的时候,比如13这个数组,存储在编号为3机器上。但是新增一个机器,对数据按照11取模,原来这个数据就被分配到2号机器上了。因此,所以数据都要重新计算哈希值,然后搬移到正确的机器上。缓存中的数据全部失效。所有的数据请求都会穿透缓存,直接取请求数据库。这样就可能发送雪崩效应,压垮数据库。
这时,需要一种方法,使得新加入一个机器后,并不需要做大量的数据搬移。那就是在分布式系统中应用非常广泛的一致性哈希算法
基本思想:
我们假设有k个机器,数据的哈希值范围是[0-MAX],我们将整个范围划分成m个小区间(m远大于k),每个机器复负责m/k个小区间。当有新机器加入的时候,我们就将某几个小区间的数据,从原来的机器中搬移到新的机器中。这样,既不用全部重新哈希、搬移数据,也保持了各个机器上数据量的均衡。
二、链上数据的加密基础:公钥
公钥密码体制是什么?
公钥密码学与其他密码学完全不同:
1、公钥算法基于数学函数而不是基于替换和置换
2、使用两个独立的密钥
公钥密码学的提出是为了解决两个问题:
1、密钥的分配
2、数字签名
1976年Diffie和Hellman首次公开提出了公钥密码学的概念,被认为是一个惊人的成就。
公钥体制:
每个用户都有一对选定的密钥(公钥k1;私钥k2),公开的密钥k1可以像电话号码一样进行注册公布。
特点:
1、加密和解密能力分开
2、多个用户加密的消息只能由一个用户解读,(用于公共网络中实现保密通信)
3、只能由一个用户加密消息而使多个用户可以解读(可用于认证系统中对消息进行数字签字)。
4、无需事先分配密钥
公钥密码体制的4个组成部分:
1、明文:算法的输入,它们是可读信息或数据,用M表示;
2、密文:算法的输出。依赖于明文和密钥,对给定的消息,不同的密钥产生密文不同。用E表示;
3、公钥和私钥:算法的输入。这对密钥中一个用于加密,为Ke,此密钥公开;一个用于解密,为Kd,此密钥保密。加密算法执行的变换依赖于密钥;
4、加密、解密算法
公钥密码体制的两个基本模型:
1、加密模型:
如图所示,接收者B产生一对密钥PKB和SKB,其中PKB是公钥,将其公开,SKB是私钥,将其保密。如果A要向B发送消息m,A首先用B的公钥PKB加密m,表示为c =E (PKB, m),其中c是密文,E是加密算法,然后发送密文c给B。B收到密文c后,利用自己的私钥SKB解密,表示为m =D (SKB, c),其中D是解密算法。
2、认证模型:
如图所示,A首先用自己的私钥SKA对消息m加密,表示为c=E (SKA, m),然后发送c给B。B收到密文c后,利用A的公钥PKA对c解密,表示为m=D (PKA, c)。由于是用A的私钥对消息加密,只有A才能做到,c就可以看做是A对m的数字签名。此外,没有A的私钥,任何人都不能篡改m,所以上述过程获得了对消息来源和数据完整性的认证。
公钥密码体制的原理
公钥密码体制的基本原理是陷门单向函数:
解释:
陷门单向函数是满足下列条件的可逆函数f:
①对于任意的x,计算y = f (x)是容易的。
②对于任意的y,计算x使得y = f (x)是困难的。
③存在陷门t,已知t时,对于任意的y,计算x使得y = f (x)则是容易的。
公钥密码举例-RSA算法
RSA算法是罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)于1977年研制并于1978年首次发表的一种算法。是第一个既能用于数据加密,也能用于数字签名的公开密钥密码算法。
依据的原理
寻求两个大素数的乘积比较简单,而将它们的乘积分解开(因式分解)则极其困难。73×107=13911391可以分解成哪两个素数的积?
安全性
1、穷举攻击RSA抗穷举攻击的方法也是使用大的密钥空间,这样看来是e和d的位数越大越好。但是由于在密钥生成和加密/解密过程都包含了复杂的计算,故密钥越大,系统运行速度越慢。
2、计时攻击计时攻击是通过记录计算机解密消息所用的时间来确定私钥。这种攻击不仅可以用于攻击RSA,还可以用于攻击其他的公钥密码系统。
公钥密码举例-椭圆曲线公钥密码
椭圆曲线并非椭圆,之所以称为椭圆曲线是因为它的曲线方程与计算椭圆周长的方程相似。一般的,椭圆曲线指的是由维尔斯特拉斯(Weierstrass)方程:𝑦2+𝑎𝑥𝑦+𝑏𝑦=𝑥3+𝑐𝑥2+𝑑𝑥+𝑒
上述曲线方程可以通过坐标变换转化为下述形式:𝑦2=𝑥3+𝑎𝑥+𝑏。
比特币中的椭圆曲线:
比特币公钥加密中使用的椭圆曲线参数是依照secp256k1标准。在比特币流行之前很少有人使用过secp256k1,但现在由于它的几个不错的属性越来越受到欢迎。secp256k1标准通过特别的算法,使得生成的曲线比别的曲线快30%.比特币的椭圆曲线图如下:
加密流程:
以一个随机生成的私钥k为起点,我们将其与曲线上预定的生成点G相乘以获得曲线上的另一点,也就是相应的公钥K。生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的:{K = k * G}。
小测:
1、公钥属于哪种加密方式?
非对称加密
2、下面不是使用公钥的优点的是?
A、安全性更高
B、完整性更好
C、速度更快
D、防修改性更好
答案为:C
三、私钥
介绍和注意
一个私钥就是一串随机提取的数字,拥有和控制私钥是用户控制自己的数字资产的关键,用户交易时想证明使用的资金是自己的,必须使用其私钥对交易进行签名。
需要注意的是:
1、在任何时候均必须保证私钥的私密性,将私钥透露给第三方,等同于把由它保护的数字资产的控制权交给了第三方。
2、私钥同样要进行备份、保护,防止意外丢失。如果私钥丢失,将是不可恢复的,受它保护的资金也就彻底丢失了。
私钥的本质
1、私钥本质上是32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两种可能:0或1,所以私钥的总数量位2(8*32)=2256个,这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥,以目前的科学技术水平是不可能成功的。
2、我们所说的比特币私钥的是密码学上面安全的,并不是不可能出现重复的私钥,而是说不可能通过遍历所有的私钥方式,或者其它的方式,找到上面有比特币的私钥,所以私钥是密码学上安全的。
3、虽然私钥的总数量很大,但是私钥的生成却是要依赖密码学上的安全随机,密码学上面安全的随机是指随机是不可预测的,随机的结果是不可遍历的。
Base58转换私钥
缘由
32个byte组成的数组是由256个0或者1组成的,如果显示出来,不仅仅是识别率太差,而且太长。因此在比特币中会将私钥使用一种独特的编码方式:Base58进行转换。
Base58的编码表
注意:
私钥的概念在Base58中不使用数字“0”,字母大写“O”,字母大写“I”,小写字母“i”,以及“+”和“/”字符。主要是为了肉眼容易识别,在输入的时候不容易打错。
举例
将1234转换位58进制:
1、1234除以58,商21,余数为16,查表得H
2、21除以58,商0,余数为21,查表得N
所以得到Base编码为:HN
如果待转换的数前面有0怎么办?直接附加编码1来代表,有多少个就附加多少个(编码表中1代表0)。
私钥和公钥的关系
公钥是由私钥生成的,通过椭圆曲线生成,一个私钥经过椭圆曲线变换之后会生成一个65个byte的数组。如:04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235
公钥一般是把byte数组是经过hex(16进制)的处理之后显示出来的,私钥和公钥是成对出现的,一个私钥签名的数据,只有对应的公钥才能解开。
参考资料:
知链科技区块链教育文章来源:https://www.toymoban.com/news/detail-432397.html
总结
这块内容太多了,分多篇进行分析。欲知后事如何,请听下回分解。哈哈哈!文章来源地址https://www.toymoban.com/news/detail-432397.html
到了这里,关于区块链关键技术1(笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!