据记载,公元前
400
年,古希腊人发明了置换密码。
1881
年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。
随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在
1997
年,美国国家标准局公布实施了“美国数据加密标准(
DES
)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有
DES
、
RSA
、
SHA
等。随着对加密强度需求的不断提高,近期又出现了
AES
、
ECC
等。
使用密码学可以达到以下目的:
保密性:防止用户的标识或数据被读取。
数据完整性:防止数据被更改。
身份验证:确保数据发自特定的一方。
根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。
对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。
非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。
对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:
DES
(
Data Encryption Standard
):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES
(
Triple DES
):是基于
DES
,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES
(
Advanced Encryption Standard
):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
AES
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
):椭圆曲线密码编码学。
ECC
在
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
协议中缺省的公钥密码算法。