密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。
密码学是信息安全等相关议题,如认证、访问控制的核心,是网络安全、信息安全、区块链等产品的基础。
密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。
密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。进行明密变换的法则,称为密码的体制。指示这种变换的参数,称为密钥。它们是密码编制的重要组成部分。
密码学是在编码与破译的斗争实践中逐步发展起来的,从最开始的替换法到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。
1、古典密码学
古典密码学之所以被称为古典,是因为区别于现代密码学,这些密码理论虽然很有价值,但是现在很少使用。因此,学习古典密码学,主要是学习前人设计密码的思路,和他们成功或失败的历史。
古典密码编码方法主要有两种基本方法:代换密码和置换密码。
代换密码:将明文的字符替换为密文中的另一种的字符,替换后的各字母保持原来的位置,接收者只要对密文做反向替换就可以恢复出明文。
有4中类型的代换密码:
(1)单表代替密码:就是明文的一个字符用相应的一个密文字符代替。加密过程中是从明文字母表到密文字母表的一一映射。例如,对bee进行加密,将b替换成w,e替换成p,这样bee单词就变换成了wpp,不知道替换规则的人就无法阅读出原文的含义。
(2)同音代替密码:它与简单代替密码系统相似,唯一的不同是单个字符明文可以映射成密文的几个字符之一,例如A可能对应于5、13、25或56,“B”可能对应于7、19、31或42,所以,同音代替的密文并不唯一。
(3)多字母组代替密码:字符块被成组加密,例如“ABA”可能对应于“RTQ”,ABB可能对应于“SLL”等。
(4)多表代替密码:由多个简单的代替密码构成,例如,可能有5个被使用的不同的简单代替密码,单独的一个字符用来改变明文的每个字符的位置。
例如约定好表单为:表单1:abcde-swtrp、表单2:abcde-chfhk、表单3:abcde-jftou。
规定第一个字母用第三张表单,第二个字母用第一张表单,第三个字母用第二张表单,这时bee单词就变成了(312)fpk,破解难度更高,其中312又叫做密钥,密钥可以事先约定好,也可以在传输过程中标记出来。
置换密码:把明文中的字母重新排列,字母本身不变,但其位置改变了。
以字符串“hello-my-cipher”为例来演示加密过程:
① 选择密钥,我们这里使用“4213”作为密钥。该密钥共4位,表示中间结果的矩阵共4列,4213表示按照第四列,第二列,第一列,第三列的顺序读出形成密文
② 生成中间结果矩阵(该行不够4个则用明文中不包含的固定字符填充,这里使用‘@’)
h e l l
o - m y
- c i p
h e r @
③ 按照密钥所示的列顺序读出:lyp@e-ceho-hlmir
④ 至此加密完成。
古典密码的破解:
古典密码虽然很简单,但是在密码史上是使用的最久的加密方式,直到“概率论”的数学方法被发现,古典密码就被破解了。
英文单词中字母出现的频率是不同的,e以12.702%的百分比占比最高,z只占到0.074%。如果密文数量足够大,仅仅采用频度分析法就可以破解单表的替换法或移位法。
多表的替换法或移位法虽然难度高一些,但如果数据量足够大的话,也是可以破解的。以维尼吉亚密码算法为例,破解方法就是先找出密文中完全相同的字母串,猜测密钥长度,得到密钥长度后再把同组的密文放在一起,使用频率分析法破解。
2、近代密码学
古典密码的安全性受到了威胁,外加使用便利性较低,到了工业化时代,近现代密码被广泛应用。
近代密码学可以看做是现代密码学的一部分,只是在时间上进行了一个划分,将战争集中使用密码学的时期单独分开来看。
近代密码学被频繁使用是在二战时期。1918年,在一战即将结束的时候,德国人亚瑟·谢尔比乌斯参考科赫的构想后设计出了一种密码机器,也就是后来世界闻名的Enigma。
Enigma是一种多表替换的加密实践,其加密核心是3个转轮。每个转轮的外层边缘都写着26个德文字母,用以表示26个不同的位置,而经过转轮内部不同导线的连接,改变输入和输出的位置,从而进行加密。一个3转轮的Enigma机器,能进行17576中不同的加密变化。Enigma在二战中作为德国海陆空三军最高级的密码机,曾一度在二战前期势不可挡。当时的Enigma较刚设计出来的原始形态做了一些改变,使用了3个正规轮和1个反射轮,极大提高了军事信息的安全性。
密码机内的转轮,每转动一次,相当于更换了一套密码表。每个转轮对应26个字母,相当于有26套密码表。
例如,当有3个转轮时,密码表套数为:26³=17576种。德国二战期间用的最高水Enigma具有8个转轮,密码表套数为26的8次方,达到了2000多亿种。
3、现代密码学
现代密码学主要是依据密码学建立了理论基础,成为一门科学来判定。1949年,香农发布了一篇名为《保密系统的信息理论》的论文,将信息论引入,提出了混淆和扩散两大设计原则,奠定了密码学的相对成体系的理论基础。
香农的密码学理论偏向对称密码学,分成分组密码和流密码。
分组加密是将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密,应用于软件类加密,比如电子邮件加密和银行交易转账加密等;
流密码是加密和解密双方使用相同的伪随机加密数据流作为密钥,通常是对一个位进行加密操作,由于实际操作相对更困难,所以通常用于硬件加密。
虽然在1949年,密码学就开始有了一定的理论雏形,但是由于受到历史和现实条件的局限,主要还是政府机关和军事指挥处应用的更为广泛。而密码学真正意义上开始进入发展期还是从七十年代中期。
1976年,美国密码学家迪菲和赫尔曼发表了一篇名为《密码学的新方向》,开启了公钥密码体制的新篇章。主要采用了将加密和解密两个相关密钥单独操作,加密密钥是公开的,称为“公钥”,不仅可以公开算法,连密钥也可以公开,而解密密钥专属于用户,称为“私钥”,两种密钥相关而存异,基于一种特殊的单向陷门函数,不再是简单的表单替代和置换,使得保密程度又上升了一个层次。
1977年美国官方颁布了数据加密标准DES用于非国家保密机关,形成了密码学行业的初期规范,并将密码学推向更广泛的应用。
而最经典的公钥加密算法莫过于1978年由美国麻省理工出身的里维斯特、沙米尔和阿德曼在数论方法上构造的RSA算法,更偏向非对称加密,目前是安全系数较高的一种加密算法,也是迄今为止最成熟的公钥密码体制。
(1)Hash(散列函数)
Hash(散列函数),也翻译作杂凑函数、摘要函数或哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验、数字签名中。
MD5可以将任意长度的原文生成一个128位(16字节)的哈希值,于2004年被王小云教授宣布破译,证明MD5具有抗碰撞性不足的安全弱点,可快速对文件进行修改而保持哈希值不变,对MD5算法的应用形成了挑战。
SHA-1可以将任意长度的原文生成一个160位(20字节)的哈希值,2017年Google公司公告宣称他们与阿姆斯特丹CWI研究所,共同创建了两个有着相同的SHA-1哈希值但内容不同的PDF文件,这代表SHA-1算法已被正式攻破。
(2)对称加密 (Symmetric Key Encryption)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。自1977年美国颁布DES(Data Encryption Standard)密码算法作为美国数据加密标准以来,对称密码体制迅速发展,得到了世界各国的关注和普遍应用。
对称密码体制从工作方式上可以分为分组加密和序列密码两大类。
分组密码:也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组,有 ECB、CBC、CFB、OFB 四种工作模式。
序列密码:也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。
常用对称加密算法包括 DES、3DES、AES。
DES算法使用的密钥是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位),把64位的原文输入块变为64位的密文输出块。单层DES算法于1999年被RSA公司以22小时35分钟破解。
3DES(即Triple DES),由3支DES长度的密钥组成(或2支,第一支密钥和第三支密钥相同),加密过程为:用第一支密钥对原文进行加密,再使用第二支密钥对第一步操作后的信息进行解密,最后使用第三支密钥对第二步操作后的信息进行加密得到最终密文。解密过程与加密过程相反:采用第三支密钥对密文进行解密,再采用第二支密钥进行加密,最后采用第一支密钥解密得到原文。
AES,密钥长度可为128、192、256比特三种,可以抵抗各种已知攻击,目前为止还没有公开的对AES有威胁的攻击方法。
(3)非对称加密(Asymmetric Key Encryption)
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。
加密和解密运算使用的密钥不同。用公钥对原文进行加密后,需要由私钥进行解密;用私钥对原文进行加密后(此时一般称为签名),需要由公钥进行解密(此时一般称为验签)。公钥可以公开的,大家使用公钥对信息进行加密,再发送给私钥的持有者,私钥持有者使用私钥对信息进行解密,获得信息原文。因为私钥只有单一人持有,因此不用担心被他人解密获取信息原文。
比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人——银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
私钥对信息的加密(此时一般称为签名),可以确保私钥持有者对信息的认可,大家持有公钥即可验证信息是由私钥持有者发出的,表明私钥持有者认可了信息的内容,实现了对信息进行数字签名的效果。
常见的非对称密码有RSA和SM2。
RSA于1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,三人姓氏开头字母拼成RSA,迄今为止应用十分广泛。
SM2基于椭圆曲线公钥密码算法,为我国商用密码体系中用于替换RSA的算法。
非对称密码不仅可以应用于签名、加密中,还可以和对称密码组合形成数字信封,兼顾对称加密技术和非对称加密技术两者的优点,既发挥了对称加密算法速度快的优点,又发挥了非对称加密算法的高安全、无需提前协商的优势。
对称密码算法中加密和解密采用了相同密钥,一但加密者或解密者有一方造成密钥泄露,或在密钥分配传输时泄露,都将对信息安全造成影响。非对称密码算法的提出,解决了这个问题,公钥公开,私钥个人管理,采用非对称密码算法在一定程度上可以简化密钥管理的难题。但由于公钥在分发过程中可能被截取后篡改,接收方也无从核查接收到的公钥所对应私钥的持有者身份,因而非对称密码算法也并不宜大范围使用。
为解决非对称密码算法不宜大范围应用的问题,引入了权威机构CA(certificate authority,数字证书认证机构),由CA负责用户的身份核实,并向用户颁发数字证书,有效地形成公私钥与持有者身份的映射关系,避免了公钥在分发过程中可能被他人偷换的问题,增强了信任性。