这篇文章主要介绍了加密基础 ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/23722.html

加密基础是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,加密基础学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉加密基础比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

加密基础

加密货币是基于密码学构建起来的,要理解加密货币需要先理解加密学的一些基本知识,本文将介绍加密学的几个基本概念。

加密货币是基于密码学构建起来的,要理解加密货币需要先理解加密学的一些基本知识,本文将介绍加密学的几个基本概念。

哈希

哈希算法(Hash)又称摘要算法(Digest),也叫提取数据指纹。哈希函数实现对任意一个输入数据进行计算,得到一个固定长度的输出摘要(哈希值)

加密基础

这是一种单向算法,从源数据得到哈希值很简单,但从哈希值倒推出源数据非常困难。哈希算法的特点是:相同的输入数据一定得到相同的哈希值,输入数据只要稍微变动一点,得到的哈希值完全不同(安全的哈希算法)。利用这个特点,哈希算法常用于验证原始数据是否被篡改,校验数据的完整性。比如我们在官网下载一些开源软件的时候,经常能看到软件的哈希值,你下载软件后通过计算其哈希值来验证所下载的软件是否被恶意修改过。常用哈希算法有:MD5(128bits)、SHA1(160bits)、SHA256、SHA512等。

可能你有个疑问,哈希值的长度是固定的,输入数据是无限的,那不同的输入数据的哈希值一定不同吗?不能保证一定不相同,只能保证大概率是不同的,概率的大小看哈希函数的实现。两个不同的输入数据,得到相同的哈希值,这就是哈希碰撞,上面提到的MD5和SHA1就已经被证明不是安全的实现。2005年山东大学的王小云教授发布算法可以轻易构造MD5碰撞实例,此后2007年,有国外学者在王小云教授算法的基础上,提出了更进一步的MD5前缀碰撞构造算法“chosen prefix collision”。所以MD5碰撞很容易构造,基于MD5来验证数据完整性已不可靠。SHA-256的理论碰撞概率是:尝试2的130次方的随机输入,有99.8%的概率碰撞。注意2130是一个非常大的数字,大约是1361万亿亿亿亿。以现有的计算机的计算能力,是不可能在短期内破解的。

BTC使用的两种哈希算法:

  • 一种是对数据进行两次SHA-256计算,这种算法在BTC协议中通常被称为hash256或者dhash。
  • 另一种算法是先计算SHA-256,再计算RipeMD160,这种算法在BTC协议中通常被称为hash160。

对称加密

所谓对称加密就是:加密和解密使用同一个密钥。我们常用的密码系统就是对称加密,比如:你对一个文件进行加密,输入的密码就是密钥,加密后的文件,如果你想查看,还是使用相同的密码进行解密查看。常用算法:3DES(Triple DES)、AES(128bits, 192bits, 256bits, 384bits)、Blowfish、RC6…

使用对称加密,如果是自己使用,完全没问题,足够强度的密码破解也是非常困难。如果想要在多人之间传递这个秘密,就需要多人都知道这个密码,这个时候对密码的泄露管控就变得困难了。密钥的保存变得很重要,一旦密钥泄漏,秘密也就被破解。

非对称加密

非对称加密又称公钥密码学,加密和解密过程使用的是不同的密钥,密钥是成对出现的,分为公钥与私钥。

  • 私钥:secret key,通过工具创建,使用者自己留存,必须保证其私密性;
  • 公钥:pubkey,从私钥中提取产生,可公开给所有人;
  • 特性:用公钥加密的数据,只能使用与之配对儿的私钥解密,反之使用私钥加密的数据,只能使用与之对应的公钥解密;

非对称加密往往需要密码学安全伪随机数生成器的协助来产生一对密钥,随机数的产生对密钥的安全至关重要。下图是密钥的生成过程:

加密基础

公钥密码学常被用在以下场景:

  • 数字签名:主要在于让接收方确认发送方的身份;
  • 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
  • 数据加密:比对称加密要慢;

数据加密通常使用公钥加密,私钥解密;而数字签名使用私钥加密,公钥解密验证。常用算法:RSA(即可签名,也可加解密)、DSA(只能签名,不可加解密)、ELGamal…

BTC系统中,我们用公钥密码学技术创建一个密钥对,用于控制对BTC的访问。密钥对包括一个私钥,和由其衍生出的唯一的公钥。公钥用于接收BTC,而私钥用于支付时进行交易签名。

公钥加密

如何使用公钥和私钥对数据加密传输呢?举个例子,Alice和Bob各自拥有一对公钥和私钥,公钥是可以公开的,他们都知道对方的公钥,那么Bob向Alice发送加密消息的过程如下:

  1. Bob使用Alice的公钥对源明文消息进行加密
  2. 把加密后的密文发送给Alice
  3. Alice得到密文后使用自己的私钥进行解密,得到消息的原文

如果Alice保护好自己的私钥没被泄露,这样在传输的过程中即使有人截获消息,也无法破解。

加密基础

数字签名

公钥密码学最常用的是进行数字签名,签名的目的是为了证明:该消息确实是由持有私钥的人发出的,任何其他人都可以对签名进行验证,即使用私钥加密,使用公钥进行验证。

举个例子:Alice对“Hello Bob!”这条消息(或一个合同)进行数字签名即使用私钥对这条消息进行加密得到签名signature,然后将这条消息和签名同时发出来,说是他发的这条消息,那么其他人该怎么证明Alice说的正确的呢?验证方法就是:其他人用Alice公开的公钥对签名signature进行解密,得到解密后的结果和这条消息相同,则说明Alice没有撒谎。过程如下图所示:

加密基础

维基百科对 “数字签名 ”的定义:

数字签名是用于证明数字消息或文档的真实性的数学方案。 有效的数字签名使收件人有理由相信消息是由已知的发件人创建的(身份验证),发件人不能否认已发送的消息(不可否认性),并且消息在传输过程中没有更改(完整性)。

数字签名应用在互联网https上,通过CA证书确认你访问的网站时安全的,具体请看阮一峰翻译的数字签名是什么?。

BTC中使用ECDSA(椭圆曲线数字签名算法),数字签名在BTC中有三种用途:第一,签名证明私钥的所有者,即资金所有者,有权花费这些资金。第二,授权证明是不可拒绝的(不可否认性)。第三,签名证明交易(或交易的具体部分)在签字之后没有也不能被任何人修改。

BTC网络处理的大多数交易都是由“付款至公钥哈希”或P2PKH脚本锁定的输出,这些输出都含有一个锁定脚本,将输入锁定为一个公钥哈希值,即我们常说的BTC地址。由P2PKH脚本锁定的输出可以通过提供一个公钥和由相应私钥创建的数字签名来解锁(花费)。

参考

  • 散列函数
  • Public-key cryptography
  • Digital signature
  • What is a Digital Signature?

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/23722.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 加密基础

提供最优质的资源集合

立即查看 了解详情