密码学笔记(2)--DES

加密算法

现代密码学体系中,从加密算法本身角度出发主要分为两大类:对称加密(symmetric cryptography)和非对称加密(asymmetric cryptography),又被称作单钥加密(private key cryptography)和 双钥加密(public key cryptography)。

对称加密

对称加密是指 加密 和解密 使用同一个密钥,通俗点来说就是一把钥匙开一把锁,所以保护好这把钥匙就尤为重要了。就像防盗门一样,门再坚固,如果钥匙丢了或者被人偷偷复制了一把,那还是可以被人轻而易举的闯入的。

常用的对称加密算法有:

DES

Date Encipher Standard, 该算法在美国NSA(国家安全局)资助下由IBM公司开发,主要由W. Tuchman 和 C. Meyer 负责在1971-1972年研发成功。其初衷是为政府非机密的敏感信息提供较强的加密保护。它是美国政府担保的第一种加密算法。DES算法1975年3月公开发表,1977年1月15日由美国国家标准局颁布为数据加密标准(Data Encryption Standard),于1977年7月15日生效并在1977年被正式作为美国联邦信息处理标准。DES首次被批准使用五年,并规定每隔五年由美国国家保密局作出评估,并重新批准它是否继续作为联邦加密标准。最近的一次评估是在1994年1月,美国已决定1998年12月以后将不再使用DES。因为按照现有的技术水平,采用不到几十万美元的设备,就可破开DES密码体制。估计按照现有的计算水平,破译的成本就更低了。

3DES

三重DES,即DES重复三次得到的一种密码算法,通常缩写为3DES 。该算法也是IBM公司设计出来的,它的加密机制如下图所示:

3DES

三重DES并不是三次DES加密,而是加密–>解密–>加密的过程。如果密钥1和和密钥2相同的话,可以看出来实际上就是DES加密。这也正是IBM设计的初衷,在增强DES加密强度的基础上同时兼容DES。

AES

AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法(Rijndael)。Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特到256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192、和256比特三种。

其他常用的加密算法还有:TDEA、Blowfish、RC4、RC5、IDEA等。

非对称加密

非对称加密是指 加密和解密用两个不同的密钥,通俗点的说法,就是一把锁可以用钥匙A锁住,然后用钥匙B打开,或者反过来用钥匙B锁住,然后用钥匙A打开;用一个钥匙锁住只能用另一个钥匙打开,并且这两把钥匙是独一无二的一对儿。这种加密方式就比较有意思了,主要有两种用处:

  1. 加密信息:小明 可以把自己的 钥匙A 给所有人都配一把(公钥,可以公开给所有人),然后自己留着独有的另一把钥匙B(私钥,不公开)。如果小刚想给小明写加密的鸡毛信,可以把消息放到这个加密盒子里,然后用钥匙A把锁锁起来。这个时候只有小明有钥匙B可以解开这个锁拿到盒子里的消息;即使这个盒子被其他人截获也没法打开,这就实现了安全的加密通信。

  2. 签名认证:小明用自己独有的钥匙B(私钥)给一段话(消息)加上锁,并且告诉大家这段话的第一句就是:“这段话是我小明说的”。小刚在收到这个加密的盒子的时候,就用以前小明公开过的钥匙A(小明的公钥)去尝试打开这个锁,如果打开了并且第一句话就是 “这段话是我小明说的”,那就可以证明这段话的内容确实是小明说的;如果没能打开这把锁,或者打开了第一句话不是 “这段话是我小明说的”,那就说明是有人冒充小明发假消息了。

常用的非对称加密(公开密钥)算法有:

Diffie-Hellman

公钥密码学是1976年由Diffie和Hellman在其“密码学新方向”一文中提出的,两人提出的一种交换公钥的方式。

RSA

RSA算法的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏首字母组成的。1983年,RSA公司为RSA算法在美国申请并取得了专利,但是该专利现在已经过期。RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

ElGamal

ELGamal 是由 Taher ElGamal 设计的公钥算法。RSA 利用了质因数分解的困难度,而 ElGamal 方式则利用了 mod N 下求离散对数的困难度。但是该方法有一个缺点,就是经过加密的密文长度会变为明文的两倍。有个叫 GnuPG 的密码软件就支持该算法。

Rabin

Rabin 是由M.O.Rabin 设计的公钥算法。Rabin 方式利用了 mod N 下求平方根的困难度。

ECC

椭圆曲线密码(Elliptic Curve Cryptosystems, ECC)是最近备受关注的一种公钥密码算法。它的特点是所需的密钥长度比RSA短。椭圆曲线密码是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,它利用了这种乘法运算的逆运算非常困难的这一特性。

加密算法研究内容

从应用的角度来看,加解密算法研究分两个大方向:

  • 密码编码学(Cryptography):研究信息的编码,实现对应的加密

    1. 序列密码(流密码)编码
    2. 分组密码 编码
    3. 公钥密码
    4. 数字签名
    5. 单向哈希函数 等等
  • 密码分析学(Cryptanalytics):研究加密信息的破解或者伪造假信息

    1. 密码算法的安全性分析和破译的理论、技术以及实践

    2. 密码协议的安全性分析

    3. 安全保密系统的分析与攻击 等

目标

希望自己能坚持下去学习下几种加密算法的原理与实现,然后再从密码分析的角度出发,看看攻击的方式吧。行百里者半九十,共勉!

参考资料:

  1. 《图解密码技术》
  2. 《应用密码学课程》–解放军信息工程大学 课件
  3. 阮一峰 密码学笔记
哎呀,被你看光了