密码学中的加密方式从密钥的数量方向可以分为对称加密和非对称加密,对称加密只使用一把密钥来对数据进行加解密,而非对称加密使用两把密钥来进行加密,分别为公钥和私钥。对称加密和非对称加密有很多非常出名的算法,例如:对称加密比较有名的算法有DES和AES,非对称加密有RSA和ECC。对称加密和非对称加密各有优缺点,那么咱们怎么去利用他们的优缺点呢?本章我们将分别从理论和实践的角度分析对称加密和非对称加密,让更加容易地理解对称加密和非对称加密。
1.关于对称加密和非对称加密
我们都知道,密码体制有两种:对称密码体制(又称为单钥密码体制)和非对称密码体制(又称为双钥密码体制或公钥密码体制)。对称密码体制使用相同的密钥(秘密密钥)对消息进行加密/解密,系统的保密性主要由密钥的安全性决定,而与算法是否保密无关。
对称密码体制设计和实现的中心是:用何种方法产生满足保密要求的密钥以及用何种方法将密钥安全又可靠地分配给通信双方。对称密码体制可以通过分组密码或流密码来实现,它既可以用于数据加密,又可以用于消息认证。非对称密码体制使用公钥加密消息,使用私钥来解密。使用非对称密码体制可增强通信的安全性。
在密码学体系中,对称加密、非对称加密、单向散列函数、消息认证码、数字签名和伪随机数生成器被统称为密码学家的工具箱。其中,对称加密和非对称加密主要是用来保证机密性;单向散列函数用来保证消息的完整性;消息认证码的功能主要是认证;数字签名保证消息的不可抵赖性。这篇文章所要讲诉的就是保证消息的机密性的对称密码和非对称密码。
对称加密
对称加密又称但密钥加密,整个加密过程中只使用一个密钥。所谓对称其实就是使用一把密钥加密,使用同一把密钥解密。对称加密由于加解和解密使用的是同一个密钥算法,故而在加解密的过程中速度比较快,适合于数据量比较大的加解密。
对称加密的主要有优点就是算法公开、计算量小、加密速度快、加密效率高;但是它也存在强大的缺点,缺点就是密钥协商过程中,一旦密钥泄露,别人可以获取到密钥,这样也能对密文进行解密。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一密钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
常用的对称加密算法有DES、3DES、AES、TDEA、Blowfish、RC2、RC4和RC5等。
两种经典的对称加密算法
DES
DES加密解密算法最初由美国IBM公司研究人员所设计发明,且为第一个公开的商用密码算法标准,自诞生以来便得到了ISO的一致认可。DES是分组密码算法的典型代表,它的明文分组长度为64bits,密钥长度为64bits,其中包括有8bits的奇偶校验,因此有效密钥长度为56bits。DES加密解密算法使用的过程相同,且可以随时均都可以进行变动。它们其中有极少数被认为是易破解的弱密钥,但是很容易抛开它们不使用,因此其自身安全性主要依赖于有效密钥。
DES算法加密过程首先先对明文分组进行操作,需要加密的明文分为每块64bits的固定大小。下图所示左右两部分分别为64bits的明文分组加密过程和其16个子密钥生成的过程。
DES核心算法模块
IP初始置换IP初始置换,在第一轮运算之前执行,对输入的分组采用下面的数字进行IP初始变换,按照从左向右、从上向下进行置换。58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
子密钥获取流程子密钥的获取流程如下图
此处,用户输入64位的密钥。根据密钥置换表PC-1,将64位变成56位密钥(此处去掉了奇偶校验位)。PC-1置换得到的56位密钥。此处密钥被分为前28位C0和后28位D0。分别对它们进行循环左移,C0左移得到C1,D0左移得到D1。将C1和D1合并变成56位。然后通过PC-2表进行压缩置换,得到此轮的48位子密钥K1。再对C1和D1进行相同的左移和压缩置换,获取下一轮的子密钥……一共进行16轮,于是可以得到16个48 bits的子密钥。
E和扩展E盒扩展置换,则是将右半部分32bits按照8行4列方式依次排列,得到一个8*4的二维矩阵,然后根据如表2所示的E盒扩展置换表扩展为8*6的二维矩阵。32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1
异或运算将P盒置换的结果与最初的64bits分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。
S盒扩展当产生了48bits密钥后就可以和明文进行异或运算,便可得到48bits的密文。再开始下轮的S盒迭代运算,其功能是把6bit数据变为4bits数据,每个S盒是一个4行、16列的表。每个S盒的使用方法为:S盒收到6bits的输入,6bits的第1个bit和最后1个bits构成的2位二进制为该S盒行号,中间的4bits二进制为该S盒的列号,然后根据行号和列号查S盒定义表得到对应的值(通常为十进制),该值就是S盒变换的输出,并转化为二进制。
P盒置换S盒代替运算之后,输出32bits,作为F函数最后一个变换P盒置换的输入。将该32bits位数据进行P盒置换,置换后得到一个仍然是32 bits的结果,此处可得F函数的输出值。
逆初始置换DES完成16轮变换后,得到64bits数据作为IP-1逆初始置换的输入,经过IP-1逆初始置换表(如表3所示),64bits输入数据位置重新编排,就得到64bits的密文。40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
AES
AES加密算法为分组密码,分组长度为128位即16个字节,密匙长度有128、192或256位,根据密匙长度的不同,加密的轮数也不同,本文采用长度为128位的密匙,加密轮数为10轮。AES加密算法不仅编码紧凑、设计简单而且可抵抗多种类型的攻击,其基本结构包括4个部分。这四个部分分别为字节替换、行位移、列混合和轮密匙加。
字节替换(SubBytes)
字节替换也就是通过S-BOX对字节元素进行非线性的变换,S-BOX由有限域GF(2的8次方)上的乘法求逆运算和仿射变换运算而来,通过查表的方式即可直接得到变换前后的字节元素,替换后字节元素至少有两位发生变换,能充分打乱原来的字节元素,本文所介绍的AES加密算法就是对S-BOX进行改进而来。具体替换规则为假设一字节为xy,则S-BOX中第x行第y列所对应的元素就是替换后的元素。
行位移(ShiftRows)
行位移是AES加密算法中的一个简单线性运算,即在4 x 4的状态矩阵中,把第i行循环左移i个字节(i=0,1,2,3)。
列混合(MixColumns)
列混合是将状态矩阵中的每一列看成一个多项式,让其与一个固定的多项式a(x)相乘,再做模多项式m(x)=x4(x的四次方)+1的运算,其中a(x)=’03‘x3(x的3次方)+’01‘x2(x的平方)+'01'x+‘02’。
轮密匙加(AddRoundKey)
轮密匙加变换就是让状态矩阵与经过密匙扩展得到的子密匙做异或运算,因此轮密匙加变换的逆变换就是其本身,其中子密匙是原始密匙通过密匙扩展算法得到的。
AES算法流程
下图是整个算法的流程图
AES加密算法先将128位的明文进行分组,得到一个4x4的明文状态矩阵作为算法的输入,然后选取密匙矩阵先对明文状态矩阵做一次轮密匙加变换,再经过10轮的轮函数加密,轮函数操作依次为字节替换、行位移、列混合和轮密匙加,其中由于最后一轮的列混合不仅不会提高安全性,反而会拉低算法运算速度,故该轮丢弃列混合变换。解密算法仍为10轮,由于算法的4个轮操作均为可逆变换,因此解密过程就是用与加密过程同样的密匙对每一轮的加密操作进行逆运算。
非对称加密
非对称加密又称为公钥密码,该技术是针对私钥密码体制(对称加密算法)的缺陷被提出来的,非对称加密会产生两把密钥,分别为公钥(Public Key)和私钥(Private Key),其中一把密钥用于加密,另一把密钥用于解密。非对称加密的特征是算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就高了很多。
常用的非对称加密算发有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
两种经典的非对称加密算法
RSA
RSA算法是一种迄今为止理论上比较成熟和完善的公钥密码体制,是非对称密码体制的典型代表。在网络、信息安全等许多方面都使用RSA算法,特别是RSA算法典型应用在通信中的数字签名,可实现对手的身份、不可抵赖性验证。在身份认证、信息安全、电子商务中有着广泛的应用前景。
RSA的算法流程
RSA算法由密钥的产生、加密算法和解密算法3个部分组成。
密钥的产生过程如下:
产生两个大素数p和q;
计算n=p×q,欧拉函数φ(n)=(p-1)(q-1)
选择整数e,使其满足条件:1<e<φ(n),且gcd(e,φ(n))=1(注:gcd()函数计算两个数的最大公约数);
计算e的逆元d:d∙e≡1 modφ(n)(注:由于gcd(e,φ(n))=1,则d一定存在);
取序对(e,n)为公钥,可公开;(d,n)为私钥,对外保密。
加密算法过程如下
将要发送的字符串分割为长度为m<n的分组,然后对分组mi执行加密运算,得到密文ci:ci≡(mi)e mod n
解密算法过程如下
收到密文ci后,接收者使用自己的私钥执行解密运算,得到明文mi:mi≡(ci)d mod n
RSA详细的算法设计流程
大素数的产生和测试
Miller-Rabin算法是一种基于概率的素数测试方法,在密码学的素数产生中,由于该算法的速度快、原理简单、易于实现,成为进行素数检测的最佳选择。
Miller-Rabin算法是对费马算法改进,它的操作步骤如下:
计算m,满足n=(2r 2的r次方)m+1;
选择随机数a∈[1,n];
若am mod n=1,或满足aim mod n=n-1,则n通过随机数a的测试;
再取不同a要的值对n进行t=5次测试,如果每次测试结果为n是素数,则以高概率判定n是素数。假设n通过t次测试,则判定结果错误的概率是1/4t;若只通过一次测试,素数判定的错误概率是25%。
流程图如下:
密钥e生成模块
通过上面的的大素数生成模块,可以得到大素数p和大素数q,根据欧拉函数φ(n)=(p-1)(q-1),同时密钥e与φ(n)互质,根据中国剩余定理可以计算密钥e。
过程如下:
密钥d生成模块
通过大素数生成模块得到大素数p和q,密钥e生成模块,根据1=ed mod(p-1)(q-1)。利用中国剩余定理计算e的乘法逆元d。
快速指数算法
得到e后,就可以通过公钥(e,n)进行加密得到密文C。在RSA加密过程中,为了计算ci≡(mi)e mod n,采用快速指数算法。将快速指数算法描述为三元组(M,E,Y),其初始值为(M,E,Y)=(mi,e,1)。重复执行以下操作:
①若E是奇数,则Y=MY mod n,E=E-1;②若E是偶数,则X=XX mod n,E=E/2。最终,当E=0时,则Y=X^E mod n。
RSA加密和解密算法设计
过程如下:
ECC
椭圆曲线加密算法(ECC)是基于椭圆曲线数学的一种非对称密码算法,是建立在基于椭圆曲线的离散对数问题上的密码体制。随着分解大整数方法的进步以及各方面的完善,RSA算法渐渐不能满足现状,ECC算法的需求性逐渐增大。ECC以其明显的“短密钥”优势得到了广泛应用,并逐渐被确定为许多编码方式的数字签名标准。当然,ECC还有许多未解决的问题,不过这种引用了丰富数学理论的算法,也印证了将更多数学有较大可行性理论应用到密码学这一领域中。
首先从数学角度阐释算法加密原理,ECC椭圆曲线加密算法数学基础是利用有限域上椭圆曲线离散对数问题(ECDLP)的计算困难性,所谓椭圆曲线是指由韦尔斯特拉方程。其椭圆曲线方程如下:
y2+a1xy+a2 y=x3+a3x2+a4 x+a5
下面是椭圆曲线方式图示
其中,系数ai定义在某个域上(密码算法中需要把之前连续曲线变为有限域上的点,故ai也定义在有限域中)。曲线上所有点和一个无穷远点构成一个集合连同定义上的加法(eg:a+b≡c(mod p))构成阿贝尔群。由于曲线上每一点都是非奇异点,故可在椭圆曲线上找到两点P、Q,且存在如下关系式:
由此可见,已知m、P求Q较为容易,反之由Q逆向求m、P难度却较大,椭圆曲线密码正是基于该机制来展开设计及应用。
**ECC系列算法secp256k1**
1.简介
secp256k1是区块链项目中应用最多的椭圆曲线算法,源于比特币中的应用,后来的大多数区块链项目如以太坊等都在用。名称中的前三个字母sec代表Standards for Efficient Cryptography(SEC),后面的p256K1指的是参数256位素数域。Secp256k1为基于Fp有限域(又名伽罗瓦域)上的椭圆曲线,由于其特殊构造的特殊性,其优化后的实现比其他曲线性能上可以特高30%,有明显以下两个优点:
1)占用很少的带宽和存储资源,密钥的长度很短。2)让所有的用户都可以使用同样的操作完成域运算。
椭圆曲线图y^2=x^3+7
在平面中的椭圆曲线上的加法在几何上根据线截取曲线的位置来定义。我们不会在这里讨论几何,除了说它归结为一组涉及实数的方程。但我们并没有在实数域上去工作,而是在有限域。有限域p,其中
p=2^256-2^32-977
这里选择p相对接近2^256。它不是小于2^256的最大素数;p和2^256之间有很多素数。其他因素也同样影响着选择p。请注意,我们不是在整数mod p本身工作,而是在一个阿贝尔组中,其加法法则由整数mod p上的椭圆曲线定义。
二.密钥的压缩格式和非压缩格式
接下来,我们在椭圆曲线上选择一个基点g。定义secp256k1的标准说g是0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798以“压缩形式”或
040x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
以“未压缩的形式”。基点是椭圆曲线上特别选择的点,因此它是一对数字mod p,而不是单个数字。
该压缩的形式:只给x,你就应该解决y。在未压缩的形式为您提供了x和y。但是,这些数字是略微编码的。在压缩形式中,字符串以“02”或“03”开头,字符串的其余部分是x的十六进制表示。将满足y的两个值
y²=x³+7 mod p
并且“02”或“03”告诉您选择哪一个。如果压缩形式以02开头,则选择最低有效位为偶数的根。如果压缩形式从03开始,则选择其最低有效位为奇数的根。(两个根将添加到p,而p是奇数,因此其中一个根将是偶数,一个将是奇数。)未压缩形式:未压缩的将始终以04开头。在此之后,按照x和y连接在一起的十六进制表示形式。
无论哪种情况,我们都有x=79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798和y=483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
**ECC系列算法curve25519/ed25519/x25519**
一:几种著名的椭圆曲线的方程和对应的实际应用1.魏尔斯特拉斯曲线和基于魏尔斯特拉斯曲线的若干种椭圆曲线公钥算法
y^2=x^3+ax+b
2.蒙哥马利曲线https://en.wikipedia.org/wiki/Montgomery_curve和基于蒙哥马利曲线的Curve25519密钥协商算法https://en.wikipedia.org/wiki/Curve25519
begin蒙哥马利曲线By^2&=x^3+Ax^2+x其中A,B∈K且B(A^2−4)≠0Curve25519曲线y^2&=x^+486662x^+x,由素数2^-19定义素数域end
3.爱德华曲线https://en.wikipedia.org/wiki/Edwards_curve和基于爱德华曲线的Ed25519数字签名算法https://ed25519.cr.yp.to/index.html
begin爱德华曲线x^2+y^2&=1+dx^y^Ed25519曲线-x^+y^&=1-}x^y^end
二:25519曲线Curve25519(X25519)是进行蒙哥马利曲线(Montgomery Curve)迪菲赫尔曼秘钥交换的椭圆曲线算法。Ed25519是进行爱德华曲线(Edwards Curve)数字签名的椭圆曲线算法。他们与SECG所指定的魏尔斯特拉斯曲线(Weierstrass Curve)在曲线的公式上有所不同,因此他们不兼容。蒙哥马利曲线和爱德华曲线的算法,能做到“Time-constant”,也就是说不论他们进行运算的数值是多少,他们所花的时间是相同的,因此“时间旁路”(Time side channel)攻击就对它们无效。
三:Curve25519介绍和迪菲赫尔曼密钥交换Curve25519是目前最高水平的Diffie-Hellman函数,适用于广泛的场景,由Daniel J.Bernstein教授设计。在密码学中,Curve25519是一个椭圆曲线提供128位安全性,设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,并未被任何已知专利所涵盖。
给定一个用户的32字节密钥,curve25519计算该用户的32字节公钥。给定该用户的32字节密钥和另一个用户的32字节公钥,curve25519计算一个32字节的共享密钥提供给这两个用户使用。然后可以使用这个秘密对两个用户进行身份验证和信息加密。方程为:
素数域p=2的255减去19,也是名字中25519的由来。群秩为2的255次方+27742317777372352535851937790883648493,
Curve25519的构造避免了许多潜在的实现方面陷阱,它不受计时攻击,能接受任何32字节字符串作为有效公钥(实际工程应用中,0除外),并且不需要验证给定点是否属于曲线,或者是否由基点生成。2013年斯诺登事件以后,得到大量关注和使用,目前应用已经非常广泛,包括ssh,tls,OpenSSL,Libsodium等,实际成为NIST P-256椭圆曲线算法的替代品(前者被广泛质疑有后门(back door))
1.迪菲赫尔曼秘钥交换
1.1简介
Diffie–Hellman key exchange,缩写为D-H,是一种安全协议,用于双方在一个不安全的通信网络上建立一个共享的秘钥,有了共享秘钥以后,就可以使用这个密钥加密交互消息。由于通信双方最终使用的密钥相同,所以可以认为该协议目标是创建一个对称密钥(对称密钥和非对称密钥可自行学习)。该协议也称迪菲-赫尔曼密钥协商,名字以发明人的名字命名,符合惯例,无其他特殊意义。
迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础,并且被用来提供传输层安全协议的短暂模式中的前向安全性。
1.2交换流程
First有自己的私钥a,Second有自己的私钥b,a,b均小于p,且私钥绝对保密。
交换过程如下:
1.First用私钥a生成A,过程如下:A=g^a mod p,然后通过信道发送出去。
2.Second用私钥b生成B,过程如下:B=g^b mod p,然后通过信道发出去。
3.Frist收到B后执行B^a mod p=Fkey。
4.Second收到A后执行A^b mod p=Skey。
5.Fkey=Skey(因为整体执行下来Fkey=(g^b)^a mod p,而Skey=(g^a)^b mod p,故相等。)
进而达到共享秘钥的目的,二者通信可通过Fkey这个公共秘钥加密后面的通讯内容。整个过程中因为只有g,p,A,B是公开的,私钥a,b保密的,故基于离散对数运算,敌人很难破解公共秘钥。
1.3安全性
迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,所以有可能会被中间人攻击。一个中间人在信道的中间分别和A,B进行两次迪菲-赫尔曼密钥交换,就能够成功的向A假装B,向B假装A。此时攻击者可以读取任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当A和B共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分。
四:ED25519签名过程Ed25519使用了扭曲爱德华曲线,签名过程和最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结果相同。一般说来随机数是安全措施中重要的一种方法,但是随机数的产生也是安全隐患,著名的索尼公司产品PS3密钥泄露事件,就是随机数产生的问题导致的。如果你对Schnorr,secp256k1,sm2等签名过程比较熟的的话,就容易理解如果在签名过程中出现了这个相同的随机数r,那么私钥将很容易被计算出来,造成泄露。
Ed25519公钥生成算法流程
(1).选择256 bit私钥sk=(sk255,sk253,···,sk1,sk0)
(2)对sk做SHA-512运算,即H(sk)=(h511,h510,···,h1,h0)2;
(3)取H(sk)的低256位,并整理为s=(0,1,h253,h252,···,h3,0,0,0)2;
(4)做标量乘A=sB=(x,y),其中x=(x254,x253,···,x1,x0)2,y=(y254,y253,···,y1,y0)2;
(5)压缩sB结果,得公钥pk=(x0,y254,y253,···,y1,y0)2。
Ed25519签名算法流程
(1)取H(sk)的高256位h=(h511,h510,···,h257,h256)2;
(2)做SHA-512运算,r=H(h||M)mod L;
(3)做标量乘R’=rB=(x,y),其中x=(x254,x253,···,x1,x0)2,y=(y254,y253,···,y1,y0)2;
(4)压缩rB结果,得R=(x0,y254,y253,···,y1,y0)2;
(5)做SHA-512运算,k=H(R||pk||M)mod L;
(6)计算S=(r+k·s)mod L;
(7)返回签名结果(R||S)。
Ed25519验证签名算法流程
(1)解压R为点坐标R’;
(2)解压pk为点坐标A;
(3)做SHA-512运算,k=H(R||pk||M)mod L;
(4)验证SB=R’+kA是否成立,若成立则验签成功。
混合加密-对称加密和非对称加密的实际应用场景
所谓混合加密就是使用在实际的应用中把对称加密和非对称加密结合起来使用。我们都知道非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。所以在实际的应用中,都是对称加密与非对称加密混合使用。取其优势,去其糟粕,达到完美使用的一个目的。
对称加密技术,即专用密钥加密技术或单钥密码技术,加密密钥与解密密钥一致,发送方与接收方用同一组的公私密钥对加密或者解密信息。数据加密的一个关键要求是有相同的密钥才能解密。因为通信双方共享密钥,如果密钥丢失或泄露,那么获取密钥的人就可以加密或者解密数据,所以为保证消息的机密性必须保障密钥的安全。这种算法比较简单且计算量比较小,对网络开放、从而能够效率高地加密。同时存在的缺点,一是通讯双方基于通过非面对面的方式协商一个共同的密钥,因此不能保证协商过程的安全性。二是通讯双方每次进行数据传输时都使用惟一密钥,这使得对称加密技术在开放型的网络中需要使用和生成大量的密钥,对于密钥的管理就成为用户的很大负担。三是对称加密算法只能对数据进行加解密,保证数据的机密性,但无法验证通讯双方的真实身份,不能确定数据的完整性。
非对称密钥加密技术,由公钥和私钥形成一个密钥对,其中公钥向公众公开,私钥归密钥持有人单独保管。通讯双方使用非对称密钥对数据进行加密和解密时,必须使用相互匹配的公钥和私钥。它有两种方式:一种是发送方用接收方的公钥来加密信息,接收方用其私钥解密信息,这样接收方可以收到多个发送方传来的加密数据,且此加密数据只有接收方一个用户可以解读;另一种即发送方利用自身的私钥加密信息,接收方用对方公钥解密信息,这样一个信息有可能被多个接收方解密。非对称密钥加密技术的优点是简化了密钥的发放及管理的过程,支持数字签名等安全认证技术,缺点是加密和解密的计算过程特别复杂,运行数据加密和解密的速度比较慢。