数据的加密与解密

 

本文来源于对维基百科的搜索、摘要和整理,同时也参考了其他搜索引擎的搜索结果。

 

标签:密码学 现代密码学 加密 算法

http://zh.wikipedia.org/wiki/%E5%AF%86%E7%A2%BC%E5%AD%B8

 

    在现代密码学中,加密方法大致可分为对称密钥加密(对称加密)和公开密钥加密(非对称加密)。

 

一. 对称加密(Symmetric-key algorithm,或对等加密: Reciprocal cipher )

对称加密,即加密和解密使用同一个密钥,或者知道一方密钥能够轻易计算出另一方密钥。其解密(decryption)算法等同于加密算法,也就是说,要还原对等加密的密文,套用加密同样的算法即可得到明文。

对称加密的速度比非对称加密快很多,在很多场合都需要对称加密。

对称加密又可分为分组密码(分组加密)和流密码(流加密)。

1. 分组密码

分组密码(Block cipher,又称分块密码),是一种对称密钥密码。它的特点是将明文分成多个等长的组,并用相同的密码算法和密钥对每组分别进行加密和解密。其中典型的如DES和AES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。

常见加密算法 AES · Blowfish · DES · 3DES · Serpent · Twofish
 
次常见加密算法 Camellia · CAST-128 · IDEA · RC2 · RC5 · SEED · Skipjack · TEA · XTEA

密码设计 Feistel network · Key schedule · Product cipher · S-box · P-box · SPN

密码分析 穷举法 · Linear · Differential (Impossible · Truncated) · Integral · Boomerang · Mod n · Related-key · Slide · Rotational · Timing · XSL

密码标准 AES process · CRYPTREC · NESSIE

1) DES:
数据加密标准(Data Encryption Standard)。DES是一种典型的块密码—一种将固定长度的明文通过一系列复杂的操作变成同样长度的密文的算法。对DES而言,块长度为64位。1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。在某些文献中,作为算法的DES被称为DEA(Data Encryption Algorithm,数据加密算法),以与作为标准的DES区分开来。

DES使用的密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位可以被用于奇偶校验,并在算法中被丢弃。因此,DES的有效密钥长度为56位,通常称DES的密钥长度为56位。

DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。另外,DES已经不再作为国家标准科技协会(前国家标准局)的一个标准。

2) 3DES(或称为Triple DES):
是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。加密算法为:使用K1为密钥进行DES加密,再用K2为密钥进行DES“解密”,最后以K3进行DES加密。解密则为其反过程。

3) AES:
高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael为名投稿高级加密标准的甄选流程。

AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;加密过程中使用的密钥是由Rijndael密钥生成方案产生。

AES在软件及硬件上都能快速地加解密,相对来说较易于实现,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。

4) Blowfish:
Blowfish是1993年布鲁斯·施奈尔开发的对称密钥区块加密算法,区块长为64位,密钥为1至448位的可变长度。与DES等算法相比,其处理速度较快。因为其无须授权即可使用,作为一种自由授权的加密方式在SSH、文件加密软件等被广泛地使用。

5) Serpent:
Serpent 是 Ross Anderson, Eli Biham 和 Lars Knudsen 开发的块加密算法. Serpent 可以使用不同的密钥长度. Serpent 也是高级加密标准 (AES)的5个候选之一.

BestCrypt 以LRW模式使用 Serpent 算法, 256位密钥, 128位块大小和 32 次循环.

6) Twofish:

Twofish 加密算法由布鲁斯·施奈尔(Bruce Schneier)带领的项目组(John Kelsey, Chris Hall, Niels Ferguson, David Wagner 和 Doug Whiting)于1998年开发,可以看作是布鲁斯·施奈尔1993年开发的Blowfish算法的延伸版本。技术上使用与Blowfish类似的计算方法,但是考虑到主要面向于网络应用,提高了更大密钥算法的速度。虽然败给了 Rijndael 算法,但是在加密、解密速度方面具有一定的优势。与Blowfish算法一样,Twofish算法无须授权即可使用。

Twofish 的区块长度为 128 位, 可以使用任意长度密钥(一般为128、192、256位三种密钥长度)。

BestCrypt 是使用完整的 16 次循环和最大可能的 256 位密钥, 以 LRW 模式.

http://zh.wikipedia.org/wiki/Twofish_(%E5%AF%86%E7%A0%81%E5%AD%A6)


2. 流密码

流密码(stream cipher),又称序列密码,相对于区块加密,流密码是先制造一段任意长的钥匙原料,与明文依位元或字符结合,有点类似一次一密密码本(one-time pad)。输出的串流根据加密时的内部状态而定。在一些流密码上由钥匙控制状态的变化。RC4是相当有名的流密码。

在流密码中,一般是将明文m写成连续的符号,利用密钥流中的第i个元素ki对应明文中的第i个元素mi进行加密,若加密变换为E,则加密后的密文为: c=Ek(m)=Ek1(m1)Ek2(m2)...Eki(mki)。设与加密变换E对应的解密变换为D,其中D满足: Dki(Eki(mi))=mi,i=1,2,... 则通过解密运算可译得明文为: m=Dk(c)=Dk1(Ek1(m1))Dk2(Ek2(m2))^=m1m2^,从而完成一次密码通信.

1) RC4
RC4 是由RSA Security的Ron Rivest 在1987年开发出来的,虽然它的官方名是“Rivest Cipher 4”,但是首字母缩写RC也可以理解为Ron's Code。RC4开始时是商业密码,没有公开发表出来,但是在94年9月份的时候,它被人匿名公开在了Cypherpunks 邮件列表上,很快它就被发到了sci.crypt 新闻组上,随后从这儿传播到了互联网的许多站点。随之贴出的代码后来被证明是很有水平的,因为它的输出跟取得了RC4版权的私有软件的输出是完全的。由于算法已经公开,rc4也就不再是商业秘密了,只是它的名字“RC4”仍然是一个注册商标。RC4经常被称作是“ARCFOUR”或者"ARC4"(A lleged  RC4,所谓的RC4,因为RSA从来没有官方公布这个算法),这样来避免商标使用的问题。它已经成为一些广泛使用的协议和标准的一部分,比如,包括WEP和WPA的无线网卡和TLS。让它如此广泛分布和使用的主要因素是它不可思议的简单和速度,不管是软件还是硬件,实现起来都十分容易。

http://luck-donkey.iteye.com/blog/513069

http://baike.baidu.com.cn/view/904005.htm

http://wzgyantai.blogbus.com/logs/31867065.html


二. 非对称加密

公开密钥加密(public-key cryptography,也称为非对称(密钥)加密),该思想最早由雷夫·莫寇(Ralph C. Merkle)在1974年提出],之后在1976年,狄菲(Whitfield Diffie)与赫尔曼(Martin Hellman)两位学者以单向函数与单向暗门函数为基础,为发讯与收讯的两方创建金钥。

非对称密钥,是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。

如果加密密钥是公开的,这用于客户给私钥所有者上传加密的数据,这被称作为公开密钥加密(狭义)。例如,网络银行的客户发给银行网站的账户操作的加密数据。

如果解密密钥是公开的,用私钥加密的信息,可以用公钥对其解密,用于客户验证持有私钥一方发布的数据或文件是完整准确的,接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。例如,从网上下载的安装程序,一般都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。

常见的公钥加密算法有: RSA、ElGamal、背包算法、Rabin(Rabin的加密法可以说是RSA方法的特例)、Diffie-Hellman (D-H) 密钥交换协议中的公钥加密算法、Elliptic Curve Cryptography(ECC, 椭圆曲线加密算法)。使用最广泛的是RSA算法,是著名的公开金钥加密算法,ElGamal是另一种常用的非对称加密算法。


1) RSA:
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。

到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

 

比起DES和其它对称算法来说,RSA要慢得多。实际上人们一般使用一种对称算法来加密信息,然后用RSA来加密比较短的对称密码,然后将用RSA加密的对称密码和用对称算法加密的消息传送给接收方。这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。SSL 协议目前就是这么做的。

2) ElGamal:
ELGamal 是T.ElGamal在1985年提出的公钥加密方法。它的安全性是基于求解离散对数问题的困难性,是RSA以后比较有希望的一个公钥密码算法。美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法就是经ElGamal算法演变而来。目前DSA算法应用也非常广泛。

ElGamal 的加密和解密是一个单向的过程,虽然密钥对构造简单,但是只是一方向另外一方单向传送数据进行加解密,不能反向操作,这一点不同于RSA。
另外,ElGamal不足之处就是密文会成倍增长。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值