七夕缘起-第5.1章-数据加密的尝试

七夕缘起-第5.1章-数据加密的尝试

01
有了“小沙同学”的帮助,牛郎与织女有了安全高效的校验机制。
似乎是已经“万事俱备,只欠东风”——加密策略了。
只要有了一种绝对安全的加密策略,就能绕过王母,与织女秘密沟通见面时间了。

这可让牛郎犯了难:如何保证一个加密的方式,是绝对安全的呢?
现在是“王母在暗处,牛郎在明处”,只要王母保持低调,牛郎就不可能知道王母是否破译了自己的加密信息。
而且,最头疼的是,为了确保织女能够解密,自己总要把解密方式告诉织女的,王母肯定中途会窃听的。

这就是牛郎所面临的最大挑战:“在众目睽睽之下,实现安全的加密通信。”

不去开始,就永远不会有开始。虽然这事情看起来不可能,但是牛郎还是不得不尝试一下。
牛郎现在也没什么思路,那就从最简单的加密方式开始吧。

天街小雨润如酥,气吞万里如虎;
不教胡马度阴山,错向槐安回首。

藏头诗,“天气不错”。牛郎感觉,自己都想给自己磕个头,太牛了。
也算是闲谈吧,牛郎赶紧将其发给织女。
织女也给出了自己的见解:“最有名的刺客,反而是无名的。”


02
牛郎并没有直接认同,而是创造性地提出了另一个观点:“最有名的刺客,就是有名的。”
不知为什么,牛郎脑海中,竟然闪过一个词:“怪盗基德”。
“优秀的刺客,应该每次都能成功刺杀目标并离开,让人明知是其所为却就是没办法防范。”

“加密方法应该也是一样,应该让人明知用了什么方法,但就是无法解密。”
“对于加密方法的保密,我们无法证明其安全性,毕竟只有你我使用了,我们总有想不到的地方。”
“但一种被所有人公认的加密方法,它必然经过了无数次攻防的洗礼,安全性肯定是不言而喻的。”
“因此,我们要想一种方法,将方法公开出去,但除了接收方外,其他人无法窥探数据内容。”

织女看到牛郎的回复后,大为赞叹,提出了自己的疑惑:“这样的方法,真的存在吗?”
牛郎给出了肯定的回答:“一定存在的。”
“还记得数据校验时,我们引入了‘见面日期’这个因素,作为最后两位的校验值吗?”
“加密应该也是类似的道理,但是我们要想办法,将‘见面日期’这个因素无限放大。”
“最终构建一把锁,而‘见面日期’就是解开这把锁的钥匙。”

“当然,后面锁和钥匙都是可以更换的。”
“只要锁的原理我们构思好了,甚至任何人都可以用这个方法,创建自己的锁与钥匙。”


03
其实牛郎也想到了,‘见面日期’是及其不安全的。
因为,王母完全可以猜到前面几位的。年份,还用猜吗?
月份,想想应该也容易吧?虽然一年有12个月,但是调查一下,锁定在3个月范围内,没问题吧?
日子,可能确实比较隐私,难以直接猜到。但一个月按30天算,加上上面月份的猜测,也就3x30=90种情况,就可以得到“钥匙”。
也就是说,这把“钥匙”现在并不安全,这也是牛郎提出“允许更换锁和钥匙”的初衷。

当然,现在连加密方法都没有,钥匙的安全问题,可以暂且不提。
现在的问题是,如何用8个数字的“见面日期”,去对一整篇的信件进行加密呢?
文字与数字结合的话,牛郎瞬间想到了:字典。

接着,牛郎又想到了一个简单的加密方法:加一加密法。
将每个字转换为索引值,然后都加上1成为新的索引,接着将新索引对应的文字写下来。
此时,整篇文章变得“语言不通”,无人能直接读懂。
但如果通过“减一”来解密一下,就能得到真正的内容了。

如果将这个“加一”,变成“加上见面日期”,当然,年月日有点过大了,可以先只加上最后两位“日子”。
这样,别人不知道牛郎和织女是几号见面的,短时间自然无法准确解密出内容。当然,题外话,这里也只是“短时间”而已。
于是,最简单的加密方式出现了:通过两位数字,对整篇内容进行加密。


04
回过头来,这里说“短时间无法准确解密”,那么意味着,王母如果花费一定的时间,还是可以解密的。
因为见面日期的具体日子,只可能是1到31之间的数字。
将每个数字都尝试一遍,最后选出一篇读起来通顺的文章,基本就是加密前的原文了。

为此,牛郎想到了一个描述方法:加密强度。
因为加密方法是公开的,理论上只要时间足够,总可以有办法穷举所有可能的。
但是,自己要与织女约定见面时间,按天书契约,需要一年内见面一次。
换句话说,只要自己能设计出一种方案,以王母的资源,在一年内无法破解,那么,这个加密强度就是足够的。

现在这个“加一加密法”的变体,对于王母来说,穷举31种情况,也就几分钟的事情,肯定是不行的。
于是,首先需要搞定的,就是,需要多强的加密强度?

牛郎推算了一下,每次解密,都需要施展仙术,自己现在的水平,大概在1分钟左右。
假定王母及其手下都是仙术高手,乐观估计1秒钟,应该可以吧?
1小时是3600秒,1天是24x3600秒,1年约是365x24x3600秒,为3153.6万秒。
听闻天庭有10万天兵,全部参与的话,是10万x3153.6万,约等于3亿。

也就是说,针对目前的情况,只要加密算法在3亿次尝试之内无法被解密,那么,就可以认为它是安全的。
也就是纯数字钥匙的话,必须是3亿以上的数字。
当然,为了保证安全性,可能需要十亿或者百亿以上的数字。


05
为了安全性,钥匙先暂定用百亿以上的数字吧。百亿,刚好十位数,还是比较凑整的。
那么,这十位数应该怎么生成呢?这难不倒牛郎,只要用一些只有自己和织女知道的信息,来拼凑每一位就可以了。
当然,现在的加密方法并不是非常明晰,因此,牛郎还不想浪费一把“钥匙”。
为了前期测试方便,牛郎还是先用了“见面日期”,年月日一共8位,后面两位用0补齐吧,作为一把临时用的“测试钥匙”。

现在有了钥匙,到了创造“锁”的步骤了。
之前的“加一加密法”,可能就有些不太适用了,但是也不至于完全废弃,新的加密方法,也与之异曲同工。
具体怎么做呢?
一篇文章,确实有点过长了,如此操作起来,复杂程度很高,出错的概率也大。
于是,牛郎首先想对文章进行分组。

按段落来分组可以吗?这样最自然,但是,并不适合加密。牛郎想到的是按字数分组。
不管当前的句子含义,只要到了100个字,那么,就划一道线,分出来一个小组。
如此依赖,可以保证每个组,都有100个字,当然,包括标点符号的。

不过,最后一个小组,一般来说,是不会正好100个字的。这就需要数据补齐。
全部用0填充可以么?也可以,但是这样,可能会比较容易破解,很可能导致“钥匙”被反推出来。
那么,就用随机填充吧。
当然,这里为了避免阅读误解,牛郎约定,随机填充部分以井号开头,并且都用标点符号与特殊字符,避免被误认为是正文。


06
分组、填充,这两步完成了,那接下来,就是重头戏了:加密。
分别对每个组进行加密,每个分组构成一个段落,最后拼接起来,就是最终的结果。

首先,牛郎取出来第一个分组,进行加密处理。
牛郎先将每个字转换为它在字典中的索引值,这样,文字就全部变成数字了。
先从简单的来,将10位的钥匙,重复10次,刚好就是100位了,写在每个索引值的下方。
然后,两者加起来,得到一个新的索引值。这里大家不要忘了,索引是26进制的,可千万不要搞混了。

第一次加密过程结束,但这样,加密其实还是不够稳妥的。
对于每个分组,可能要进行十几次的加密,才能保证其安全性,同时也保证钥匙不能被反向推断出来。
第二次加密要怎么做呢?必然不能跟第一次一样,如果一样的话,只是相当于换了个钥匙而已,并没有增加安全性。

因此,需要变换一点花样。变换花样,还不容易么?先写下这十位钥匙,然后再逆序写下来,凑成20位。
接着,把这20位重复5次,又是100位,再求和……
类似的方式变换了几次后,牛郎为了提高安全性,又想出来一个新方法:
100个字,其实可以划分为10行10列,如此就成了一个方阵。
用方阵与钥匙进行运算,应该会更有趣吧?得到的结果应该也会更乱吧?
如此一来,加法就显得没意思了,该乘法出马了。


07
是不是有点疑惑了?一个方阵,乘法要怎么计算呢?
而且,需要说的是,不仅是要能计算乘法,还需要该方法可逆,在解密时能够被逆向运算出来。
当然,也没那么复杂了。
方阵是10行10列,而我们的秘钥,是一个10位的数字,可以认为是10列。

这样就可以有一个简单的算法了:
方阵的第一行,每个数字乘以钥匙的第一列的数字,得到的数字组成新方阵的第一行。
方阵的第二行则乘以钥匙第二列的数字,以此类推……
不过,有个特别需要注意的点,那就是,0不可以做除数的。
乘法的逆运算是除法,也就是说,钥匙中某一位如果是0的话,那么,没法通过触发逆运算回来。

处理的方案,也很简单,数一下钥匙中有几个0,然后把0替换为这个数字,就可以了。
当然,乘法产生的结果会很大,很容易就会超出字典的索引范围。这怎么办呢?
不好意思,这可就没得办了……
牛郎也想过循环索引,比如字典只有10个数字的话,那么索引12就相当于2。
但这样会造成逆运算非常麻烦,因为没法知道哪个文字是循环了一圈之后的。

但是直接用索引的话,这个传递起来也不方便呀。
牛郎一想,反正加密后的内容本来就是一堆胡乱的文字了,再乱一点也无妨了。
那么,循环了几次,就在文字前面写上个对应的数字吧。
比如一个索引很大,循环字典两遍后,得到“个”字,那么就协作“2个”。
如此一来,一段100字的分组,原来加密后还是100个字,只是有些字前面多了个数字而已。


08
这最后一步,拼接,倒是没有什么技术含量,把之前的分组一个个罗列出来,每个作为信件的一段就好了。
如此,一套加密过程完全结束。
而解密过程,只要有钥匙,按照加密流程反向计算,就能得到原来的内容了。
牛郎把整个加密过程详细描述了出来,然后,又挑出其中一部分文字,按上面的方法进行加密,将密文附在信件末尾。
“有了这封信,织女应该能轻松理解这个加密方法了吧?”牛郎自言自语。

这个方法,牛郎自以为还是很高端的,是不是应该称为“高级加密算法”?
不,“算法”这个词,还是有点简陋的,这么厉害的东西,应该可以称之为“标准”了。
那就叫做“高级加密标准”吧,简称的话,牛郎随便选取了几个字母,那就简称AES了。

AES加密方法,通过“分组-填充-加密-拼接”的方式,将原文通过钥匙加密为密文,从而保证信息安全性。
当然,这里,既然是“加密方法的钥匙”,不如直接简称为“秘钥”吧。

牛郎将信件发给织女,同时也提出了关于十位数字“秘钥”的构建策略。
织女冰雪聪明,很快明白了AES加密方法,但她却先否定了牛郎的“秘钥”策略。
“你和我所共同知晓,且绝对隐秘的信息,是有限的。现在加密方法不稳定,贸然动用这些信息是极大的浪费,很容易被王母破解。”
“或许,我们前期,应该先搞一个‘秘钥交换’的方法。”


附录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容