早在网络时代来临之前,甚至现代工业萌芽之前,信息的加密就已经成为某些人和机构的刚需了。
说起来,信息安全其实无处不在,要实现信息安全,最为直接的办法莫过于用手捂着小声说话,又或者是把字条揉成纸团丢给对方,但要真正谈的上加密(encryption),大概要到古希腊的密码棒(scytale),麻匪的哨子这一级别才行了。
Rex觉得,曾经风靡一时的火星文也能算得上是一种加密,只是它的密钥已经提前放在部分人的脑子里了~
火星文加密:ゞ灬牜油惈坷以苌得哽迏╰→
在数字加密普及之前,一种简单粗暴的办法也被大量使用过,那就是只用移动存储设备存放敏感信息,这包括磁带,软盘,和之后的移动硬盘等等,这种纯物理式的保护安全系数很高,只有在需要时才进行读取,但是对远程的信息传输就完全不适用了。
密码加密
还是在古希腊,这里出现了最早的一批密码使用者,通过一个特定的规则,把原本的文字变化成杂乱无章的信息,只有知道这一规则的人才能推测出原文,这就是加密和解密的过程。
我们曾经创造出了无数种加密的规则,简单的诸如把每个字母往后移动若干位(凯撒大帝曾使用过的方法),复杂的可能会用各种符号的组合来代替原始的字母等等,但是这种人工完成的规则无论多么复杂,在拥有强大算力的电脑面前都变得苍白无力了。有了电脑的运算速度,只需要大致判断规则的类型,就可以用基于穷举法的暴力破解来轻松破译。
另外,基于字母频率,我们也可以根据加密片段里不同字母(符号)的出现频率来找到些蛛丝马迹。比如,一段文字里有两到三种符号出现得很多,那它们很可能就是字母e、t、a变换之后得来的。类似地我们可以猜测,如果原文是由中文字符变化而来,出现最多的部分是不是应该对应“的”这个字呢?
无论如何,随着电脑的普及和我们对文字加密的不断研究,加密和破解的斗争开始从人与人之间的博弈上升到了电脑与电脑的较量。
使用密钥
要用电脑代替人脑,加密的规则也必须变成电脑可以“读懂”的规则,这时加密算法就诞生了,而与加密对应的破解办法被称为蜜月密钥,它就是还原加密信息的钥匙。
对称密钥加密(Symmetric Key Encryption)和不对称密钥加密(Asymmetric-key Encryption)或者叫私钥和公钥加密,是两种不同的加密解密策略。前者的原理和我们自己手工加密一样,原来我们写密信的时候会把唯一的解密方法告诉对方,而对其他人保密,同样地,唯一的密钥也只安装在要相互交流的电脑上。
当然,在对称密钥加密里,几个人之间需要分发、保管同一副钥匙,被人偷走的概率也比较大,黑客只用挑里面的软柿子下手,偷到一把钥匙就可以为所欲为了。
为了解决这个问题,1976年11月一声炮响,IEEE上发表的一篇论文提出了新的加密思路,公钥加密出现了。这次,要打开密码锁你需要两把钥匙,一把私钥只保存在你的电脑上,另一把公钥则是由你向大家公开发放的,谁想和你互通下有无,你就发给他一把公钥,让他用公钥把信息上锁,收到信息后,你掏出自己发放的公钥和唯一一把私钥,微微一笑解开了密码。
第一代对称密钥在1970年左右投入使用,这种基于DES(DataEncryption Standard)标准的密钥长度只有56个比特,对应的可能组合数量是7*10^16种。后来计算机的速度大幅提高,这么多种可能的组合也能被很快穷举出来,于是更大更长的密钥标准出现了,那就是AESAdvanced Encryption Standard)标准,密钥长度最高达到了256比特。
再往后,越来越大的密钥和公钥加密的广泛应用不断提高着我们网上冲浪时的信息安全指数。
加密算法里的数论
现在的加密算法中最为核心的一点莫过于对大质数的运用。我们都知道,大质数的检验和分解是一个极其耗时的过程,而我们已经证明了质数的无限性,即存在无限个质数,所以我们可以用来加密的大质数可以说是取之不尽用之不竭的!
然而,选择质数作为产生密钥的基础,是因为质数本身具有的神奇性质。这需要我们从“元”开始说起,对于整数加法而言,单位元是0,它是加法运算里的标尺,是一个最小单位的存在,0+5=5,0+10=10,而一个数的逆元e意味着e+x=0,这就是相反数的概念;对于乘法,显然地,单位元是1,因为1*5=5, 1*10=10,通过这个单位元我们还产生了倒数的概念,即e*x=1。
放到计算机里,我们希望找到一个运算,可以在大量计算之后得到的结果还在一个比较小的范围内,不然程序不断运行,结果也越来越大,这显然有违我们可持续发展的治国理念。所以加法和乘法都不能满足要求,于是我们找到了取余数(取模)这个运算。
说了这么多,最后把取模和质数联系起来的,正是单位元。因为1%5=5, 1%10=10,(%是取模运算,就是算前面一个数除以后面一个数的余数),所以1也能看作取模运算的单位元!而质数则保证了我们在取模的时候总能得到单位元,程序运行时可以正常使用四则运算,同时还不扩大所用的数的集合。
质数对于加密算法的重要性还包括很多很多,牵扯到抽象代数和离散数学的内容Rex也只了解到皮毛,当我想深入咨询计算机专业的小伙伴时,却得到了如下的回答,毕竟学海无涯嘛,大家共勉~
如果跳过繁琐的数论,我们也可以从简单的例子里看到其中的精髓。在之前的当谈论区块链时我们在谈些什么一文中,我们曾提到过哈希(Hash)算法,我们的公钥其实也是基于这一算法,他最大的特点就是:极难破解,极易验证,举个栗子:
当我们输入质数2333,哈希算法可能会这样处理:2333*1777,输出结果=4145741
虽然是质数相乘,但如果我们只知道输出的结果,要反推输入的数是极难的。要是其中一个因子1777被作为密码提交,又可以马上验证它的正确性,同时知道原始的输入值是2333,这就是这类算法的保密功能所在。
现在的网络世界,早已离不开数论的支撑,而数学领域上的每一次突破都有可能给我们的网络生活再次带来颠覆性的改变,所以下一次当看到我们在纯数学领域投入巨大资源的时候,应该知道,它们身上背负了人们怎样的希望。
##由于这两周Hulk实验工作繁忙,我也进入了最后的准毕业阶段,牛油果的文章产出比以前更慢了= = 但还是有越来越多的小伙伴找到并关注了我们,感谢大家支持的同时,也希望有兴趣的小伙伴联系我们投稿合作,牛油果会越来越好的!##
来源参考
https://computer.howstuffworks.com/encryption4.htm
https://www.techworld.com/security/what-is-encryption-3659671/
https://blog.csdn.net/dog250/article/details/38958637