一 . 密码学简介
据记载,公元前 400 年,古希腊人发明了置换密码。 1881 年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。
随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在 1997 年,美国国家标准局公布实施了“美国数据加密标准( DES )”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有 DES 、 RSA 、 SHA 等。随着对加密强度需求的不断提高,近期又出现了 AES 、 ECC 等。
使用密码学可以达到以下目的:
保密性:防止用户的标识或数据被读取。
数据完整性:防止数据被更改。
身份验证:确保数据发自特定的一方。
二 . 加密算法介绍
根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。
对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。
非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。
对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:
DES ( Data Encryption Standard ):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES ( Triple DES ):是基于 DES ,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES ( Advanced Encryption Standard ):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
2000 年 10 月, NIST (美国国家标准和技术协会)宣布通过从 15 种侯选算法中选出的一项新的密匙加密标准。 Rijndael 被选中成为将来的 AES 。 Rijndael 是在 1999 年下半年,由研究员 Joan Daemen 和 Vincent Rijmen 创建的。 AES 正日益成为加密各种形式的电子数据的实际标准。
美国标准与技术研究院 (NIST) 于 2002 年 5 月 26 日制定了新的高级加密标准 (AES) 规范。
算法原理
AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。 AES 使用几种不同的方法来执行排列和置换运算。
AES 是一个迭代的、对称密钥分组的密码,它可以使用 128 、 192 和 256 位密钥,并且用 128 位( 16 字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据
AES 与 3DES 的比较
算法名称 | 算法类型 | 密钥长度 | 速度 | 解密时间(建设机器每秒尝试 255 个密钥) | 资源消耗 |
AES | 对称 block 密码 | 128 、 192 、 256 位 | 高 | 1490000 亿年 | 低 |
3DES | 对称 feistel 密码 | 112 位或 168 位 | 低 | 46 亿年 | 中 |
非对称算法
常见的非对称加密算法如下:
RSA :由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA ( Digital Signature Algorithm ):数字签名算法,是一种标准的 DSS (数字签名标准);
ECC ( Elliptic Curves Cryptography ):椭圆曲线密码编码学。
在 1976 年,由于对称加密算法已经不能满足需要, Diffie 和 Hellman 发表了一篇叫《密码学新动向》的文章,介绍了公匙加密的概念,由 Rivet 、 Shamir 、 Adelman 提出了 RSA 算法。
随着分解大整数方法的进步及完善、计算机速度的提高以及计算机网络的发展,为了保障数据的安全, RSA 的密钥需要不断增加,但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难以忍受,这对使用 RSA 的应用带来了很重的负担,因此需要一种新的算法来代替 RSA 。
1985 年 N.Koblitz 和 Miller 提出将椭圆曲线用于密码算法,根据是有限域上的椭圆曲线上的点群中的离散对数问题 ECDLP 。 ECDLP 是比因子分解问题更难的问题,它是指数级的难度。
算法原理——椭圆曲线上的难题
椭圆曲线上离散对数问题 ECDLP 定义如下:给定素数 p 和椭圆曲线 E ,对 Q = kP ,在已知 P , Q 的情况下求出小于 p 的正整数 k 。可以证明由 k 和 P 计算 Q 比较容易,而由 Q 和 P 计算 k 则比较困难。
将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,将椭圆曲线中的乘法运算与离散对数中的模幂运算相对应,我们就可以建立基于椭圆曲线的对应的密码体制。
例如,对应 Diffie-Hellman 公钥系统,我们可以通过如下方式在椭圆曲线上予以实现:在 E 上选取生成元 P ,要求由 P 产生的群元素足够多,通信双方 A 和 B 分别选取 a 和 b , a 和 b 予以保密,但将 aP 和 bP 公开, A 和 B 间通信用的密钥为 abP ,这是第三者无法得知的。
对应 ELGamal 密码系统可以采用如下的方式在椭圆曲线上予以实现:
将明文 m 嵌入到 E 上 Pm 点,选一点 B ∈ E ,每一用户都选一整数 a , 0 < a < N , N 为阶数已知, a 保密, aB 公开。欲向 A 送 m ,可送去下面一对数偶:[ kB , Pm+k(aAB) ], k 是随机产生的整数。 A 可以从 kB 求得 k(aAB) 。通过: Pm+k(aAB)- k(aAB)=Pm 恢复 Pm 。同样对应 DSA ,考虑如下等式:
K=kG [ 其中 K , G 为 Ep(a,b) 上的点, k 为小于 n ( n 是点 G 的阶)的整数 ]
不难发现,给定 k 和 G ,根据加法法则,计算 K 很容易;但给定 K 和 G ,求 k 就相对困难了。
这就是椭圆曲线加密算法采用的难题。我们把点 G 称为基点( base point ), k ( k<n , n 为基点 G 的阶)称为私有密钥( privte key ), K 称为公开密钥( public key) 。
ECC 与 RSA 的比较
ECC 和 RSA 相比,在许多方面都有对绝对的优势,主要体现在以下方面:
Ø 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
Ø 计算量小,处理速度快。 ECC 总的速度比 RSA 、 DSA 要快得多。
Ø 存储空间占用小。 ECC 的密钥尺寸和系统参数与 RSA 、 DSA 相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在 IC 卡上的应用具有特别重要的意义。
Ø 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时 ECC 带宽要求却低得多。带宽要求低使 ECC 在无线网络领域具有广泛的应用前景。
ECC 的这些特点使它必将取代 RSA ,成为通用的公钥加密算法。比如 SET 协议的制定者已把它作为下一代 SET 协议中缺省的公钥密码算法。
下面两张表示是 RSA 和 ECC 的安全性和速度的比较:
攻破时间 (MIPS 年 ) | RSA/DSA ( 密钥长度 ) | ECC 密钥长度 | RSA/ECC 密钥长度比 |
104 | 512 | 106 | 5 : 1 |
108 | 768 | 132 | 6 : 1 |
1011 | 1024 | 160 | 7 : 1 |
1020 | 2048 | 210 | 10 : 1 |
1078 | 21000 | 600 | 35 : 1 |
RSA 和 ECC 安全模长得比较
功能 | Security Builder 1.2 | BSAFE 3.0 |
163 位 ECC(ms) | 1,023 位 RSA(ms) | |
密钥对生成 | 3.8 | 4,708.3 |
签名 | 2.1(ECNRA) | 228.4 |
3.0(ECDSA) | ||
认证 | 9.9(ECNRA) | 12.7 |
10.7(ECDSA) | ||
Diffie—Hellman 密钥交换 | 7.3 | 1,654.0 |
RSA 和 ECC 速度比较
散 列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任 何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特 性的散列结果就可以用于验证信息是否被修改。
单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
Ø MD5 ( Message Digest Algorithm 5 ):是 RSA 数据安全公司开发的一种单向散列算法。
Ø SHA ( Secure Hash Algorithm ):可以对任意长度的数据运算生成一个 160 位的数值;
在 1993 年,安全散列算法( SHA )由美国国家标准和技术协会 (NIST) 提出,并作为联邦信息处理标准( FIPS PUB 180 )公布; 1995 年又发布了一个修订版 FIPS PUB 180-1 ,通常称之为 SHA-1 。 SHA-1 是基于 MD4 算法的,并且它的设计在很大程度上是模仿 MD4 的。现在已成为公认的最安全的散列算法之一,并被广泛使用。
算法原理
SHA-1 是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。
单 向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从 而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。
该算法输入报文的最大长度不超过 264 位,产生的输出是一个 160 位的报文摘要。输入是按 512 位的分组进行处理的。 SHA-1 是不可逆的、防冲突,并具有良好的雪崩效应。
通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算( Hash )转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。
MAC ( 信息认证代码 ) 就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证 MAC 码的合法性。 MAC 的产生参见下图。
输入信息 |
密码 |
散列函数 |
信息认证代码 |
SHA-1 与 MD5 的比较
因为二者均由 MD4 导出, SHA-1 和 MD5 彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
Ø 对强行供给的安全性:最显著和最重要的区别是 SHA-1 摘要比 MD5 摘要长 32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对 MD5 是 2128 数量级的操作,而对 SHA-1 则是 2160 数量级的操作。这样, SHA-1 对强行攻击有更大的强度。
Ø 对密码分析的安全性:由于 MD5 的设计,易受密码分析的攻击, SHA-1 显得不易受这样的攻击。
Ø 速度:在相同的硬件上, SHA-1 的运行速度比 MD5 慢。
以上综述了两种加密方法的原理,总体来说主要有下面几个方面的不同:
Ø 在管理方面:公钥密码算法只需要较少的资源就可以实现目的,在密钥的分配上,两者之间相差一个指数级别(一个是 n 一个是 n2 )。所以私钥密码算法不适应广域网的使用,而且更重要的一点是它不支持数字签名。
Ø 在安全方面:由于公钥密码算法基于未解决的数学难题,在破解上几乎不可能。对于私钥密码算法,到了 AES 虽说从理论来说是不可能破解的,但从计算机的发展角度来看。公钥更具有优越性。
Ø 从速度上来看: AES 的软件实现速度已经达到了每秒数兆或数十兆比特。是公钥的 100 倍,如果用硬件来实现的话这个比值将扩大到 1000 倍。
三 . 加密算法的选择
前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢?
我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
对称加密算法不能实现签名,因此签名只能非对称算法。
由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说, RSA 建议采用 1024 位的数字, ECC 建议采用 160 位, AES 采用 128 为即可。
四 . 密码学在现代的应用
随着密码学商业应用的普及,公钥密码学受到前所未有的重视。除传统的密码应用系统外, PKI 系统以公钥密码技术为主,提供加密、签名、认证、密钥管理、分配等功能。
保密通信:保密通信是密码学产生的动因。使用公私钥密码体制进行保密通信时,信息接收者只有知道对应的密钥才可以解密该信息。
数字签名:数字签名技术可以代替传统的手写签名,而且从安全的角度考虑,数字签名具有很好的防伪造功能。在政府机关、军事领域、商业领域有广泛的应用环境。
秘密共享:秘密共享技术是指将一个秘密信息利用密码技术分拆成 n 个称为共享因子的信息,分发给 n 个成员,只有 k(k ≤ n) 个合法成员的共享因子才可以恢复该秘密信息,其中任何一个或 m(m ≤ k) 个成员合作都不知道该秘密信息。利用秘密共享技术可以控制任何需要多个人共同控制的秘密信息、命令等。
认证功能:在公开的信道上进行敏感信息的传输,采用签名技术实现对消息的真实性、完整性进行验证,通过验证公钥证书实现对通信主体的身份验证。
密钥管理:密钥是保密系统中更为脆弱而重要的环节,公钥密码体制是解决密钥管理工作的有力工具;利用公钥密码体制进行密钥协商和产生,保密通信双方不需要事先共享秘密信息;利用公钥密码体制进行密钥分发、保护、密钥托管、密钥恢复等。
基于公钥密码体制可以实现以上通用功能以外,还可以设计实现以下的系统:安全电子商务系统、电子现金系统、电子选举系统、电子招投标系统、电子彩票系统等。
公钥密码体制的产生是密码学由传统的政府、军事等应用领域走向商用、民用的基础,同时互联网、电子商务的发展为密码学的发展开辟了更为广阔的前景。
五 . 加密算法的未来
随着计算方法的改进,计算机运行速度的加快,网络的发展,越来越多的算法被破解。
在 2004 年国际密码学会议 (Crypto’2004) 上,来自中国山东大学的王小云教授做的破译 MD5 、 HAVAL-128 、 MD4 和 RIPEMD 算法的报告,令在场的国际顶尖密码学专家都为之震惊,意味着这些算法将从应用中淘汰。随后, SHA-1 也被宣告被破解。
历史上有三次对 DES 有影响的攻击实验。 1997 年,利用当时各国 7 万台计算机,历时 96 天破解了 DES 的密钥。 1998 年,电子边境基金会( EFF )用 25 万美元制造的专用计算机,用 56 小时破解了 DES 的密钥。 1999 年, EFF 用 22 小时 15 分完成了破解工作。因此。曾经有过卓越贡献的 DES 也不能满足我们日益增长的需求了。
最近,一组研究人员成功的把一个 512 位的整数分解因子,宣告了 RSA 的破解。
我 们说数据的安全是相对的,可以说在一定时期一定条件下是安全的,随着硬件和网络的发展,或者是另一个王小云的出现,目前的常用加密算法都有可能在短时间内 被破解,那时我们不得不使用更长的密钥或更加先进的算法,才能保证数据的安全,因此加密算法依然需要不断发展和完善,提供更高的加密安全强度和运算速度。
纵观这两种算法一个从 DES 到 3DES 再到 AES ,一个从 RSA 到 ECC 。 其发展角度无不是从密钥的简单性,成本的低廉性,管理的简易性,算法的复杂性,保密的安全性以及计算的快速性这几个方面去考虑。因此,未来算法的发展也必 定是从这几个角度出发的,而且在实际操作中往往把这两种算法结合起来,也需将来一种集两种算法优点于一身的新型算法将会出现,到那个时候,电子商务的实现 必将更加的快捷和安全。