导航:首页 > 文档加密 > 公钥加密工作原理图

公钥加密工作原理图

发布时间:2024-07-25 15:51:36

A. 用图示说明对称加密技术和非对称加密技术相结合(即数字信封技术)的工作过程。

数字信封技术用于保证资料在传输过程中的安全。对称密钥加密和公钥加密技术各有其优缺点,对称密钥加密算法效率高,但密钥的愤发和管理都很困难;而公钥加密算法密钥易于管理和传递,但运行效率太低,不适于加密大量的消息,而且它要求被加密的信息块长度要小于密钥的长度。数字信封技术结合了密钥加密技术和公钥加密技术各自的优点,克服了密钥加密技术中密钥分发和管理困难和公钥加密技术中加解密效率低的缺点,充分利用了密钥系统的高效性和公钥系统的灵活性,保证信息在传输过程中的灵活性。
数字信封技术首先使用密钥加密技术对要发送的消息进行加密;再利用公钥加密技术对密钥系统中使用的密钥进行加密。然后把加密的消息和加密的密钥一起传送给接收方。其具体的实现方法和步骤如下:

说明:以上图中的步骤可以解释为:
①在需要发送信息时,发送方Alice先生成一个对称密钥K;
②Alice利用生成的对称密钥K和相应的对称密钥算法E( • )对要发送的明文消息P进行加密,生成密文C=Ek(P);
③然后Alice再用接收方Bob提供的公钥KpB 对刚才用到的加密明文P的密钥K进行加密,得到加密后的密钥Ck;
④Alice把加密后的消息C和加密后的对称密钥Ck作为密文一起传送给Bob。
⑤Bob接收到密文后,先用自己的私钥解密Ck还原出对称密钥K,然后再用得到的K,根据实现商定好的对称密钥算法解密得到明文P。

数字信封技术实际上是使用双层加密体制。在内层,利用对称密钥加密技术,每次传送消息都可以重新生成新的对称密钥,实现了一次一密,保证了信息的安全性。在外层,使用公钥加密技术对对称密钥进行加密,保证对称密钥传输的安全性。数字信封技术的应用,使资料信息在公共为了中的传输有了安全保障。

B. 【深度知识】区块链之加密原理图示(加密,签名)

先放一张以太坊的架构图:

在学习的过程中主要是采用单个模块了学习了解的,包括P2P,密码学,网络,协议等。直接开始总结:

秘钥分配问题也就是秘钥的传输问题,如果对称秘钥,那么只能在线下进行秘钥的交换。如果在线上传输秘钥,那就有可能被拦截。所以采用非对称加密,两把钥匙,一把私钥自留,一把公钥公开。公钥可以在网上传输。不用线下交易。保证数据的安全性。

如上图,A节点发送数据到B节点,此时采用公钥加密。A节点从自己的公钥中获取到B节点的公钥对明文数据加密,得到密文发送给B节点。而B节点采用自己的私钥解密。

2、无法解决消息篡改。

如上图,A节点采用B的公钥进行加密,然后将密文传输给B节点。B节点拿A节点的公钥将密文解密。

1、由于A的公钥是公开的,一旦网上黑客拦截消息,密文形同虚设。说白了,这种加密方式,只要拦截消息,就都能解开。

2、同样存在无法确定消息来源的问题,和消息篡改的问题。

如上图,A节点在发送数据前,先用B的公钥加密,得到密文1,再用A的私钥对密文1加密得到密文2。而B节点得到密文后,先用A的公钥解密,得到密文1,之后用B的私钥解密得到明文。

1、当网络上拦截到数据密文2时, 由于A的公钥是公开的,故可以用A的公钥对密文2解密,就得到了密文1。所以这样看起来是双重加密,其实最后一层的私钥签名是无效的。一般来讲,我们都希望签名是签在最原始的数据上。如果签名放在后面,由于公钥是公开的,签名就缺乏安全性。

2、存在性能问题,非对称加密本身效率就很低下,还进行了两次加密过程。

如上图,A节点先用A的私钥加密,之后用B的公钥加密。B节点收到消息后,先采用B的私钥解密,然后再利用A的公钥解密。

1、当密文数据2被黑客拦截后,由于密文2只能采用B的私钥解密,而B的私钥只有B节点有,其他人无法机密。故安全性最高。
2、当B节点解密得到密文1后, 只能采用A的公钥来解密。而只有经过A的私钥加密的数据才能用A的公钥解密成功,A的私钥只有A节点有,所以可以确定数据是由A节点传输过来的。

经两次非对称加密,性能问题比较严重。

基于以上篡改数据的问题,我们引入了消息认证。经过消息认证后的加密流程如下:

当A节点发送消息前,先对明文数据做一次散列计算。得到一个摘要, 之后将照耀与原始数据同时发送给B节点。当B节点接收到消息后,对消息解密。解析出其中的散列摘要和原始数据,然后再对原始数据进行一次同样的散列计算得到摘要1, 比较摘要与摘要1。如果相同则未被篡改,如果不同则表示已经被篡改。

在传输过程中,密文2只要被篡改,最后导致的hash与hash1就会产生不同。

无法解决签名问题,也就是双方相互攻击。A对于自己发送的消息始终不承认。比如A对B发送了一条错误消息,导致B有损失。但A抵赖不是自己发送的。

在(三)的过程中,没有办法解决交互双方相互攻击。什么意思呢? 有可能是因为A发送的消息,对A节点不利,后来A就抵赖这消息不是它发送的。

为了解决这个问题,故引入了签名。这里我们将(二)-4中的加密方式,与消息签名合并设计在一起。

在上图中,我们利用A节点的私钥对其发送的摘要信息进行签名,然后将签名+原文,再利用B的公钥进行加密。而B得到密文后,先用B的私钥解密,然后 对摘要再用A的公钥解密,只有比较两次摘要的内容是否相同。这既避免了防篡改问题,有规避了双方攻击问题。因为A对信息进行了签名,故是无法抵赖的。

为了解决非对称加密数据时的性能问题,故往往采用混合加密。这里就需要引入对称加密,如下图:

在对数据加密时,我们采用了双方共享的对称秘钥来加密。而对称秘钥尽量不要在网络上传输,以免丢失。这里的共享对称秘钥是根据自己的私钥和对方的公钥计算出的,然后适用对称秘钥对数据加密。而对方接收到数据时,也计算出对称秘钥然后对密文解密。

以上这种对称秘钥是不安全的,因为A的私钥和B的公钥一般短期内固定,所以共享对称秘钥也是固定不变的。为了增强安全性,最好的方式是每次交互都生成一个临时的共享对称秘钥。那么如何才能在每次交互过程中生成一个随机的对称秘钥,且不需要传输呢?

那么如何生成随机的共享秘钥进行加密呢?

对于发送方A节点,在每次发送时,都生成一个临时非对称秘钥对,然后根据B节点的公钥 和 临时的非对称私钥 可以计算出一个对称秘钥(KA算法-Key Agreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:

对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥 与 B节点自身的私钥 计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。

对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入 Nonce ),再比如彩虹表(参考 KDF机制解决 )之类的问题。由于时间及能力有限,故暂时忽略。

那么究竟应该采用何种加密呢?

主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。

密码套件 是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。

在整个网络的传输过程中,根据密码套件主要分如下几大类算法:

秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。

消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。

批量加密算法:比如AES, 主要用于加密信息流。

伪随机数算法:例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个 主密钥 ——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。

在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。

握手/网络协商阶段:

在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等

身份认证阶段:

身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。

消息加密阶段:

消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。

消息身份认证阶段/防篡改阶段:

主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。

ECC :Elliptic Curves Cryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成 公钥、私钥的算法。用于生成公私秘钥。

ECDSA :用于数字签名,是一种数字签名算法。一种有效的数字签名使接收者有理由相信消息是由已知的发送者创建的,从而发送者不能否认已经发送了消息(身份验证和不可否认),并且消息在运输过程中没有改变。ECDSA签名算法是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。 主要用于身份认证阶段

ECDH :也是基于ECC算法的霍夫曼树秘钥,通过ECDH,双方可以在不共享任何秘密的前提下协商出一个共享秘密,并且是这种共享秘钥是为当前的通信暂时性的随机生成的,通信一旦中断秘钥就消失。 主要用于握手磋商阶段。

ECIES: 是一种集成加密方案,也可称为一种混合加密方案,它提供了对所选择的明文和选择的密码文本攻击的语义安全性。ECIES可以使用不同类型的函数:秘钥协商函数(KA),秘钥推导函数(KDF),对称加密方案(ENC),哈希函数(HASH), H-MAC函数(MAC)。

ECC 是椭圆加密算法,主要讲述了按照公私钥怎么在椭圆上产生,并且不可逆。 ECDSA 则主要是采用ECC算法怎么来做签名, ECDH 则是采用ECC算法怎么生成对称秘钥。以上三者都是对ECC加密算法的应用。而现实场景中,我们往往会采用混合加密(对称加密,非对称加密结合使用,签名技术等一起使用)。 ECIES 就是底层利用ECC算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。

<meta charset="utf-8">

这个先订条件是为了保证曲线不包含奇点。

所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:

所有的非对称加密的基本原理基本都是基于一个公式 K = k G。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法 就是要保证 该公式 不可进行逆运算( 也就是说G/K是无法计算的 )。 *

ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。

我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据k G计算出我们的公钥K。并且保证公钥K也要在曲线上。*

那么k G怎么计算呢?如何计算k G才能保证最后的结果不可逆呢?这就是ECC算法要解决的。

首先,我们先随便选择一条ECC曲线,a = -3, b = 7 得到如下曲线:

在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那么我们只要能在曲线上计算出加法,理论上就能算乘法。所以,只要能在这个曲线上进行加法计算,理论上就可以来计算乘法,理论上也就可以计算k*G这种表达式的值。

曲线上两点的加法又怎么算呢?这里ECC为了保证不可逆性,在曲线上自定义了加法体系。

现实中,1+1=2,2+2=4,但在ECC算法里,我们理解的这种加法体系是不可能。故需要自定义一套适用于该曲线的加法体系。

ECC定义,在图形中随机找一条直线,与ECC曲线相交于三个点(也有可能是两个点),这三点分别是P、Q、R。

那么P+Q+R = 0。其中0 不是坐标轴上的0点,而是ECC中的无穷远点。也就是说定义了无穷远点为0点。

同样,我们就能得出 P+Q = -R。 由于R 与-R是关于X轴对称的,所以我们就能在曲线上找到其坐标。

P+R+Q = 0, 故P+R = -Q , 如上图。

以上就描述了ECC曲线的世界里是如何进行加法运算的。

从上图可看出,直线与曲线只有两个交点,也就是说 直线是曲线的切线。此时P,R 重合了。

也就是P = R, 根据上述ECC的加法体系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0

于是乎得到 2 P = -Q (是不是与我们非对称算法的公式 K = k G 越来越近了)。

于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。

假若 2 可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。

那么我们是不是可以随机任何一个数的乘法都可以算呢? 答案是肯定的。 也就是点倍积 计算方式。

选一个随机数 k, 那么k * P等于多少呢?

我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描 述成二进制然后计算。假若k = 151 = 10010111

由于2 P = -Q 所以 这样就计算出了k P。 这就是点倍积算法 。所以在ECC的曲线体系下是可以来计算乘法,那么以为这非对称加密的方式是可行的。

至于为什么这样计算 是不可逆的。这需要大量的推演,我也不了解。但是我觉得可以这样理解:

我们的手表上,一般都有时间刻度。现在如果把1990年01月01日0点0分0秒作为起始点,如果告诉你至起始点为止时间流逝了 整1年,那么我们是可以计算出现在的时间的,也就是能在手表上将时分秒指针应该指向00:00:00。但是反过来,我说现在手表上的时分秒指针指向了00:00:00,你能告诉我至起始点算过了有几年了么?

ECDSA签名算法和其他DSA、RSA基本相似,都是采用私钥签名,公钥验证。只不过算法体系采用的是ECC的算法。交互的双方要采用同一套参数体系。签名原理如下:

在曲线上选取一个无穷远点为基点 G = (x,y)。随机在曲线上取一点k 作为私钥, K = k*G 计算出公钥。

签名过程:

生成随机数R, 计算出RG.

根据随机数R,消息M的HASH值H,以及私钥k, 计算出签名S = (H+kx)/R.

将消息M,RG,S发送给接收方。

签名验证过程:

接收到消息M, RG,S

根据消息计算出HASH值H

根据发送方的公钥K,计算 HG/S + xK/S, 将计算的结果与 RG比较。如果相等则验证成功。

公式推论:

HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG

在介绍原理前,说明一下ECC是满足结合律和交换律的,也就是说A+B+C = A+C+B = (A+C)+B。

这里举一个WIKI上的例子说明如何生成共享秘钥,也可以参考 Alice And Bob 的例子。

Alice 与Bob 要进行通信,双方前提都是基于 同一参数体系的ECC生成的 公钥和私钥。所以有ECC有共同的基点G。

生成秘钥阶段:

Alice 采用公钥算法 KA = ka * G ,生成了公钥KA和私钥ka, 并公开公钥KA。

Bob 采用公钥算法 KB = kb * G ,生成了公钥KB和私钥 kb, 并公开公钥KB。

计算ECDH阶段:

Alice 利用计算公式 Q = ka * KB 计算出一个秘钥Q。

Bob 利用计算公式 Q' = kb * KA 计算出一个秘钥Q'。

共享秘钥验证:

Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'

故 双方分别计算出的共享秘钥不需要进行公开就可采用Q进行加密。我们将Q称为共享秘钥。

在以太坊中,采用的ECIEC的加密套件中的其他内容:

1、其中HASH算法采用的是最安全的SHA3算法 Keccak 。

2、签名算法采用的是 ECDSA

3、认证方式采用的是 H-MAC

4、ECC的参数体系采用了secp256k1, 其他参数体系 参考这里

H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:

以太坊 的 UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。

首先,以太坊的UDP通信的结构如下:

其中,sig是 经过 私钥加密的签名信息。mac是可以理解为整个消息的摘要, ptype是消息的事件类型,data则是经过RLP编码后的传输数据。

其UDP的整个的加密,认证,签名模型如下:

C. 加密那些事--非对称加密详解

“非对称加密也叫公钥密码:使用公钥 加密 ,使用私钥解密”

在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。用于解密的密钥必须被配送给接收者,这一问题称为密钥配送问题。如果使用非对称加密,则无需向接收者配送用于解密的密钥,这样就解决了密钥配送的问题。

 非对称加密中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。需理解公钥密码,清楚地分加密密钥和解密密钥是非常重要的。加密密钥是发送者加密时使用的,而解密密钥则是接收者解密时使用的。

加密密钥和解密密钥的区别:

a.发送者只需要加密密钥

b.接收者只需要解密密钥

c.解密密钥不可以被窃听者获取

d.加密密钥被窃听者获取也没关系

也就是说,解密密钥从一开始就是由接收者自己保管的,因此只要将加密密钥发给发送者就可以解决密钥配送问题了,而根本不需要配送解密密钥。

非对称加密中,加密密钥一般是公开的。真是由于加密密钥可以任意公开,因此该密钥被称为公钥(pulickey)。相对地解密密钥是绝对不能公开的,这个密钥只能由你自己来使用,因此称为私钥(privatekey)****。私钥不可以被别人知道,也不可以将它发送给别人。

公钥和私钥是"一一对应的",一对公钥和私钥统称为密钥对(keypair)。由公钥进行加密的密文,必须使用与该公钥配对的私钥才能解密。密钥对中的两个密钥之间具有非常密切的的关系(数学上的关系)。因此公钥和私钥不能分别单独生成。

非对称加密通讯流程

假设A要给B发一条信息,A是发送者,B是接收者,窃听者C可以窃听他们之间的通讯内容。

1.B生成一个包含公钥和私钥的密钥对  

私钥由B自行妥善保管

2.B将自己的公钥发送给A

B的公钥被C截获也没关系。将公钥发给A,表示B请A用这个公钥对消息进行加密并发送给他。

3.A用B的公钥对消息进行加密

加密后的消息只有B的私钥才能够解密。

虽然A拥有B的公钥,但用B的公钥是无法对密文进行解密的。

4.A将密文发送给B   

密文被C截获也没关系,C可能拥有B的公钥,但是B的公钥是无法进行解密的。

5.B用自己的私钥对密文进行解密。

参考下图

RSA是一种非对称加密算法,它的名字由三位开发者。即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母组成的(Rivest-Shamir-Leonard)

RSA的加密工程可以用下来公式来表达,如下。

也就是说,RSA的密文是对代表明文的数字的E次方求modN的结果。换句话说,就是将明文自己做E次乘法,然后将其结果除以N求余数,这个余数就是密文。

RSA的加密是求明文的E次方modN,因此只要知道E和N这两个数,任何人都可以完成加密的运算。所以说E和N是RSA加密的密钥。也就是说E和N的组合就是公钥

有一个很容易引起误解的地方需要大家注意一一E和N这两个数并不是密钥对(公钥和私钥的密钥对)。E和N两个数才组成了一个公钥,因此我们一般会写成 “公钥是(E,N)” 或者 “公钥是{E, N}" 这样的形式,将E和N用括号括起来。

1.3.2 RSA解密

RSA的解密和加密一样简单,可以用下面的公式来表达:

也就是说,对表示密文的数字的D次方求modN就可以得到明文。换句话说,将密文自己做D次乘法,在对其结果除以N求余数,就可以得到明文 。

这里所使用的数字N和加密时使用的数字N是相同的。数D和数N组合起来就是RSA的解密密钥,因此D和N的组合就是私钥。只有知道D和N两个数的人才能够完成解密的运算。

大家应该已经注意到,在RSA中,加密和解密的形式是相同的。加密是求 "E次方的mod N”,而解密则是求 "D次方的modN”,这真是太美妙了。

当然,D也并不是随便什么数都可以的,作为解密密钥的D,和数字E有着相当紧密的联系。否则,用E加密的结果可以用D来解密这样的机制是无法实现的。

顺便说一句, D是解密〈Decryption)的首字母,N是数字(Number)的首字母 。

RSA加密和解密

声明该文章仅做个人学习使用,无任何商业用途。

原文链接:https://blog.csdn.net/atlansi/article/details/111144109

D. 图文彻底搞懂非对称加密(公钥密钥)

前文详细讲解了对称加密及算法原理。那么是不是对称加密就万无一失了呢?对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥。你可以能会提出疑问:既然要加、解密,当然双方都要持有密钥,这有什么问题呢?别急,我们继续往下看。

我们先看一个例子,小明和小红要进行通信,但是不想被其他人知道通信的内容,所以双方决定采用对称加密的方式。他们做了下面的事情:

1、双方商定了加密和解密的算法

2、双方确定密钥

3、通信过程中采用这个密钥进行加密和解密

这是不是一个看似完美的方案?但其中有一个步骤存在漏洞!

问题出在步骤2:双方确定密钥!

你肯定会问,双方不确定密钥,后面的加、解密怎么做?

问题在于确定下来的密钥如何让双方都知道。密钥在传递过程中也是可能被盗取的!这里引出了一个经典问题:密钥配送问题。

小明和小红在商定密钥的过程中肯定会多次沟通密钥是什么。即使单方一次确定下来,也要发给对方。加密是为了保证信息传输的安全,但密钥本身也是信息,密钥的传输安全又该如何保证呢?难不成还要为密钥的传输再做一次加密?这样不就陷入了死循环?

你是不是在想,密钥即使被盗取,不还有加密算法保证信息安全吗?如果你真的有这个想法,那么赶紧复习一下上一篇文章讲的杜绝隐蔽式安全性。任何算法最终都会被破译,所以不能依赖算法的复杂度来保证安全。

小明和小红现在左右为难,想加密就要给对方发密钥,但发密钥又不能保证密钥的安全。他们应该怎么办呢?

有如下几种解决密钥配送问题的方案:

非对称加密也称为公钥密码。我更愿意用非对称加密这种叫法。因为可以体现出加密和解密使用不同的密钥。

对称加密中,我们只需要一个密钥,通信双方同时持有。而非对称加密需要4个密钥。通信双方各自准备一对公钥和私钥。其中公钥是公开的,由信息接受方提供给信息发送方。公钥用来对信息加密。私钥由信息接受方保留,用来解密。既然公钥是公开的,就不存在保密问题。也就是说非对称加密完全不存在密钥配送问题!你看,是不是完美解决了密钥配送问题?

回到刚才的例子,小明和下红经过研究发现非对称加密能解决他们通信的安全问题,于是做了下面的事情:

1、小明确定了自己的私钥 mPrivateKey,公钥 mPublicKey。自己保留私钥,将公钥mPublicKey发给了小红

2、小红确定了自己的私钥 hPrivateKey,公钥 hPublicKey。自己保留私钥,将公钥 hPublicKey 发给了小明

3、小明发送信息 “周六早10点soho T1楼下见”,并且用小红的公钥 hPublicKey 进行加密。

4、小红收到信息后用自己的私钥 hPrivateKey 进行解密。然后回复 “收到,不要迟到” 并用小明的公钥mPublicKey加密。

5、小明收到信息后用自己的私钥 mPrivateKey 进行解密。读取信息后心里暗想:还提醒我不迟到?每次迟到的都是你吧?

以上过程是一次完整的request和response。通过这个例子我们梳理出一次信息传输的非对称加、解密过程:

1、消息接收方准备好公钥和私钥

2、私钥接收方自己留存、公钥发布给消息发送方

3、消息发送方使用接收方公钥对消息进行加密

4、消息接收方用自己的私钥对消息解密

公钥只能用做数据加密。公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。

下面我用一个更为形象的例子来帮助大家理解。

我有下图这样一个信箱。

由于我只想接收我期望与之通信的朋友信件。于是我在投递口加了一把锁,这把锁的钥匙(公钥)我可以复制n份,发给我想接受其信件的人。只有这些人可以用这把钥匙打开寄信口,把信件投入。

相信通过这个例子,可以帮助大家彻底理解公钥和私钥的概念。

RSA 是现在使用最为广泛的非对称加密算法,本节我们来简单介绍 RSA 加解密的过程。

RSA 加解密算法其实很简单:

密文=明文^E mod N

明文=密文^D mod N

RSA 算法并不会像对称加密一样,用玩魔方的方式来打乱原始信息。RSA 加、解密中使用了是同样的数 N。公钥是公开的,意味着 N 也是公开的。所以私钥也可以认为只是 D。

我们接下来看一看 N、E、D 是如何计算的。

1、求 N

首先需要准备两个很大质数 a 和 b。太小容易破解,太大计算成本太高。我们可以用 512 bit 的数字,安全性要求高的可以使用 1024,2048 bit。

N=a*b

2、求 L

L 只是生成密钥对过程中产生的数,并不参与加解密。L 是 (a-1) 和 (b-1) 的最小公倍数

3、求 E(公钥)

E 有两个限制:

1<E<

E和L的最大公约数为1

第一个条件限制了 E 的取值范围,第二个条件是为了保证有与 E 对应的解密时用到的 D。

4、求 D(私钥)

D 也有两个限制条件:

1<D<L

E*D mod L = 1

第二个条件确保密文解密时能够成功得到原来的明文。

由于原理涉及很多数学知识,这里就不展开细讲,我们只需要了解这个过程中用到这几个数字及公式。这是理解RSA 安全性的基础。

由于 N 在公钥中是公开的,那么只需要破解 D,就可以解密得到明文。

在实际使用场景中,质数 a,b 一般至少1024 bit,那么 N 的长度在 2048 bit 以上。D 的长度和 N 接近。以现在计算机的算力,暴力破解 D 是非常困难的。

公钥是公开的,也就是说 E 和 N 是公开的,那么是否可以通过 E 和 N 推断出 D 呢?

E*D mod L = 1

想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍数。想知道 L 就需要知道质数 a 和 b。破解者并不知道这两个质数,想要破解也只能通过暴力破解。这和直接破解 D 的难度是一样的。

等等,N 是公开的,而 N = a*b。那么是否可以对 N 进行质因数分解求得 a 和 b 呢?好在人类还未发现高效进行质因数分解的方法,因此可以认为做质因数分解非常困难。

但是一旦某一天发现了快速做质因数分解的算法,那么 RSA 就不再安全

我们可以看出大质数 a 和 b 在 RSA 算法中的重要性。保证 a 和 b 的安全也就确保了 RSA 算法的安全性。a 和 b 是通过伪随机生成器生成的。一旦伪随机数生成器的算法有问题,导致随机性很差或者可以被推断出来。那么 RSA 的安全性将被彻底破坏。

中间人攻击指的是在通信双方的通道上,混入攻击者。他对接收方伪装成发送者,对放送放伪装成接收者。

他监听到双方发送公钥时,偷偷将消息篡改,发送自己的公钥给双方。然后自己则保存下来双方的公钥。

如此操作后,双方加密使用的都是攻击者的公钥,那么后面所有的通信,攻击者都可以在拦截后进行解密,并且篡改信息内容再用接收方公钥加密。而接收方拿到的将会是篡改后的信息。实际上,发送和接收方都是在和中间人通信。

要防范中间人,我们需要使用公钥证书。这部分内容在下一篇文章里会做介绍。

和对称加密相比较,非对称加密有如下特点:

1、非对称加密解决了密码配送问题

2、非对称加密的处理速度只有对称加密的几百分之一。不适合对很长的消息做加密。

3、1024 bit 的 RSA不应该在被新的应用使用。至少要 2048 bit 的 RSA。

RSA 解决了密码配送问题,但是效率更低。所以有些时候,根据需求可能会配合使用对称和非对称加密,形成混合密码系统,各取所长。

最后提醒大家,RSA 还可以用于签名,但要注意是私钥签名,公钥验签。发信方用自己的私钥签名,收信方用对方公钥验签。关于签名,后面的文章会再详细讲解。

E. 公钥密码系统及RSA公钥算法

公钥密码系统及RSA公钥算法

本文简单介绍了公开密钥密码系统的思想和特点,并具体介绍了RSA算法的理论基础,工作原理和具体实现过程,并通过一个简单例子说明了该算法是如何实现。在本文的最后,概括说明了RSA算法目前存在的一些缺点和解决方法。

关键词:公钥密码体制 , 公钥 ,私钥 ,RSA

§1引言

随着计算机联网的逐步实现,Internet前景越来越美好,全球经济发展正在进入信息经济时代,知识经济初见端倪。计算机信息的保密问题显得越来越重要,无论是个人信息通信还是电子商务发展,都迫切需要保证Internet网上信息传输的安全,需要保证信息安全。信息安全技术是一门综合学科,它涉及信息论、计算机科学和密码学等多方面知识,它的主要任务是研究计算机系统和通信网络内信息的保护方法以实现系统内信息的安全、保密、真实和完整。其中,信息安全的核心是密码技术。密码技术是集数学、计算机科学、电子与通信等诸多学科于一身的交叉学科。它不仅能够保证机密性信息的加密,而且能够实现数字签名、身份验证、系统安全等功能。是现代化发展的重要科学之一。本文将对公钥密码系统及该系统中目前最广泛流行的RSA算法做一些简单介绍。

§2公钥密码系统

要说明公钥密码系统,首先来了解一下不同的加密算法:目前的加密算法按密钥方式可分为单钥密码算法和公钥密码算法。

2.1.单钥密码

又称对称式密码,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。

单钥密码系统的安全性依赖于以下两个因素:第一,加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的;第二,加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性,因此,我们没有必要确保算法的秘密性(事实上,现实中使用的很多单钥密码系统的算法都是公开的),但是我们一定要保证密钥的秘密性。

从单钥密码的这些特点我们容易看出它的主要问题有两点:第一,密钥量问题。在单钥密码系统中,每一对通信者就需要一对密钥,当用户增加时,必然会带来密钥量的成倍增长,因此在网络通信中,大量密钥的产生﹑存放和分配将是一个难以解决的问题。第二,密钥分发问题。单钥密码系统中,加密的安全性完全依赖于对密钥的保护,但是由于通信双方使用的是相同的密钥,人们又不得不相互交流密钥,所以为了保证安全,人们必须使用一些另外的安全信道来分发密钥,例如用专门的信使来传送密钥,这种做法的代价是相当大的,甚至可以说是非常不现实的,尤其在计算机网络环境下,人们使用网络传送加密的文件,却需要另外的安全信道来分发密钥,显而易见,这是非常不智是甚至是荒谬可笑的。

2.2公钥密码

正因为单钥密码系统存在如此难以解决的缺点,发展一种新的﹑更有效﹑更先进的密码体制显得更为迫切和必要。在这种情况下,出现了一种新的公钥密码体制,它突破性地解决了困扰着无数科学家的密钥分发问题,事实上,在这种体制中,人们甚至不用分发需要严格保密的密钥,这次突破同时也被认为是密码史上两千年来自单码替代密码发明以后最伟大的成就。

这一全新的思想是本世纪70年代,美国斯坦福大学的两名学者Diffie和Hellman提出的,该体制与单钥密码最大的不同是:

在公钥密码系统中,加密和解密使用的是不同的密钥(相对于对称密钥,人们把它叫做非对称密钥),这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。

为了说明这一思想,我们可以考虑如下的类比:

两个在不安全信道中通信的人,假设为Alice(收信者)和Bob(发信者),他们希望能够安全的通信而不被他们的敌手Oscar破坏。Alice想到了一种办法,她使用了一种锁(相当于公钥),这种锁任何人只要轻轻一按就可以锁上,但是只有Alice的钥匙(相当于私钥)才能够打开。然后Alice对外发送无数把这样的锁,任何人比如Bob想给她寄信时,只需找到一个箱子,然后用一把Alice的锁将其锁上再寄给Alice,这时候任何人(包括Bob自己)除了拥有钥匙的Alice,都不能再打开箱子,这样即使Oscar能找到Alice的锁,即使Oscar能在通信过程中截获这个箱子,没有Alice的钥匙他也不可能打开箱子,而Alice的钥匙并不需要分发,这样Oscar也就无法得到这把“私人密钥”。

从以上的介绍可以看出,公钥密码体制的思想并不复杂,而实现它的关键问题是如何确定公钥和私钥及加/解密的算法,也就是说如何找到“Alice的锁和钥匙”的问题。我们假设在这种体制中, PK是公开信息,用作加密密钥,而SK需要由用户自己保密,用作解密密钥。加密算法E和解密算法D也都是公开的。虽然SK与PK是成对出现,但却不能根据PK计算出SK。它们须满足条件:

①加密密钥PK对明文X加密后,再用解密密钥SK解密,即可恢复出明文,或写为:DSK(EPK(X))=X

②加密密钥不能用来解密,即DPK(EPK(X))≠X

③在计算机上可以容易地产生成对的PK和SK。

④从已知的PK实际上不可能推导出SK。

⑤加密和解密的运算可以对调,即:EPK(DSK(X))=X

从上述条件可看出,公开密钥密码体制下,加密密钥不等于解密密钥。加密密钥可对外公开,使任何用户都可将传送给此用户的信息用公开密钥加密发送,而该用户唯一保存的私人密钥是保密的,也只有它能将密文复原、解密。虽然解密密钥理论上可由加密密钥推算出来,但这种算法设计在实际上是不可能的,或者虽然能够推算出,但要花费很长的时间而成为不可行的。所以将加密密钥公开也不会危害密钥的安全。

这种体制思想是简单的,但是,如何找到一个适合的算法来实现这个系统却是一个真正困扰密码学家们的难题,因为既然Pk和SK是一对存在着相互关系的密钥,那么从其中一个推导出另一个就是很有可能的,如果敌手Oscar能够从PK推导出SK,那么这个系统就不再安全了。因此如何找到一个合适的算法生成合适的Pk和SK,并且使得从PK不可能推导出SK,正是迫切需要密码学家们解决的一道难题。这个难题甚至使得公钥密码系统的发展停滞了很长一段时间。

为了解决这个问题,密码学家们考虑了数学上的陷门单向函数,下面,我们可以给出它的非正式定义:

Alice的公开加密函数应该是容易计算的,而计算其逆函数(即解密函数)应该是困难的(对于除Alice以外的人)。许多形式为Y=f(x)的函数,对于给定的自变量x值,很容易计算出函数Y的值;而由给定的Y值,在很多情况下依照函数关系f (x)计算x值十分困难。这样容易计算但难于求逆的函数,通常称为单向函数。在加密过程中,我们希望加密函数E为一个单项的单射函数,以便可以解密。虽然目前还没有一个函数能被证明是单向的,但是有很多单射函数被认为是单向的。

例如,有如下一个函数被认为是单向的,假定n为两个大素数p和q的乘积,b为一个正整数,那么定义f:

f (x )= x b mod n

(如果gcd(b,φ(n))=1,那么事实上这就是我们以下要说的RSA加密函数)

如果我们要构造一个公钥密码体制,仅给出一个单向的单射函数是不够的。从Alice的观点来看,并不需要E是单向的,因为它需要用有效的方式解密所收到的信息。因此,Alice应该拥有一个陷门,其中包含容易求出E的你函数的秘密信息。也就是说,Alice可以有效解密,因为它有额外的秘密知识,即SK,能够提供给你解密函数D。因此,我们称一个函数为一个陷门单向函数,如果它是一个单向函数,并在具有特定陷门的知识后容易求出其逆。

考虑上面的函数f (x) = xb mod n。我们能够知道其逆函数f -1有类似的形式f (x ) = xa mod n,对于合适的取值a。陷门就是利用n的因子分解,有效的算出正确的指数a(对于给定的b)。

为方便起见,我们把特定的某类陷门单向函数计为?。那么随机选取一个函数f属于?,作为公开加密函数;其逆函数f-1是秘密解密函数。那么公钥密码体制就能够实现了。

根据以上关于陷门单向函数的思想,学者们提出了许多种公钥加密的方法,它们的安全性都是基于复杂的数学难题。根据所基于的数学难题,至少有以下三类系统目前被认为是安全和有效的:大整数因子分解系统(代表性的有RSA)、椭园曲线离散对数系统(ECC)和离散对数系统(代表性的有DSA)。

§3 RSA算法

3.1简介

当前最着名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。它是一个基于数论的非对称(公开钥)密码体制,是一种分组密码体制。其名称来自于三个发明者的姓名首字母。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的着名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。

RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

该算法基于下面的两个事实,这些事实保证了RSA算法的安全有效性:

1)已有确定一个数是不是质数的快速算法;

2)尚未找到确定一个合数的质因子的快速算法。

3.2工作原理

1)任意选取两个不同的大质数p和q,计算乘积r=p*q;

2)任意选取一个大整数e,e与(p-1)*(q-1)互质,整数e用做加密密钥。注意:e的选取是很容易的,例如,所有大于p和q的质数都可用。

3)确定解密密钥d:d * e = 1 molo(p - 1)*(q - 1) 根据e、p和q可以容易地计算出d。

4)公开整数r和e,但是不公开d;

5)将明文P (假设P是一个小于r的整数)加密为密文C,计算方法为:

C = Pe molo r

6)将密文C解密为明文P,计算方法为:

P = Cd molo r

然而只根据r和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

3.3简单实例

为了说明该算法的工作过程,我们下面给出一个简单例子,显然我们在这只能取很小的数字,但是如上所述,为了保证安全,在实际应用上我们所用的数字要大的多得多。

例:选取p=3, q=5,则r=15,(p-1)*(q-1)=8。选取e=11(大于p和q的质数),通过d * 11 = 1 molo 8,计算出d =3。

假定明文为整数13。则密文C为

C = Pe molo r

= 1311 molo 15

= 1,792,160,394,037 molo 15

= 7

复原明文P为:

P = Cd molo r

= 73 molo 15

= 343 molo 15

= 13

因为e和d互逆,公开密钥加密方法也允许采用这样的方式对加密信息进行"签名",以便接收方能确定签名不是伪造的。

假设A和B希望通过公开密钥加密方法进行数据传输,A和B分别公开加密算法和相应的密钥,但不公开解密算法和相应的密钥。A和B的加密算法分别是ECA和ECB,解密算法分别是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。 若A要向B发送明文P,不是简单地发送ECB(P),而是先对P施以其解密算法DCA,再用加密算法ECB对结果加密后发送出去。

密文C为:

C = ECB(DCA(P))

B收到C后,先后施以其解密算法DCB和加密算法ECA,得到明文P:

ECA(DCB(C))

= ECA(DCB(ECB(DCA(P))))

= ECA(DCA(P))/*DCB和ECB相互抵消*/

=

P          /*DCB和ECB相互抵消*/

这样B就确定报文确实是从A发出的,因为只有当加密过程利用了DCA算法,用ECA才能获得P,只有A才知道DCA算法,没 有人,即使是B也不能伪造A的签名。

3.4优缺点

3.4.1优点

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。它特别符合计算机网络环境。对于网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发出即可。对方收到信息后,用仅为自己所知的解密密钥将信息脱密,了解报文的内容。由此可看出,RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。

3.4.2缺点

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2)安全性, RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:

( XM )d = Xd *Md mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.

3)速度太慢,由于RSA的分组长度太大,为保证安全性,n至少也要600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。

§4结束语

目前,日益激增的电子商务和其它因特网应用需求使公钥体系得以普及,这些需求量主要包括对服务器资源的访问控制和对电子商务交易的保护,以及权利保护、个人隐私、无线交易和内容完整性(如保证新闻报道或股票行情的真实性)等方面。公钥技术发展到今天,在市场上明显的发展趋势就是PKI与操作系统的集成,PKI是“Public

Key Infrastructure”的缩写,意为“公钥基础设施”。公钥体制广泛地用于CA认证、数字签名和密钥交换等领域。

公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA算法,该算法也已经在互联网的许多方面得以广泛应用,包括在安全接口层(SSL)标准(该标准是网络浏览器建立安全的互联网连接时必须用到的)方面的应用。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。

但目前RSA算法的专利期限即将结束,取而代之的是基于椭圆曲线的密码方案(ECC算法)。较之于RSA算法,ECC有其相对优点,这使得ECC的特性更适合当今电子商务需要快速反应的发展潮流。此外,一种全新的量子密码也正在发展中。

至于在实际应用中应该采用何种加密算法则要结合具体应用环境和系统,不能简单地根据其加密强度来做出判断。因为除了加密算法本身之外,密钥合理分配、加密效率与现有系统的结合性以及投入产出分析都应在实际环境中具体考虑。加密技术随着网络的发展更新,将有更安全更易于实现的算法不断产生,为信息安全提供更有力的保障。今后,加密技术会何去何从,我们将拭目以待。

参考文献:

[1] Douglas R.Stinson.《密码学原理与实践》.北京:电子工业出版社,2003,2:131-132

[2]西蒙.辛格.《密码故事》.海口:海南出版社,2001,1:271-272

[3]嬴政天下.加密算法之RSA算法.http://soft.winzheng.com/infoView/Article_296.htm,2003

[4]加密与数字签名.http://www.njt.cn/yumdq/dzsw/a2.htm

[5]黑客中级教程系列之十.http://www.qqorg.i-p.com/jiaocheng/10.html

F. SSL工作原理,SSL加密原理,SSL证书怎么加密

SSL是用于验证和加密网络通信的加密协议的原始名称。正式地,SSL在前一段时间被称为TLS的更新协议所取代。
当您收到SSL证书时,您将其安装在您的服务器上。您可以安装一个中间证书,通过将它链接到CA的根证书来建立您的SSL证书的可信度。
根证书是自签名的,构成了基于X.509的公钥基础设施(PKI)的基础。支持用于安全Web浏览和电子签名方案的HTTPS的PKI依赖于根证书。在X.509证书的其他应用程序中,证书的层次结构证明了证书的颁发有效性。该层次结构称为证书“信任链”。

G. RSA加密原理

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。公钥加密--私钥解密,私钥加密--公钥解密

在 整数 中, 离散对数 是一种基于 同余 运算和 原根 的一种 对数 运算。而在实数中对数的定义 log b a 是指对于给定的 a b ,有一个数 x ,使得 b x = a 。相同地在任何群 G 中可为所有整数 k 定义一个幂数为 b K ,而 离散对数 log b a 是指使得 b K = a 的整数 k

当3为17的 原根 时,我们会发现一个规律

对 正整数 n,欧拉函数是小于或等于n的正整数中与n 互质 的数的数目(因此φ(1)=1)。有以下几个特点

服务端根据生成一个随机数15,根据 3 15 mod 17 计算出6,服务端将6传递给客户端,客户端生成一个随机数13,根据 3 13 mod 17 计算出12后,将12再传回给服务端,客户端收到服务端传递的6后,根据 6 13 mod 17 计算出 10 ,服务端收到客户端传递的12后,根据 12 15 mod 17 计算出 10 ,我们会发现我们通过 迪菲赫尔曼密钥交换 将 10 进行了加密传递

说明:

安全性:
除了 公钥 用到 n 和 e ,其余的4个数字是 不公开 的(p1、p2、φ(n)、d)
目前破解RSA得到的方式如下:

缺点
RSA加密 效率不高 ,因为是纯粹的数学算法,大数据不适合RSA加密,所以我们在加密大数据的时候,我们先用 对称加密 算法加密大数据得到 KEY ,然后再用 RSA 加密 KEY ,再把大数据和KEY一起进行传递

因为Mac系统内置了OpenSSL(开源加密库),所以我们开源直接在终端进行RSA加密解密

生成RSA私钥,密钥名为private.pem,密钥长度为1024bit

因为在iOS中是无法使用 .pem 文件进行加密和解密的,需要进行下面几个步骤

生成一个10年期限的crt证书

crt证书格式转换成der证书

H. 【简译】公钥加密是如何工作的

最近在学习非对称加密的时候,在外网看到的一篇不错的“扫盲”文,遂简译过来分享给大家。

公钥加密,又称作非对称加密,使用的是两个key而不是一个共享的key。这两个key分别称作:公钥(public key)和私钥(private key)。公钥加密在网络安全领域是非常重要的技术。

公钥加密是一个是用到两个不同的key的加密数据的方法,这其中,公钥是公开的,允许任何人使用的,相反的,私钥是保密的、私有的。使用公钥加密的数据 只能够 被私钥解密,反过来同样,使用私钥加密的数据 只能够 被公钥解密( 木:"注意这里很多人误以为只能公钥加密私钥解密。" )。公钥加密同样被称作非对称加密,它的使用非常广泛,典型的例子就是TLS/SSL,它让HTTPS成为了可能。

在密码学中,一串key可以用来打乱数据从而让数据看起来变得杂乱无章,通常这串key是一个非常大的数字,或者一串数字字母组合。当把未加密的数据,即明文数据,放到一个含有key的加密算法中,在结果中就会得到一串看起来非常随机和杂乱的“数据”。这时候,只有一个拥有正确的key的人才可以将它变回原形,解密并且得到正确的明文数据。

举个例子,假设明文信息是 “hello”,然后使用一个key来对它加密,比如说这个key是 "2jd8932kd8"。加密后,“hello” 会变成 “X5xJCSycg14=”,看起来就很像随机的垃圾数据,但如果使用正确的key解密,我们就可以再次得到 “hello”。

公钥密码学对未接触过的人来说看起来很复杂,不过幸运的是,一位作者 Panayotis Vryonis 想到了一个类比的办法可以大致地说明这个流程。

想象一下,有一个箱子,Bob和Alice两个人需要用它来秘密地传递文件。为了安全起见,他们给箱子配上了一把锁,这把锁有两种状态:上锁态和解锁态。如果箱子被锁上了,任何一个有这把钥匙或者钥匙复制品的人都可以解锁这个箱子,反之亦然。当Bob锁住了这个箱子,然后把箱子交给Alice的时候,他是知道Alice有一把复制钥匙,所以是能够打开这个箱子的。这就是本质上的 对称加密 了:一个key既可以用来加密也可以用来解密,同时交互的两方使用的是同一个key。

现在,继续想象一下,不一样的是,这次Bob给箱子安了一个特制的锁,这把锁有三种状态:

另外,不同的是,这把锁需要用到两把不同的钥匙:

这意味着如果箱子被锁上了,同时锁孔被转到了A的位置,那就意味着只能用2号钥匙来解锁这个箱子了(往右转到中间位置解锁)。类似的,如果箱子被锁上了,同时锁孔转动到了C位置,那就只能用1号钥匙来解锁这个箱子了(往左转到中间位置解锁)。

换句话说,1号 2号钥匙都能锁住这个箱子,但是一旦被锁住,只能使用另一把来解锁箱子。

现在,Bob 复制了一批 2号钥匙,并把它们分给了所有他认识的和想要这把钥匙的人 ——— 这就是 公钥 了,Bob自己则保留着唯一的一把1号钥匙 ——— 这就是他的 私钥 了。

这样做究竟意味着什么?

到这里,我们把箱子换成明文密码,把钥匙换成密码学的公私钥,这就是公钥加密/非对称加密的工作流程和原理了。私钥加密的信息,只有公钥的拥有者可以解密,同时,公钥加密的数据,只有私钥的拥有者可以解密。这样,任何人都可以安全的把数据发送给私钥的拥有者,同时任何人都可以验证信息来源是私钥的拥有者而不是其他模仿者。

公钥加密/非对称加密对互联网的安全交互是非常有用的(通过HTTPS)。一个网站的 SSL/TLS 证书,就是公开出去的公钥,同时私钥是保存在来源服务器上的 —— 它是被网站所“拥有”的。

TLS 握手就是使用非对称加密来验证来源服务器的身份的,同时交换了必要的数据,来生成Sessiong Key。比如RSA 或者 Diffie-Hellman 算法就是使用了非对称加密的公私钥对来交换数据得到 Session Key,握手结束后,Session Key就会被当作对称加密的密钥来进行沟通。每一次会话,客户端与服务端都认同并接受新的session key,这样居心叵测的人 —— 哪怕他识别或者盗窃了其中一条session key,也不能够解密所有的交互数据( 木:“这是非常经典的非对称加密和对称加密混合使用的例子。” )。

这是一篇简单翻译的针对非对称加密的技术文,分享出来的主要原因就是文中对于公私钥加解密的举例非常巧妙,适合新人“扫盲”。希望大家有所收获。

原文链接: https://www.cloudflare.com/learning/ssl/how-does-public-key-encryption-work/

阅读全文

与公钥加密工作原理图相关的资料

热点内容
看电视可以用什么app 浏览:943
安卓路由表怎么看 浏览:76
10个小孩分糖果python 浏览:825
安卓app小红点怎么取消 浏览:288
马哥linux面授 浏览:772
2345程序员 浏览:374
怎么开启网速显示安卓 浏览:206
索尼950app怎么样 浏览:400
计算机毕设论文源码 浏览:148
小米手机怎么下载易媒体App 浏览:191
还原系统设计可以怎样清理文件夹 浏览:670
北京时间校准服务器云服务器 浏览:844
pythonexcel数据计算 浏览:49
内医附院党建APP怎么下载 浏览:356
荣耀v20刷加密门禁卡 浏览:329
app缓冲视频怎么保存在手机 浏览:433
广度优先算法c语言 浏览:680
提高程序员竞争力 浏览:108
nfc可以开加密门卡吗 浏览:675
如何知道网页使用的服务器是什么 浏览:224