有了“小沙同学”的帮助,牛郎与织女有了安全高效的校验机制。
似乎是已经“万事俱备,只欠东风”——加密策略了。
只要有了一种绝对安全的加密策略,就能绕过王母,与织女秘密沟通见面时间了。
这可让牛郎犯了难:如何保证一个加密的方式,是绝对安全的呢?
现在是“王母在暗处,牛郎在明处”,只要王母保持低调,牛郎就不可能知道王母是否破译了自己的加密信息。
而且,最头疼的是,为了确保织女能够解密,自己总要把解密方式告诉织女的,王母肯定中途会窃听的。
这就是牛郎所面临的最大挑战:“在众目睽睽之下,实现安全的加密通信。”
不去开始,就永远不会有开始。虽然这事情看起来不可能,但是牛郎还是不得不尝试一下。
牛郎现在也没什么思路,那就从最简单的加密方式开始吧。
天街小雨润如酥,气吞万里如虎;
不教胡马度阴山,错向槐安回首。
藏头诗,“天气不错”。牛郎感觉,自己都想给自己磕个头,太牛了。
也算是闲谈吧,牛郎赶紧将其发给织女。
织女也给出了自己的见解:“最有名的刺客,反而是无名的。”
牛郎并没有直接认同,而是创造性地提出了另一个观点:“最有名的刺客,就是有名的。”
不知为什么,牛郎脑海中,竟然闪过一个词:“怪盗基德”。
“优秀的刺客,应该每次都能成功刺杀目标并离开,让人明知是其所为却就是没办法防范。”
“加密方法应该也是一样,应该让人明知用了什么方法,但就是无法解密。”
“对于加密方法的保密,我们无法证明其安全性,毕竟只有你我使用了,我们总有想不到的地方。”
“但一种被所有人公认的加密方法,它必然经过了无数次攻防的洗礼,安全性肯定是不言而喻的。”
“因此,我们要想一种方法,将方法公开出去,但除了接收方外,其他人无法窥探数据内容。”
织女看到牛郎的回复后,大为赞叹,提出了自己的疑惑:“这样的方法,真的存在吗?”
牛郎给出了肯定的回答:“一定存在的。”
“还记得数据校验时,我们引入了‘见面日期’这个因素,作为最后两位的校验值吗?”
“加密应该也是类似的道理,但是我们要想办法,将‘见面日期’这个因素无限放大。”
“最终构建一把锁,而‘见面日期’就是解开这把锁的钥匙。”
“当然,后面锁和钥匙都是可以更换的。”
“只要锁的原理我们构思好了,甚至任何人都可以用这个方法,创建自己的锁与钥匙。”
其实牛郎也想到了,‘见面日期’是及其不安全的。
因为,王母完全可以猜到前面几位的。年份,还用猜吗?
月份,想想应该也容易吧?虽然一年有12个月,但是调查一下,锁定在3个月范围内,没问题吧?
日子,可能确实比较隐私,难以直接猜到。但一个月按30天算,加上上面月份的猜测,也就3x30=90种情况,就可以得到“钥匙”。
也就是说,这把“钥匙”现在并不安全,这也是牛郎提出“允许更换锁和钥匙”的初衷。
当然,现在连加密方法都没有,钥匙的安全问题,可以暂且不提。
现在的问题是,如何用8个数字的“见面日期”,去对一整篇的信件进行加密呢?
文字与数字结合的话,牛郎瞬间想到了:字典。
接着,牛郎又想到了一个简单的加密方法:加一加密法。
将每个字转换为索引值,然后都加上1成为新的索引,接着将新索引对应的文字写下来。
此时,整篇文章变得“语言不通”,无人能直接读懂。
但如果通过“减一”来解密一下,就能得到真正的内容了。
如果将这个“加一”,变成“加上见面日期”,当然,年月日有点过大了,可以先只加上最后两位“日子”。
这样,别人不知道牛郎和织女是几号见面的,短时间自然无法准确解密出内容。当然,题外话,这里也只是“短时间”而已。
于是,最简单的加密方式出现了:通过两位数字,对整篇内容进行加密。
回过头来,这里说“短时间无法准确解密”,那么意味着,王母如果花费一定的时间,还是可以解密的。
因为见面日期的具体日子,只可能是1到31之间的数字。
将每个数字都尝试一遍,最后选出一篇读起来通顺的文章,基本就是加密前的原文了。
为此,牛郎想到了一个描述方法:加密强度。
因为加密方法是公开的,理论上只要时间足够,总可以有办法穷举所有可能的。
但是,自己要与织女约定见面时间,按天书契约,需要一年内见面一次。
换句话说,只要自己能设计出一种方案,以王母的资源,在一年内无法破解,那么,这个加密强度就是足够的。
现在这个“加一加密法”的变体,对于王母来说,穷举31种情况,也就几分钟的事情,肯定是不行的。
于是,首先需要搞定的,就是,需要多强的加密强度?
牛郎推算了一下,每次解密,都需要施展仙术,自己现在的水平,大概在1分钟左右。
假定王母及其手下都是仙术高手,乐观估计1秒钟,应该可以吧?
1小时是3600秒,1天是24x3600秒,1年约是365x24x3600秒,为3153.6万秒。
听闻天庭有10万天兵,全部参与的话,是10万x3153.6万,约等于3亿。
也就是说,针对目前的情况,只要加密算法在3亿次尝试之内无法被解密,那么,就可以认为它是安全的。
也就是纯数字钥匙的话,必须是3亿以上的数字。
当然,为了保证安全性,可能需要十亿或者百亿以上的数字。
为了安全性,钥匙先暂定用百亿以上的数字吧。百亿,刚好十位数,还是比较凑整的。
那么,这十位数应该怎么生成呢?这难不倒牛郎,只要用一些只有自己和织女知道的信息,来拼凑每一位就可以了。
当然,现在的加密方法并不是非常明晰,因此,牛郎还不想浪费一把“钥匙”。
为了前期测试方便,牛郎还是先用了“见面日期”,年月日一共8位,后面两位用0补齐吧,作为一把临时用的“测试钥匙”。
现在有了钥匙,到了创造“锁”的步骤了。
之前的“加一加密法”,可能就有些不太适用了,但是也不至于完全废弃,新的加密方法,也与之异曲同工。
具体怎么做呢?
一篇文章,确实有点过长了,如此操作起来,复杂程度很高,出错的概率也大。
于是,牛郎首先想对文章进行分组。
按段落来分组可以吗?这样最自然,但是,并不适合加密。牛郎想到的是按字数分组。
不管当前的句子含义,只要到了100个字,那么,就划一道线,分出来一个小组。
如此依赖,可以保证每个组,都有100个字,当然,包括标点符号的。
不过,最后一个小组,一般来说,是不会正好100个字的。这就需要数据补齐。
全部用0填充可以么?也可以,但是这样,可能会比较容易破解,很可能导致“钥匙”被反推出来。
那么,就用随机填充吧。
当然,这里为了避免阅读误解,牛郎约定,随机填充部分以井号开头,并且都用标点符号与特殊字符,避免被误认为是正文。
分组、填充,这两步完成了,那接下来,就是重头戏了:加密。
分别对每个组进行加密,每个分组构成一个段落,最后拼接起来,就是最终的结果。
首先,牛郎取出来第一个分组,进行加密处理。
牛郎先将每个字转换为它在字典中的索引值,这样,文字就全部变成数字了。
先从简单的来,将10位的钥匙,重复10次,刚好就是100位了,写在每个索引值的下方。
然后,两者加起来,得到一个新的索引值。这里大家不要忘了,索引是26进制的,可千万不要搞混了。
第一次加密过程结束,但这样,加密其实还是不够稳妥的。
对于每个分组,可能要进行十几次的加密,才能保证其安全性,同时也保证钥匙不能被反向推断出来。
第二次加密要怎么做呢?必然不能跟第一次一样,如果一样的话,只是相当于换了个钥匙而已,并没有增加安全性。
因此,需要变换一点花样。变换花样,还不容易么?先写下这十位钥匙,然后再逆序写下来,凑成20位。
接着,把这20位重复5次,又是100位,再求和……
类似的方式变换了几次后,牛郎为了提高安全性,又想出来一个新方法:
100个字,其实可以划分为10行10列,如此就成了一个方阵。
用方阵与钥匙进行运算,应该会更有趣吧?得到的结果应该也会更乱吧?
如此一来,加法就显得没意思了,该乘法出马了。
是不是有点疑惑了?一个方阵,乘法要怎么计算呢?
而且,需要说的是,不仅是要能计算乘法,还需要该方法可逆,在解密时能够被逆向运算出来。
当然,也没那么复杂了。
方阵是10行10列,而我们的秘钥,是一个10位的数字,可以认为是10列。
这样就可以有一个简单的算法了:
方阵的第一行,每个数字乘以钥匙的第一列的数字,得到的数字组成新方阵的第一行。
方阵的第二行则乘以钥匙第二列的数字,以此类推……
不过,有个特别需要注意的点,那就是,0不可以做除数的。
乘法的逆运算是除法,也就是说,钥匙中某一位如果是0的话,那么,没法通过触发逆运算回来。
处理的方案,也很简单,数一下钥匙中有几个0,然后把0替换为这个数字,就可以了。
当然,乘法产生的结果会很大,很容易就会超出字典的索引范围。这怎么办呢?
不好意思,这可就没得办了……
牛郎也想过循环索引,比如字典只有10个数字的话,那么索引12就相当于2。
但这样会造成逆运算非常麻烦,因为没法知道哪个文字是循环了一圈之后的。
但是直接用索引的话,这个传递起来也不方便呀。
牛郎一想,反正加密后的内容本来就是一堆胡乱的文字了,再乱一点也无妨了。
那么,循环了几次,就在文字前面写上个对应的数字吧。
比如一个索引很大,循环字典两遍后,得到“个”字,那么就协作“2个”。
如此一来,一段100字的分组,原来加密后还是100个字,只是有些字前面多了个数字而已。
这最后一步,拼接,倒是没有什么技术含量,把之前的分组一个个罗列出来,每个作为信件的一段就好了。
如此,一套加密过程完全结束。
而解密过程,只要有钥匙,按照加密流程反向计算,就能得到原来的内容了。
牛郎把整个加密过程详细描述了出来,然后,又挑出其中一部分文字,按上面的方法进行加密,将密文附在信件末尾。
“有了这封信,织女应该能轻松理解这个加密方法了吧?”牛郎自言自语。
这个方法,牛郎自以为还是很高端的,是不是应该称为“高级加密算法”?
不,“算法”这个词,还是有点简陋的,这么厉害的东西,应该可以称之为“标准”了。
那就叫做“高级加密标准”吧,简称的话,牛郎随便选取了几个字母,那就简称AES了。
AES加密方法,通过“分组-填充-加密-拼接”的方式,将原文通过钥匙加密为密文,从而保证信息安全性。
当然,这里,既然是“加密方法的钥匙”,不如直接简称为“秘钥”吧。
牛郎将信件发给织女,同时也提出了关于十位数字“秘钥”的构建策略。
织女冰雪聪明,很快明白了AES加密方法,但她却先否定了牛郎的“秘钥”策略。
“你和我所共同知晓,且绝对隐秘的信息,是有限的。现在加密方法不稳定,贸然动用这些信息是极大的浪费,很容易被王母破解。”
“或许,我们前期,应该先搞一个‘秘钥交换’的方法。”
- 版权说明:
文章内容系作者原创,转载请注明出处。 - 封面图片:
百度图片-AES图片
图片源自网络,如有侵权,可联系作者删除。 - 拓展资料:
百度百科-秘钥
百度百科-AES加密
百度百科-密码强度
百度百科-矩阵乘法
百度百科-暴力破解