密码学基础
3、公钥密码体制
在对称密码体制中,加密者使用的密钥和解密者使用的密钥是相同的或者相互容易导出的。这就带来了一些安全和使用上的问题。对称密码体制要求加密者和解密者之间存在一个安全的密钥传输信道,但这个信道往往是不安全的。若要在很多人之间进行保密通信,使用对称密码需要每个人保管所有接收方的密钥,这不但不安全而且也不方便。W.Diffie、M.Hellman于1976年在所发表的《密码学的新方向》一文中,提出了公钥密码思想,可以用陷门单向函数构造公钥密码。在公钥密码中,加密者和解密者使用不同的密钥,即Ke≠Kd, Ke一般称为公钥,可以公开,但加密算法EKe的逆函数不容易求得。当一个函数容易计算但难以进行求逆运算时,称为单向函数。然而在公钥密码中,解密者需要根据Kd确定EKe的逆元,因此,需要单向函数EKe在Kd下存在所谓的陷门,使得可以确定插图的逆元Dkd用于解密。基于这个思想,R.L.Rivest、A.Shamir和L.Adleman于1977年实现了RSA公钥密码。
所谓公钥密码体制就是使用不同的加密密钥和解密密钥,用来加密的公钥与解密的私钥是数学相关的,并且公钥与私钥成对出现。公钥密码体制的特点如下:
- 发送者用加密密钥e对明文M加密后,接收者用解密密钥d解密可以恢复出明文,即De(Ed(M))=M。此外,加密与解密的运算可以对调,即Ee(Dd(M))=M。
- 加密密钥e是公开的,但不能用来解密。
- 在计算上可以容易地得到成对的e和d。
- 已知加密密钥e,求解私钥d在计算上是不可行的,不能通过公钥计算出私钥,即从e到d是"计算上不可行的"。
- 加密和解密算法都是公开的。
下图给出了公钥密码体制的基本框架。

公钥密码算法的优点是可以适应网络的开放性要求,密钥管理较为简单,尤其可方便地实现数字签名和验证。目前公钥密码算法有很多种,常见的有RSA、ElGamal、D-H、ECC、SM2等,但RSA是其中最著名的一种,不但用于加密也能用于数字签名,还是一个比较容易理解和实现的公钥密码算法。
3.1、RSA算法
RSA算法是第一个较为完善的公钥密码体制,也是目前最有影响力的公钥密码算法,已被ISO推荐为公钥数据加密标准。从1977年提出到现在,其间它经历了各种攻击的考验,逐渐被人们接受,已成为目前应用最为广泛的公钥密码方案之一。
3.1.1、RSA算法描述
RSA密码是基于大素数因子分解困难问题和欧拉定理的算法,主要归结为如何选取公钥和私钥。
1)密钥的生成
生成RSA密钥的过程如下:
- (1)选择两个保密的大素数p和q。p和q的值越大,RSA越难以破译。RSA实验室推荐,p和q的乘积为1024bit的二进制数或者390bit的十进制数。
- (2)计算:n=p×q,φ(n)=(p-1)×(q-1),其中,p和q要有256bit长,φ(n)是n的欧拉函数值。
- (3)随机选择一个整数e,满足1<e<φ(n),且gcd(φ(n),e)=1,即使得e和(p-1)×(q-1)互为素数。
- (4)用欧几里得(Euclid)扩展算法计算d,使得:d≡e-1modφ(n),即d是e在模φ(n)下的逆元,因e与φ(n)互为素数,由模运算可知,它的乘法逆元一定存在。
- (5)以PK={e, n}作为公开密钥,即加密密钥;以SK={d, n}作为秘密密钥,即解密密钥。注意,原来的素数p和q此时不再需要,应该被丢弃,但绝对不可以泄露。
2)加密算法
利用RSA算法加密时,首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2n。然后对每个明文分组m作如下加密运算,得到密文消息c。

即密文c为m的e次方除以n的余数。注意:m必须比n小,一个更大的消息可以简单地将其拆成若干个512bit块。
3)解密算法
利用RSA算法解密消息时,取每一个密文分组ci并进行如下计算:

解密运算的结果是得到原来的明文m,即明文m为c的d次方除以n的余数。
3.1.2、RSA算法证明
验证Ee(m)与Dd(c)是逆运算,以证明RSA算法中解密过程的正确性。由de≡1(modφ(n))可得,存在整数k≥1,使de=kφ(n)+1,对于明文m∈M,则有:

因此,解密是加密的逆运算。
3.1.3、RSA算法加解密操作示例
为简单起见,选取比较小的p和q的值,假设p=7, q=17,那么:

从0, 96中选择一个与96互素的正整数e;取e=5,满足1<e<φ(n),且gcd(φ(n),e)=1。确定满足d×e=1mod 96且小于96的d,因为77×5=385=4×96+1,所以d为77,因此公钥为<e, n >=<5, 119>,私钥为<d, n>=<77, 119>。
在这个例子中,一旦知道了n,可以很容易算出p和q,然后由e算出d。如果n是两个256bit长的数的乘积,那么要在计算上发现p和q是不可行的。p和q不能泄露,一旦泄露,则很容易从公开密钥导出秘密密钥。
作为一个简单的明文加密操作示例,假设要加密一个消息值m=19,则由加密过程得到密文为:

所以,66就是要发送的密文。接收者接收到密文后,可以按如下步骤解密得到明文:

注意,明文消息m所表示的十进制值不能大于模数n的值,否则将导致解密有误。
3.1.4、RSA算法的安全性
RSA公钥密码是一种基于大整数因子分解难题的公开密钥密码,RSA密码的参数主要为p、q、n、φ(n)、e、d。由于n=p×q、φ(n)=(p-1)×(q-1)、e×d=1 mod φ(n),只有作为公钥的参数n和e是可以公开的,其他任何一个参数泄露,都会导致私钥d泄露,带来安全威胁。
RSA的安全性完全依赖于分解一个大整数因子分解的难解性。如果RSA的模数n能够被成功分解为p×q,则可获得φ(n)=(p-1)×(q-1),从而就能够确定e模φ(n)的乘法逆元d,即d≡e-1mod φ(n),RSA密钥可被破译。可见,随着人类计算能力的不断提高,原来被认为不可能被分解的大整数是有可能被成功分解的。例如,RSA-129(即n为129位十进制数,大约428bit)已在互联网上通过分布式计算历时8个月于1994年4月被成功分解;RSA-130已于1996年4月被成功分解;RSA-140已于1999年2月被成功分解;RSA-155(512bit)已于1999年8月被成功分解,得到了两个78位(十进制)的素数。另外,除了人类计算能力的提高,还有来自分解算法的不断改进也有可能成功分解大整数。目前已有的一些整数分解方法,包括Pollard法、二次筛选法、随机平方法等,成功实现了对RSA-129的分解;一种称为推广的数域筛选法实现了RSA-130、RSA-140、RSA-155的成功分解;将来可能还有更好的分解算法。因此,在使用RSA算法时对其密钥的选取要特别注意其大小。估计在未来一段比较长的时间内,密钥长度介于1024~2048bit的RSA是安全的。
R.L.Rivest、A.Shamir和L.Adleman用已知的最好算法估计了分解n的时间与n的位数关系。用运算速度为1×106次/秒的计算机分解512bit的n,计算机分解操作数是1.3×1039,分解时间为4.2×1025年。当然,分解一个大数的速度取决于计算机处理器速度和所使用的分解算法。到目前为止,其他密码攻击方法也未能实质性地破译RSA。因此,人们认为RSA在取较大模长时仍是安全的。
RSA的优点是不需要密钥分配,存在的缺点主要是:产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密;分组长度太长,为保证安全性,n至少也要600bit,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级,且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
3.2、ElGamal密码算法
ElGamal公钥密码体制是由塔希尔·盖莫尔(TaherElGamal)于1985年提出的一种基于离散对数的公开密钥密码体制。该密码体制是基于Diffie-Hellman密钥交换的非对称加密算法,既能用于数据加密也能用于数字签名,是一个安全性良好的公钥密码算法。
3.2.1、密钥的产生方法
随机选择一个大素数p,获取素数p的一个本原根a,其中p和a是公开的,并且可由一组用户共享。用户A生成的密钥对如下:
生成一个随机数x作为其秘密的解密密钥,使得1≤x≤p- 1,计算y≡axmod p,则公钥为(y, a, p),私钥为x。
3.2.2、加密算法
如果用户A要向用户B发送消息,则利用A的公钥(y, a,p)对消息进行加密,过程如下:
将A要发送的明文消息表示为一个整数m,其中1≤m≤p-1,以分组密码序列的方式发送消息,其中每个分组的长度不小于整数p。
- 秘密随机选择一个随机数k, 1≤k≤p-1。
- 计算一次密钥U≡yk modp。
- 生成密文对(c1, c2),其中c1≡ak modp, c2≡(U×m)mod p。
由于密文由明文和所选择的随机数k来决定,因而是非确定性加密,一般称之为随机化加密。对同一明文,由于不同时刻的随机数k不同而得到不同的密文,这样做的代价是使数据长度扩展了一倍,即密文长度是明文的两倍。
3.2.3、解密算法
用户B收到密文c=(c1, c2)后,通过计算插图恢复密钥,接着通过计算恢复明文:m≡(c2×U-1)mod p。

3.2.4、ElGamal密码算法应用示例
例如,假设p=2579, a=2, x=765,计算出公开密钥y≡axmod p=2765 mod 2579=949。取明文m=1299,随机数k=853,可计算得出:

得到密文:c=(c1, c2)=(435, 2396)。
解密时依据c=(c1, c2)计算明文消息:m=c2×(U)-1mod p=c2×(c1x)-1mod p=(c2×c1p-1-x)mod p=2396×4352579-1-765mod2579=2396×4351813mod 2579=1299,从而恢复出明文。
3.2.5、ElGamal算法的安全性
ElGamal算法的安全性建立在有限域上求离散对数问题的难解性之上。到目前为止,还没有找到一个有效的多项式时间算法来计算有限域上的离散对数。通常只要素数p选得足够大,有限域上的离散对数问题就被认为是难解的。为了安全,一般要求在应用ElGamal密码算法时,素数p按十进制数表示,至少应为150bit的数字,并且p-1至少 应该有一个大的素数因子。同时,加密和签名所使用的k必须是一次性的。如果k不是一次性的,时间长了就可能被攻击者获得。
3.3、椭圆曲线密码与SM2
椭圆曲线密码(Elliptic Curves Cryptography, ECC)于1985年由华盛顿大学的Neal Koblitz和IBM的Victor Miller分别独立提出,是一种公钥密码体制。与RSA算法不同,它可以选择不同有限域上的不同椭圆曲线建立密码系统。但在当时,认为ECC的概念仅是数学范畴的,实际实现是不现实的。自1985年以后,ECC开始受到全世界密码学家、数学家和计算机科学家的密切关注。一方面,由于没有发现ECC明显的漏洞,使人们充分相信了它的安全性;另一方面,在提升ECC算法实现效率上取得了长足的进步。至今ECC不仅可实现,而且成为已知效率最高的公钥密码算法之一。
3.3.1、ECC算法的理论基础
所谓椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程所确定的平面曲线。它并非真的椭圆曲线,只是因为其方程形式类似求解椭圆形周长的公式而得名。一般说来,椭圆曲线是如下形式的曲线方程:

其中,a、b、c、d、e为满足条件的实数,x和y在实数集上取值。定义一个称为无穷远点的元素,记为O,也称为理想点,且有实数域、有限域上的椭圆曲线之分。在密码学中,大多数采用有限域上的非奇异椭圆曲线,其方程形式如下:

其中,a、b为有限GF(p)上的元素,p为大素数。对于给定的a、b以及x的每个取值,画出y的正值和负值,这样每一条曲线都关于y=0对称。可见,建立基于椭圆曲线的密码体制,需要求解大合数分解或离散对数等数学难题。
椭圆曲线密码算法使用的是变元和系数均为有限域中元素的椭圆曲线。密码中所使用的两类椭圆曲线是定义在有限域Zp上的素曲线(Prime Curves)和在GF(2m)上构造的二元曲线。即椭圆曲线密码算法中用到的椭圆曲线都是定义在有限域上的,最终方程形式如下:

首先定义椭圆曲线加法运算规则:若椭圆曲线上的3个点在同一条直线上,则其和为0。设两点P和Q,则在方程kP=Q中,已知k和点P求点Q比较容易,反之已知点Q和点P求k是比较困难的。因此,利用这个困难问题设计了椭圆曲线密码算法,实现了公钥密码体制在效率上的重大突破。
3.3.2、ECC算法描述
依据椭圆曲线难解问题,可以找到一条椭圆曲线E,将明文编码后嵌入E的解点中,再对E进行加密,加密方式可以是已熟知的算法。因此,根据加密方式的不同,椭圆曲线密码分为ElGamal型、RSA型和Diffie-Hellman型。以最常用的ElGamal型为例,ECC算法主要包括参数选择(密钥产生)、加密和解密三个过程。
1)密钥产生
- 选择一条椭圆曲线E: y2=(x3+ax+b)mod p,构造椭圆曲线群Ep(a, b)。
- 在Ep(a, b)中挑选生成元G, G应使得满足nG=0的最小的n是一个大素数。
- 接收方用户Bob随机选择一个整数kB,满足1≤kB≤n-1, kB作为自己的私钥,并计算产生Bob的公钥PB=kBG。PB、G、Ep(a, b)作为公开参数组。
2)加密算法
- 任意用户Alice若向用户Bob发送明文消息m, Alice需先将m编码为Ep(a, b)中的元素Pm,即椭圆曲线上的一个点(x, y)。将明文m编码为点Pm的方法有多种。
- 发送方Alice随机选择一个正整数kA,满足1≤kA≤n-1。kA相当于Alice的私钥,计算c1=kAG。
- Alice根据接收方Bob的公钥PB,计算c2=Pm+kAPB。
- Alice将c1与c2组成一个点对c=(c1, c2)(即密文)传送给接收方Bob。
3)解密算法
接收方Bob收到密文c=(c1, c2)后,若要对密文解密,则要用密文中的第2个点c2减去Bob的私钥与第1个点c1之积:

注意,此处的kAG和kAPB均为椭圆曲线中的点的标量乘法。接下来,对Pm解码恢复明文消息m。
3.3.3、ECC算法保密通信示例
假若,发送方用户Alice需向接收方Bob保密传递明文消息m,他们利用椭圆曲线密码算法进行保密通信的过程如下。
- 选择一条椭圆曲线E: y2≡(x3+ax+b)mod p,构造椭圆曲线群Ep(a, b)。例如,y2≡(x3+4x+20)mod 29,则Ep(a, b)为E29(4, 20)。
- 在Ep(a, b)中挑选一个生成元G作为基点,G应使得满足nG=0的最小n是一个大素数。例如,挑选基点G(13, 23),基点G的阶数n=37。
- 用户Bob随机选择一个整数kB,满足1≤kB≤n-1。例如选取kB=25作为自己的私钥,并计算产生Bob的公钥:PB=kBG=25G=25×(13, 23)=(14, 6)。PB、G、Ep(a, b)作为公开参数组。
- 用户Bob将Ep(a, b)=E29(4, 20)、PB=(14,6)、G(13, 23)传给Alice。
- 用户Alice收到Bob的信息后,将待传输的明文消息m=3编码为Ep(a, b)=E29(4, 20)中的元素Pm,例如椭圆曲线上的一个点Pm(x, y)=Pm(3, 28)。
- Alice随机选择一个正整数kA,满足1≤kA≤n-1,例如kA=6, n为G的阶数。kA相当于Alice的私钥,计算得到:c1=kAG=6×(13, 23)=(5, 7)。
- Alice根据接收方Bob的公钥PB,计算得到:c2=Pm+kAPB=(3, 28)+6×(14, 6)=(3,28)+(27, 27)=(6, 12)。
- Alice将c1=(5, 7)、c2=(6, 12)组成一个点对,即密文c=(c1, c2)={(5, 7),(6, 12)},发送给接收方Bob。
- 接收方Bob收到发送方Alice的密文c=(c1, c2)后,若要对密文解密,则要用密文中的第2个点c2减去Bob的私钥kB与第1个点c1之积:

接下来,对Pm解码即可恢复明文消息m。例如:

3.3.4、ECC算法的安全性
ECC算法的安全性建立在椭圆曲线的离散对数难解问题之上。利用这种椭圆曲线密码算法时,首先必须把要发送的明文消息m编码成椭圆曲线Ep(a, b)的子群G中的元素Pm(将消息m编码为点Pm的方法尽管有多种,但都有一定的难度)。发送方Alice通过将kAPB与Pm相加来伪装明文消息m,然后对密文c=(c1, c2)进行解密。因为只有Alice自己知道kA,所以即便PB是接收方的公钥,除了发送方Alice之外,任何人均不能去掉伪装kAPB。攻击者要想从c=(c1, c2)中计算出Pm,就必须知道kA;而要从Pm和kAG中计算出kA,将面临求解椭圆曲线上的离散对数问题,但这被认为是非常困难的。
椭圆曲线密码(ECC)的优势在于密钥小,算法实施方便,计算速度快。ECC与其他几种公钥密码体制相比,其抗攻击性具有绝对的优势。例如160位ECC与1024位RSA、DSA具有相同的安全强度,210位ECC则与2048位RSA、DSA具有相同的安全强度,这就意味着带宽要求更低,所占的存储空间更小。这些优点在一些对于带宽、处理器能力、能量或存储有限制的应用中显得尤为重要,非常适用于无线网络环境,在比特币、区块链上有着广泛的应用。
3.3.5、SM2密码算法
近年来,人们对ECC的认识已经不再处于研究阶段,开始逐步进入实际应用,如国家密码管理局2010年12月颁布的SM2密码算法就是基于ECC算法实现的。
SM2密码算法属于非对称密钥算法,使用公钥进行加密,私钥进行解密,已知公钥求私钥在计算上不可行。发送者用接收者的公钥将消息加密成密文,接收者用自己的私钥对收到的密文进行解密并还原成原始明文消息。SM2椭圆曲线公钥密码算法总体描述如下。
1)密钥生成
随机选择整数k,满足0≤k≤n-1,计算Y=k×G。算法的公钥是<G, Y>,私钥是<k>。
2)加密算法
设需要加密的明文消息m为任意有限长度的比特串,len为比特串的长度。作为加密者执行如下加密运算步骤。
- 随机选取k,满足0≤k≤n-1,计算密文c1=kG=(x1,y1),kY=(x2, y2)。
- 计算t=KDF(x2‖y2, len),此处KDF()是输出长度为len的密钥派生函数,作用是从一个共享密钥比特串中产生一个或多个会话密钥或进一步加密所需的密钥数据。
- 得到最终密文为:c=c1‖c2‖c3。
3)解密算法
对密文c=c1‖c2‖c3进行解密时,执行如下步骤:
- 从c中取出比特串c1,将c1的数据类型转换为椭圆曲线上的点,验证c1是否满足椭圆曲线方程,若不满足,则报错并退出。
- 计算kc1=(x2, y2),将x2、y2的数据类型转换为比特串。
- 计算t=KDF(x2‖y2, len),若t为全0比特串,则报错并退出。
- 从c中取出比特串c2,计算m=c2⊕t, u=Hash(x2‖m‖y2);从c中取出比特串c3,若u=c3,则m就是解密所得明文。
SM2算法相比其他公钥密码算法如RSA而言,使用更短的密钥串就能实现比较牢固的加密强度,同时由于其良好的数学设计,加密速度也比RSA算法快。一般认为,160bit的椭圆曲线密码相当于1024bit的RSA算法的安全性。我国第二代居民身份证使用的是256bit的椭圆曲线密码。
4、密码分析与选用
密码算法已经从最初仅能够提供机密性发展到提供机密性、完整性、真实性和不可否认性等安全服务。目前,有很多可供选用的密码算法,大体上可分为对称密码算法和公钥密码算法(也称为非对称密码算法)两大类,其安全性也各自有所不同。针对网络安全实际需求及应用场景情况,恰当设计、选用安全性较高的某种密码算法是十分关键的。
4.1、密码分析方法
密码分析的主要目的是,在不知道密钥的情况下恢复出明文。成功的密码分析能够恢复出密文所对应的明文或加密所使用的密钥,并且通过密码分析也可以发现密码系统的弱点,为改进密码算法提供依据。因此,可通过密码分析来评判密码算法的安全性。在密码学中,"分析"和"攻击"含义相同,因此密码分析也称为密码攻击。根据分析者所具备的条件,通常将密码分析分为如下4种类型。
4.1.1、唯密文攻击
对于唯密文攻击(Ciphertext only Attack)形式的密码分析,分析者只有待破译的一个或多个用同一个密钥加密的密文,它们都是用同一加密算法、同一密钥加密的。密码分析的任务是从这些密文中尽可能多地恢复出明文,或者推导出密钥,即已知c1=E(k, m1),c2=E(k,m2),...,ci=E(k, mi),求m1, m2,...,mi或k。其中,c表示密文,m表示明文,E表示加密算法,k表示密钥。下文符号标识意义相同,不再注释。
唯密文攻击是最常见的一种密码分析方法,也是难度最高的一种。
4.1.2、已知明文攻击
在已知明文攻击(Known Plaintext Attack)中,密码分析者不仅有待破译的密文,而且还有一些明文以及用同一密钥加密的对应明文。其任务是推导出密钥,或一个能够解密用该密钥加密的任何新消息的算法,即已知m1, c1=E(k, m1);m2, c2=E(k, m2);...;mi, ci=E(k,mi),求k或一个能由ci+1=E(k, mi+1)推出mi+1的算法。
在实际应用中,获得某些密文所对应的明文是可能的。例如,电子邮件信头的格式总是固定的,如果加密电子邮件,必然有一段密文对应于信头。另外,电子金融消息往往有标准化的文件头或者标识等。拥有这些知识,密码分析者就可以从转换明文的方法推导出密文。
4.1.3、选择明文攻击
选择明文攻击(Chosen Plaintext Attack)的密码分析者除了知道加密算法外,还可以通过选择对攻击有利的特定明文及其所对应的密文,求解密钥或从截获的密文中求解相应明文。例如,在公钥密码体制中,攻击者可以利用公钥加密任意选定的明文。在这种条件下,密码分析的任务是推导出用于加密这些明文消息所用的密钥,或一个能将加密的新消息进行解密的算法,即已知m1, c1=E(k,m1);m2, c2=E(k, m2);...;mi, ci=E(k, mi),其中,m1, m2,...,mi由破译者选择,求k或一个能由ci+1=E(k, mi+1)推出mi+1的解密算法D,使mi+1=D(k,ci+1)。
选择明文攻击是比较常见的一种密码分析方法。例如,攻击者截获了有价值的密文,并获取了加密使用设备,向设备输入任意明文可以得到对应的密文,以此为基础,密码分析者尝试对有价值的密文进行破解。
4.1.4、选择密文攻击
与选择明文攻击相对应,选择密文攻击(Chosen Ciphertext Attack)除了已知加密算法外,还包括他自己选定的密文和对应的、已解密的原文,即知道选择的密文和对应的明文。例如,破译者可以访问一台该密码系统的自动解密装置,产生任何密文对应的明文。密码分析者的主要目的是推导出密钥,即已知c1, m1=D(k, c1);c2, m2=D(k, c2);...;ci, mi=D(k, ci),其中,c1, c2,..., ci由破译者选择,D表示解密算法,求k。
基于公钥密码系统的数字签名容易受到这类攻击。选择密文攻击方法在密码分析技术中很少用到。
从古至今,密码分析的目的都相同,即破译密码,但实际使用的方法和技巧却随着密码学变得越来越复杂而日新月异。从密码分析的途径来看,在密码分析过程中经常使用穷举攻击法、数学分析法等破译方法。所谓穷举攻击法是指对截获的密文依次用各种可能的密钥解密,直到有意义的明文出现,或者在密钥不变的情况下,对所有可能的明文进行加密直到得到与截获密文一致为止。这个过程称为穷举搜索。数学分析是指密码分析者针对加解密算法的数学基础和某些密码学特性,通过数学求解的方法来破译密码。
4.2、密码算法的比较
4.2.1、分组密码与序列密码的对比
分组密码每次只能处理一个固定长度的明文,不足还需要补全,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点,其缺点是:加解密处理速度慢、存在错误传播。
序列密码是一个随时间变化的加密变换,具有转换速度快、低误码传播的优点,硬件实现电路更简单;缺点是:低扩散、插入及修改的不敏感性。序列密码涉及大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。
4.2.2、ECC与RSA的对比
与RSA相比,ECC在许多方面都有着绝对的优势,主要体现在以下几个方面:
- ECC抗攻击性强,相同的密钥长度,其抗攻击性要强很多倍。
- 计算量小,处理速度快,ECC总的速度比RSA、DSA要快许多。
- ECC存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存储空间要小许多,这对于加密算法在IC卡上的应用具有特别重要的意义。
- ECC带宽要求低。当对长消息进行加解密时,两类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低,使得ECC在无线网络领域具有广泛的应用前景。
4.2.3、对称与公钥密码算法比较
就对称、公钥密码算法两种加密体制的工作原理而言,主要有以下几方面的不同:
- 在管理方面:公钥密码算法只需要较少的资源就可以实现,在密钥的分配上,两者之间相差一个指数级别(一个是n,一个是n2)。所以对称密码算法不适应广域网的使用,而且更重要的一点是它不支持数字签名。
- 在安全方面:由于公钥密码算法基于数学难解问题,在破解上几乎不可能。对于对称密码算法,很多算法虽说从理论来说是不可能破解的,但从计算机的计算力发展的角度来看,公钥密码体制更具有优越性。
- 从速度上来看:很多对称密码算法的软件实现速度已经达到了每秒数兆或数十兆比特,是公钥密码算法的100倍,如果用硬件来实现的话这个比值将扩大到1000倍。
4.3、密码算法的选用
近现代密码学认为,一种密码体制仅当它能够经得起已知明文攻击时才是可取的。从应用场景方面考虑,通常可以按照如下方法选用密码算法。
- 用于数据加解密保护:运算速度快的对称加密算法一般有DES、IDEA、RC4、AES等。由于数据生命周期一般比较长久,通常应选用AES-128进行数据保护。
- 用于密钥交换、证书认证:交换对称密码算法的密钥要求保密程度更高的密码算法,一般选用公钥密码算法,例如RSA算法等。
- 用于保证消息内容不被篡改:可选择摘要的哈希函数,例如MD5和SHA等。
- 用于数字签名:一般选用RSA算法对消息摘要进行签名。
基于其他方面,可从如下几个方面考虑选用密码算法。
由于公钥密码算法的运行速度比对称密码算法的速度慢很多,当需要加密大量数据时,建议采用对称密码算法,以提高加解密速度。
对称密码算法不能实现数字签名,因此数字签名只能选用公钥密码算法。
由于对称密码算法的密钥管理是一个复杂的过程,密钥的管理直接决定着它的安全性,因此当数据量较小时,可以考虑采用公钥密码算法。
在实际操作过程中,通常是采用公钥密码算法管理对称算法的密钥,然后用对称加密算法加密数据。这样可集成两类加密算法的优点,既实现了快速加密,又可安全方便地管理密钥。
目前,我国在强力推进信息系统国产密码算法的应用,旨在建立起安全自主可控的国产可信计算体系,从根本上摆脱长期以来对国外密码技术的过度依赖。由国家密码管理局认定和发布的一系列有自主产权的国产密码算法标准,包括SM1、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)等密码算法,不仅可以替代国际常用密码算法,还在一些性能方面优于国际密码算法。下表为常用国密算法与国际密码算法的对比。

- SM4算法。SM4密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据信息的机密性。保证一个对称密码算法安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度和分组长度(128bit),因此在安全性上高于3DES算法。
- SM2算法。SM2密码算法是我国自主设计的椭圆曲线公钥密码算法,包括SM2-1椭圆曲线数字签名算法、SM2-2椭圆曲线密钥交换协议和SM2-3椭圆曲线公钥加密算法,可分别用于实现数字签名、密钥交换和双密钥数据加解密等功能。与RSA算法不同的是,SM2算法依托椭圆曲线离散对数难题,在同等安全级别下,256bit的SM2密码强度已经比2048bit的RSA密码强度要高得多。
- SM3算法。SM3算法是我国自主设计的密码哈希算法,适用于商用密码应用中的数字签名和消息认证码的生成、验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证哈希算法的安全性,其哈希值的长度不应太短。MD5算法的哈希值为128bit, SHA-1算法的哈希值为160bit,输出长度太短,影响其安全性。SM3算法的哈希值输出长度为256bit,因此SM3算法的安全性高于MD5算法和SHA-1算法。
2021年3月,国家市场监督管理总局、国家标准化管理委员会正式发布《信息安全技术 信息系统密码应用基本要求》GB/T 39786-2021。该标准明确了信息系统密码应用技术框架,规定了信息系统第一级到第四级密码应用的基本要求;提出了物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等密码应用技术要求,有效保障信息系统的实体身份真实性、重要数据的机密性和完整性、操作行为的不可否认性;制定了管理制度、人员管理、建设运行、应急处置等密码应用管理要求。这是继《中华人民共和国密码法》颁布实施之后,开展商用密码应用安全性工作的又一重要纲领性文件。