‘壹’ 使用非对称加密及解密的过程详解
前面我们知道对称加密是对一份文件进行加密,且对应的只有一个密码?例如:A有一份文件,她使用对称加密算法加密后希望发给B,那么密码肯定也要一起交给B!这中间就会出现安全隐患,如果密码被第三方L嗅探到并截取,那么加密的文件就赤裸裸的出现在L的面前。
如果A有很多文件需要加密并发送给很多人!那么就会生成很多的密钥,这么多的密钥保管就成了一个很棘手的问题,况且还要把密钥发给不同的人!这无疑增添了很多的风险!
如何能改善这种安全性不高的加密算法,数学家们发现了另一种加密方式。称之为《非对称加密》asymmetric encryption。非对称加密算法需要两个密钥【公开密钥】(publickey)和【私有密钥】(privatekey)。下面简称【公匙】、【私匙】
【公钥】与【私钥】是一对,如果使用公开密匙对数据进行加密,那么只有对应的私有密匙才能解密;相反,如果使用私有密匙对数据进行加密,那么只有对应的公开密匙进行解密。因加密解密使用的是两种不同的密匙,所以这种算法称之为【非对称加密算法】。
在使用非对称加密前,A和B先各自生成一对公匙和私匙,然后把各自的公匙交给对方,并把自己的私匙妥善保管!如图所示:
在A给B发送信息之前,首先使用B发给A的公匙对信息进行加密处理,然后发送给B,B在收到密文之后,使用自己的私匙解密;B在给A回复信息时,先使用A发来的公匙对回复信息加密,然后发出,A收到密文后使用自己的私匙解密即可!如图所示:
‘贰’ 关于RSA中公钥和私钥的具体使用情况区分
公钥和私钥在一些银行系统、第三方支付系统SDK中经常会遇到,刚接触公钥私钥的朋友们估计很难区分两者的区别。
RSA公钥和私钥是什么?
首先来说,RSA是一种非对称加密算法,它是由三位数学家(Rivest、Shamir、Adleman)设计出来的。非对称加密是相对于对称加密而言的。对称加密算法是指加密解密使用的是同一个秘钥,而非对称加密是由两个密钥(公钥、私钥)来进行加密解密的,由此可见非对称加密安全性更高。
公钥顾名思义就是公开的密钥会发放给多个持有人,而私钥是私有密码往往只有一个持有人。
公私钥特性
公钥和私钥都可用于加密和解密
公钥和私钥都可以用于加解密操作,用公钥加密的数据只能由对应的私钥解密,反之亦然。虽说两者都可用于加密,但是不同场景使用不同的密钥来加密,规则如下:
1、私钥用于签名、公钥用于验签
签名和加密作用不同,签名并不是为了保密,而是为了保证这个签名是由特定的某个人签名的,而不是被其它人伪造的签名,所以私钥的私有性就适合用在签名用途上。
私钥签名后,只能由对应的公钥解密,公钥又是公开的(很多人可持有),所以这些人拿着公钥来解密,解密成功后就能判断出是持有私钥的人做的签名,验证了身份合法性。
2、公钥用于加密、私钥用于解密,这才能起到加密作用
因为公钥是公开的,很多人可以持有公钥。若用私钥加密,那所有持有公钥的人都可以进行解密,这是不安全的!
若用公钥加密,那只能由私钥解密,而私钥是私有不公开的,只能由特定的私钥持有人解密,保证的数据的安全性。
‘叁’ 非对称加密算法
非对称加密算法就是用两个密钥加密解密的算法。
加密的传输过程分为两部分,一部分为 身份认证 ,用户鉴别这个用户的真伪;另外一部分为 数据加密 ,用于数据的保密。这两部分功能都需要用到非对称加密技术。
首先是身份认证,通讯的数据可以这样进行处理,将用户的信息(用户名、密码等)用该用户的私钥进行加密,然后再进行传输,而在服务器端会保存此用户的公钥,用此用户的公钥对传过来的信息进行解密,就可以得到正确的明文,这样就完成了一次安全的网络通讯。
通讯过程的示例如下图所示,Alice用自己的私钥对明文进行加密后传输到服务器,服务器上的用户(例如Bob)拥有很多用户的公钥,因此使用Alice的公钥对密文进行解密,如果密钥正确的话,就可以解密出明文,也就完成了对Alice的身份认证。
然后是数据加密,数据加密和数据认证正好相反,使用接收方的公钥对数据进行加密,传输的过程中,即使数据被黑客截获,也无法使用这些密文,接收方收到密文后,用自己的私钥对密文进行解密,从而完成了一次数据的加密传输。
通讯过程的示例如下图所示,Alice需要发给Bob一段加密的信息,因此Alice就用Bob的公钥对明文进行加密后传输给Bob,Bob收到信息后,使用自己的私钥对密文进行解密,就可以解密出明文,也就完成了对Alice的发来密文的解密过程。
公钥用于加密、私钥用于解密,这才能起到加密作用
因为公钥是公开的,很多人可以持有公钥。若用私钥加密,那所有持有公钥的人都可以进行解密,这是不安全的!
若用公钥加密,那只能由私钥解密,而私钥是私有不公开的,只能由特定的私钥持有人解密,保证的数据的安全性。
但是有另一种密钥使用场景- 签名和验签 :
私钥用于签名、公钥用于验签
签名和加密作用不同,签名并不是为了保密,而是为了保证这个签名是由特定的某个人签名的,而不是被其它人伪造的签名,所以私钥的私有性就适合用在签名用途上。
私钥签名后,只能由对应的公钥解密,公钥又是公开的(很多人可持有),所以这些人拿着公钥来解密,解密成功后就能判断出是持有私钥的人做的签名,验证了身份合法性。
所以我理解,签名和验证签就是身份认证的过程。
‘肆’ 公钥、私钥、哈希、加密算法基础概念
生活中我们对文件要签名,签名的字迹每个人不一样,确保了独特性,当然这还会有模仿,那么对于重要文件再加盖个手印,指纹是独一无二的,保证了这份文件是我们个人所签署的。
那么在区块链世界里,对应的就是数字签名,数字签名涉及到公钥、私钥、哈希、加密算法这些基础概念。
首先加密算法分为对称加密算法、非对称加密算法、哈希函数加密算法三类。
所谓非对称加密算法,是指加密和解密用到的公钥和私钥是不同的,非对称加密算法依赖于求解一数学问题困难而验证一数学问题简单。
非对称加密系统,加密的称为公钥,解密的称为私钥,公钥加密,私钥解密、私钥签名,公钥验证。
比特币加密算法一共有两类:非对称加密算法(椭圆曲线加密算法)和哈希算法(SHA256,RIMPED160算法)
举一个例子来说明这个加密的过程:A给B发一个文件,B怎么知道他接收的文件是A发的原始文件?
A可以这样做,先对文件进行摘要处理(又称Hash,常见的哈希算法有MD5、SHA等)得到一串摘要信息,然后用自己的私钥将摘要信息加密同文件发给B,B收到加密串和文件后,再用A的公钥来解密加密串,得到原始文件的摘要信息,与此同时,对接收到的文件进行摘要处理,然后两个摘要信息进行对比,如果自己算出的摘要信息与收到的摘要信息一致,说明文件是A发过来的原始文件,没有被篡改。否则,就是被改过的。
数字签名有两个作用:
一是能确定消息确实是由发送方签名并发出来的;
二是数字签名能确定消息的完整性。
私钥用来创建一个数字签名,公钥用来让其他人核对私人密钥,
而数字签名做为一个媒介,证明你拥有密码,同时并不要求你将密码展示出来。
以下为概念的定义:
哈希(Hash):
二进制输入数据的一种数字指纹。
它是一种函数,通过它可以把任何数字或者字符串输入转化成一个固定长度的输出,它是单向输出,即非常难通过反向推导出输入值。
举一个简单的哈希函数的例子,比如数字17202的平方根是131.15639519291463,通过一个简单的哈希函数的输出,它给出这个计算结果的后面几位小数,如后几位的9291463,通过结果9291463我们几乎不可能推算出它是哪个输入值的输出。
现代加密哈希比如像SHA-256,比上面这个例子要复杂的多,相应它的安全性也更高,哈希用于指代这样一个函数的输出值。
私钥(Private key):
用来解锁对应(钱包)地址的一串字符,例如+。
公钥(Public keycryptography):
加密系统是一种加密手段,它的每一个私钥都有一个相对应的公钥,从公钥我们不能推算出私钥,并且被用其中一个密钥加密了的数据,可以被另外一个相对应的密钥解密。这套系统使得你可以先公布一个公钥给所有人,然后所有人就可以发送加密后的信息给你,而不需要预先交换密钥。
数字签名(Digital signature):
Digital signature数字签名是这样一个东西,它可以被附着在一条消息后面,证明这条消息的发送者就是和某个公钥相对应的一个私钥的所有人,同时可以保证私钥的秘密性。某人在检查签名的时候,将会使用公钥来解密被加密了的哈希值(译者注:这个哈希值是数据通过哈希运算得到的),并检查结果是否和这条信息的哈希值相吻合。如果信息被改动过,或者私钥是错误的话,哈希值就不会匹配。在比特币网络以外的世界,签名常常用于验证信息发送者的身份 – 人们公布他们自己的公钥,然后发送可以被公钥所验证的,已经通过私钥加密过的信息。
加密算法(encryption algorithm):
是一个函数,它使用一个加密钥匙,把一条信息转化成一串不可阅读的看似随机的字符串,这个流程是不可逆的,除非是知道私钥匙的人来操作。加密使得私密数据通过公共的因特网传输的时候不需要冒严重的被第三方知道传输的内容的风险。
哈希算法的大致加密流程
1、对原文进行补充和分割处理(一般分给为多个512位的文本,并进一步分割为16个32位的整数)。
2、初始化哈希值(一般分割为多个32位整数,例如SHA256就是256位的哈希值分解成8个32位整数)。
3、对哈希值进行计算(依赖于不同算法进行不同轮数的计算,每个512位文本都要经过这些轮数的计算)。
区块链中每一个数据块中包含了一次网络交易的信息,产生相关联数据块所使用的就是非对称加密技术。非对密加密技术的作用是验证信息的有效性和生成下一个区块,区块链上网络交易的信息是公开透明的,但是用户的身份信息是被高度加密的,只有经过用户授权,区块链才能得到该身份信息,从而保证了数据的安生性和个人信息的隐私性。
公钥和私钥在非对称加密机制里是成对存在的,公钥和私钥可以去相互验证对方,那么在比特币的世界里面,我们可以把地址理解为公钥,可以把签名、输密码的过程理解为私钥的签名。
每个矿工在拿到一笔转账交易时候都可以验证公钥和私钥到底是不是匹配的,如果他们是匹配的,这笔交易就是合法的,这样每一个人只需要保管好TA自己的私钥,知道自己的比特币地址和对方的比特币地址就能够安全的将比特币进行转账,不需要一个中心化的机构来验证对方发的比特币是不是真的。
‘伍’ sm2加密算法为什么要验证公钥
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。公钥密码算法属于非对称加密算法,常见的非对称加密算法还有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥相辅相成成对使用,如果用公钥对数据进行加密,只能用对应的私钥才能解密,反之亦然。因为具备这种独特的加解密特性,非对称加密算法不仅可实现数据的加密传输,还能对数据进行签名和验签。
‘陆’ 什么是非对称加密
MD5
\PGP这类的都属于非对称加密.就是加密简单,解密(破解)困难.
‘柒’ 非对称加密算法 (RSA、DSA)概述
非对称加密算法系列文章,推荐阅读顺序:
非对称加密需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。
对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
‘捌’ 非对称加密中的公私钥究竟是如何工作的
一直以来,对于加解密这块接触的非常少,遇到问题也只能咨询同事,尴尬的是越解释越糊涂,考虑到网络安全和数据加密也是微服务开发中的一个重要环节,同时为了尽可能弄明白加解密这块,遂将一些有用的思考整理下来,分享给大家。
在加解密的领域中,非对称加密(Asymmetric Cryptographic Algorithm)已经渗入到网络交互的各个环节中了,我们都知道其中主流的RSA加密算法包含一对公私钥(Public Key & Private Key),但他们究竟是如何一起工作的?
下面会用微服务对接为例子来解释公私钥的交互过程。
正如在图中看到的,在服务双方对接之前,双方需要交换各自的公钥,这样Service A就会有:
下面开始交互过程。
这里解释一下,“数据签名/加签”其实就是用自己的私钥去给数据Hash做一层加密,对方在收到数据签名的时候,可以使用对方的公钥来解密这个签名,就会得到来自对方的数据Hash,紧接着用自己的私钥解密出数据并Hash,来比较两个Hash数据看是否一致来确认是否有被第三方篡改。
在Service B收到Service A的请求后,它需要先使用B_private.key 来解密Data得到明文数据,然后使用A_public.key来验证签名,对比签名中的Hash和自己手上的数据Hash是否一致,这就是Service B中的验签流程。
在验签和解密通过后,它就可以继续走自己的业务逻辑了。
对于Service B往Service A发送请求,和上面的流程一样只是流程方向反过来了。