当前位置 博文首页 > 司夏的博客:对称密码和公开密钥密码技术

    司夏的博客:对称密码和公开密钥密码技术

    作者:[db:作者] 时间:2021-07-29 09:48

    对称密码技术

    对称密码体制的加密密钥和解密密钥是相同的其中最负盛名的是曾经广泛使用的DES和在推行的AES。与公开密钥密码技术相比,其最大的优势就是速度快,一般用于对大量数据的加密和解密。

    数据加密标准( Data Encryption Standard,DES)是一种使用密钥加密的块密码,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,密钥长度相对短,并有人怀疑其内含美国国家安全局(NSA的后门,所以在开始时有争议。DES因此受到了强烈的学院派式的审查,但此举也推动了现代块密码及其密码分析技术的发展。

    DES算法的安全性

    DES的56位密钥过短,在现在已经不是一种安全的加密方法了。早在1999年1月,distributed.net与电子前哨基金会合作,只用了22小时15分钟就破解了一个DES密钥。随着计算机的升级换代,运算速度大幅度提高,破解DES密钥所需的时间也将越来越短。2000年10月,在历时接近5年的征集和选拔之后,NIST( National Institute of Standards and Technology,国家标准与技术研究院)选择了一种新的密码,即高级加密标准AES,用于替代DES。2001年2月28日,联邦公报发表了AES标准,从此开始了其标准化进程,并于2001年11月26日成为 FIPS PUB197标准。

    DES算法的原理

    DES是一种典型的块密码种将固定长度的明文通过一系列复杂的操作变成同样长度的密文的算法。对DES而言,块长度为64位。同时,DES使用密钥来自定义变换过程,因此只有持有加密密钥的用户才能解密密文。密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位被用于奇偶校验,并在算法中被丢弃。因此,DES的有效密钥长度为56位。

    RSA公开密钥密码技术

    公开密钥加密( public-key- cryptography)也称为非对称(密钥)加密,该思想最早由 Ralph. Merkle在1974年提出。在1976年, Whitfield Diffie(迪菲)与Martin Hellman(赫尔曼)两位学者在现代密码学的奠基论文New Direction in Cryptography中首次公开提出了公钥密码体制的概念。公钥密码体制中的密钥分为加密密钥与解密密钥,这两个密钥是数学相关的,用加密密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个密钥的秘密性质。公开的密钥称为公钥(PK),不公开的密钥称为私钥(SK)

    常见的公钥加密算法有RSA、EIGamal、背包算法、 Rabin(RSA的特例) Diffie Hellman密钥交换协议中的公钥加密算法、椭圆曲线加密算法( Elliptic Curve Cryptography,ECC)。使用最广泛的是RSA算法(发明者 Rivest、 Shmir和 Adleman姓氏首字母)

    RSA和 EIGamal是可以很好地用于加密和数字签名的公开密钥算法。此类算法要求加密、解密的顺序可以交换,即满足以下公式:
    在这里插入图片描述

    RSA算法是第一个既能用于数据加密也能用于数字签名的算法。RSA算法易于理解和操作,虽然其安全性一直未能得到理论上的证明,但是它经历了各种攻击,至今未被完全攻破,所以,实际上是安全的。对极大整数做因数分解的难度决定了RSA算法的可靠性。

    换言之,对一极大整数做因数分解越困难,RSA算法就越可靠。如果有人找到了一种快速因数分解的算法,那么用RSA加密的信息的可靠性就肯定会极度下降,但找到这样的算法的可能性是非常小的,目前只有短的RSA密钥才可能被暴力方式解破。到2013年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其密钥的长度足够长,用RSA加密的信息实际上是不能被解破的。

    RSA算法描述

    密钥计算方法:

    • 选择两个大素数 p 和 q (典型值为1024位)
    • 计算 n = p x q 和 z = (p-1) x (q-1)
    • 选择一个与 z 互质的数,令其为 d
    • 找到一个 e 使满足 e x d = 1 (modz)
    • 公开密钥为(e,n),私有密钥为(d,n)

    MOD,是一个数学运算符号。 指取模运算符,算法和取余运算(REM)相似 (同号时与取余结果相同,异号时不同)
    例如a mod b = c,表明 a 除以 b 余数为 c。

    加密方法:

    将明文看成比特串,将明文划分成 k 位的块 P 即可,这里 k 是满足
    在这里插入图片描述
    的最大整数。

    对每个数据块P,计算
    在这里插入图片描述
    C即为P的密文。

    解密方法:

    对每个密文块C,计算
    在这里插入图片描述

    P即为明文。

    RSA算法举例

    密钥计算:

    • 取 p = 3,q = 11
    • 有 n = p x q = 33, z = (p-1) x (q-1) = (3-1) x (11-1) = 20
    • 7 和 20 没有公因子,可取 d = 7
    • 解方程 7 x e = 1 (mod20),得到 e = 3
    • 公钥为 (e=3,n=33),私钥为 (d=7,n=33)

    加密运算:

    本例中的 n = 33,由 2 的 k 次方小于 n 得 k = 5,因此将明文划分为5比特的明文块P。

    • 若明文P=4,则密文
      在这里插入图片描述

    解密运算:

    计算
    在这里插入图片描述
    恢复出原文。

    RSA算法的安全性

    假设偷听者乙获得了甲的公钥(e,n)以及丙的加密消息C,但他无法直接获得甲的密钥d。要获得d,最简单的方法是将n分解为p和q,这样他可以得到同余方程
    在这里插入图片描述

    并解出d,然后代入解密公式:
    在这里插入图片描述
    这样就破解了密文C,导出了明文P。但至今为止还没有人找到一个多项式时间代价的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在。至今为止也没有人能够证明对n进行因数分解是唯一的从C导出P的方法,但今天还没有找到比它更简单的方法(至少没有公开的方法)。因此,今天一般认为,只要n足够大,那么黑客就没有办法了。

    目前,假如n的长度小于或等于256位,那么用一台个人计算机在几个小时内就可以分解出它的因子。1999年,由数百台计算机合作分解了一个512位长的n。2009年12月12日,编号为RSA-768(768bits,23 22 digits)数也被成功分解。这一事件威胁了现流行的1024位密钥的安全性,普遍认为用户密钥应尽快升级到2048位或以上。

    RSA算法的速度比起DES和其他对称算法来说,RSA要慢得多。速度慢一直是RSA的缺陷,一般来说只用于少量数据加密。事实上RSA一般用于数字签名和对工作密钥的加密,对数据的加密一般采用速度更快的对称密码算法。

    cs