一、古典密码学
何谓“加密”
“密码”或“加密系统”用于“加密”数据。
对于原始的未加密的数据,我们称之为“明文”
对于加密的结果,我们称之为“密文”。
通过称为“解密”的过程,我们把密文恢复成原始的明文。
凯撒密码(公元前54年):
消息的加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的。
换位密码保持所有字母数量不变,只改变字母的排列,一般是将明文写在一个给定大小的矩阵中,然后对行和列依据特定的序列进行置换操作。
理想的加密系统
过去的明文和密文攻击者可以知道
加密和解密的算法对方可以知道
只要密钥不泄露,对方就无法破解新的密文
可以公开除了密钥之外的整个密码系统的一切内容
培根密码(Baconian Cipher)是一种替换密码,16世纪由英国哲学家兰西斯·培根(知识就是力量口号的提出者)创造,每个明文字母被一个由5字符组成的序列替换。
猪圈密码(Pigpen cipher)是一种以格子为基础的简单替换密码。17世纪左右,共济会常常使用这种密码保护一些私密纪录或用来通讯,所以又称共济会密码。
摩尔斯电码是无线电发明后最早使用的信息编码,通过电键敲击出点、划及中间的停顿发送。
当铺密码通常使用汉字来隐藏信息,专门用来加密数字,不需要密钥,明文信息包含在加密后的密文中。
较常见的当铺密码有两种,一种是将数字映射到对应笔画的汉字,另外一种是利用汉字的字形特征,当前汉字有多少笔画出头就转化成数字几。
二、现代密码学
DES加密的三个原则
混淆(confusion):使密文与密钥的关系尽可能复杂化,使得对手即使获取了许多明文和对应的密文,以及关于密文的一些统计特性,也无法推测密钥。
扩散(diffusion):让明文中的每一位影响密文中的许多位,或者说让密文中的每一位受明文中的许多位的影响。这样可以隐蔽明文的统计特性。当然,理想的情况是让明文中的每一位影响密文中的所有位,或者说让密文中的每一位受明文中所有位的影响。
分组(block cipher):可以看成经典的电报密码本加密技术的现代传承,其中由密钥来决定电报密码本的选择。一次加密一组数据,密钥长度为一组数据的长度。
DES加密原理
DES(Data Encryption Standard)采用分组加密。使用64位的分组长度和56位的密钥长度,将64位的输入经过一系列变换得到64位的输出。DES算法利用多次组合替代算法和换位算法,通过混淆和扩散的相互作用,把明文编制成密码强度很高的密文。解密则使用了相同的步骤和相同的密钥。
64位数据为一组进行加密
初始置换根据一张8*8的置换表,将64位的明文打乱
与56位的密钥经16轮次迭代运算形成的初始密文
最后经过初始逆置换得到分组的最终密文
DES的压缩、扩展和置换操作使其具有很强的雪崩效应。即输入明文或密钥中一个比特的变化会导致输出中至少一半比特的密文发生变化,这使得穷举试凑寻找其中规律变得不可能。
DES加密特点
DES算法产生密钥的方式简单,密钥一般也比较短。
DES算法加密解密速度快,效率很高,适合对大数据量的数据进行加密。
DES算法的安全性依赖于密钥的高度保密,通信双方必须有方法能保证安全的分享密钥,并定期更换DES密钥。
RSA概述
RSA算法基于数论构造,具体难题是大素数乘积的因子分解。
将两个大素数相乘十分容易,但对其乘积进行因式分解却极其困难,因此可以将乘积作为加密密钥公开。
公钥和私钥的产生
任意选择两个大的质数(素数)p和q,p不等于q,计算N=pq
根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
用以下这个公式计算d:d×e ≡ 1 (mod (p-1)(q-1))
将p和q销毁后,(N,e)是公钥,(N,d)是私钥
例如:
选素数p=47和q=71,得N=3337,(n)=(47-1)×(71-1)=3220
选择e=79,求得私钥d=e-11019(mod 3220)公开N=3337和e=79
加密消息
假设Bob想给Alice送一个消息,他知道Alice产生的公钥N和e
将原始信息分为多段,每一段(假定为n)分别用以下公式计算出c:
将多个n计算出的多个c串在一起,就是密文,发送即可。
例如:公钥(N,e)=(3337,79),私钥(N,d)=(3337,1019)
现要发送明文688,计算:68879(mod 3337)=1570
解密消息
Alice得到Bob的消息c后就可以利用她的密钥(N,d)来解码。她可以用以下这个公式来将c转换为n:
得到n后,她可以将原来的信息m重新复原。
例如:公钥(N,e)=(3337,79),私钥(N,d)=(3337,1019)
收到密文1570后,用私钥d=1019进行解密:
15701019(mod 3337)=688
例如:公钥(N,e)=(3337,79),私钥(N,d)=(3337,1019)
收到密文1570后,用私钥d=1019进行解密:
15701019(mod 3337)=688
RSA应用
加密少量数据
比起DES和其它对称算法来说,RSA的运算速度要慢得多。
实际使用时,RSA算法不用来加密消息,而是用来加密传输密钥,加密消息用对称算法,如DES。
实现数字签名
将RSA算法反向使用(私钥加密公钥解密),对消息摘要加密,可以实现数字签名的功能。
数字签名可以防止数据篡改、数据抵赖和数据伪造发生。