七夕缘起-第5.3章-非对称加密探索

七夕缘起-第5.3章-非对称加密探索

01
经过了几次加密的尝试后,牛郎终于明白,加密很重要,同时,也需要一种认证机制。
如何才能将加密与认证融为一体呢?
牛郎想到了之前的“散列算法”,这个方式可以融入一些认证因素,但是,还不够强。
从原则上讲,能解密信息的人,一定就应该是我们指定的接收人才对。

但是,事实并非如此。前面尝试过的“AES加密方法”,是完全依赖与秘钥的。
整个过程只有一个秘钥,多人使用一个秘钥,一旦有人秘钥不慎将丢失,那么,拿到秘钥的人就能解密信息了。
而且,最让人头疼的时,让两个人都拿到这个相同的秘钥,本身就是个麻烦事。
好不容易想出来了“秘钥交换策略”,却因为无法认证身份,从而有“中间人攻击”的漏洞。

那么,怎样才能安全地加密呢?
按上面总结的几个点,可能还是要从“秘钥”上做文章。
既然两人或多人都知道秘钥,会增加泄露风险,那能否只有一人知道秘钥?
既然“交换秘钥”存在风险,那能否不要有秘钥交换过程?

牛郎怎么想,都觉得不可能呀,解密,必然要用到加密时的秘钥啊。
只有一个人知道秘钥,而且不与对方交换,那么,接收方就不知道秘钥,该怎么解密信息呢?
突然,牛郎灵机一动:
除非……加密和解密使用的秘钥不同!


02
试想一下,如果加密、解密使用的秘钥不同的话,那么,确实就不需要秘钥传递过程了。
比如说,牛郎要给织女传递信息,织女只要妥善保存好“解密秘钥”就足够了,这个根本也不需要告诉牛郎。
而“加密秘钥”则公开出去,牛郎可以用它加密,别人也可用用它加密,但大家都没有织女的“解密秘钥”,无法解密出原文。
由于自始至终,“解密秘钥”都是织女自己保管,从未进行过传递,因此理论上可以保证其安全性。
这好像是一个相对完美的方案。

当然,大家应该也想到了,既然“加密秘钥”被公开了出去,那么任何人都可以给织女发送加密信息。
怎么知道,发送者,一定是牛郎呢?

这里,还是要从秘钥方面入手,“加密秘钥”与“解密秘钥”要能够互换。怎么说呢?
我们把织女手中那个从未公开的秘钥,暂且成为“私钥”,而把她公之于众的秘钥称为“公钥”。
现在的情况是,用“公钥”加密,用“私钥”解密。
我们希望是,如果织女反过来用“私钥”加密的话,那么用“公钥”也能够成功解密。
也就是两把钥匙,用一把加密的话,就必须且只能用另一把解密。

这样能解决什么问题呢?
因为刚才提到了,“私钥”从未公开过,因此只有织女一人知道。
那么,如果出现了一段信息,可以用“公钥”解密,那么就可以断定,这段信息一定是织女发送的。
因为“公钥”可以解密意味着只能是“私钥”加密的,而拥有“私钥”的,只有织女一人。
不过大家都有“公钥”,因此这加密的信息相当于明文,但却足以发送者身份。


03
怎么样,综合一下,是不是就有一种集身份验证、密钥安全于一体的加密方式了呢?
先不说这个加密方法该怎么实现,单从理论上说,是的。

织女保存自己的“织女私钥”,对外公布“织女公钥”。
牛郎保存自己的“牛郎私钥”,对外公布“牛郎公钥”。
牛郎给织女发消息时,先用“织女公钥”加密,然后将加密后的信息,用自己的“牛郎私钥”再次加密。
接着就可以发送出去了。

织女和监听者们都会收到这个消息。
由于“牛郎公钥”是公开的,大家发现可以用这个公钥解密出内容,因此可以确认这一定是手中有“牛郎私钥”的牛郎发送的。
虽然所有人都知道这来自牛郎,也解密出了内容,但刚才说了,这内容是被“织女公钥”加密过的。
此时,只有织女手中的“织女私钥”,才能解密出最终的信息。而监听者们却无能为力。

同理,织女给牛郎发送信息时,也是一样的策略,经过两次加密,既确认了身份,又保证了信息安全。

当然,理论上可行的东西,真正实践起来,总是困难重重。
首先,该怎么去设计这种神奇的加密方法呢?
其次,既然“公钥”与“私钥”可以互相加解密,那么,它们之间必然存在着某种数学上的联系,
如何确保外界知道“公钥”前提下,无法猜测或者推算出“私钥”呢?


04
那么,接下来的问题,又是一个数学问题了。
牛郎再次翻遍数学典籍,在一本《数论》的典籍中,终于找到了一条重要思路:
寻找两个大素数比较简单,而将它们的乘积进行因式分解却极其困难。

接下来的过程,可能有点烧脑(这里“”表示乘法,“/”表示除法):
1.选择两个不同的素数p和q,计算n=p
q,m=(p-1)*(q-1)。
2.随便选择一个比p和q都大,但比n小的数e,这就是我们的“公钥”了。

是不是不难?接下来要用数学方法计算私钥:
私钥d=(km+1)/e,其中m、e就是上面1、2两步提到的数字。
既然是除法,则可能会有余数,而私钥d是个整数,这怎么办呢?
k的作用就发挥出来了,让k=1,2,3,……一直尝试,总会有一个k,可以得到整数私钥d的。

我们需要的,是公开信息n和e,而秘密保存d。其他的p、q、n、m、k,统统销毁掉,不要让任何人知道。

第一个问题,私钥d是安全的吗?
理论上,是的。因为d从未传递过,而且,通过公开的n和e,要推算出d,几乎是不可能的。
既然知道n是p*q的结果,那能通过n反推p和q吗?
基本不可能,因为目前没有快速的质数因数分解方法,而逐个尝试的话,计算量是可怕的。
当n足够大时,这其中的计算量,可能需要几年时间,这完全可以认为是安全的了。


05
这里为了描述方便,称上面公开的n为“公开信息”,称e为“公钥”,d为“私钥”。
我们设原文为m,加密后的密文为c,求余运算用%表示,那么:
加密过程c=(m^e)%n,
解密过程m=(c^d)%n。

可能你已经发现了,这个方法,只能用来加密数字,而且数字必须要比n小。
由于需要足够的加密强度,牛郎的p和q都取了十位数,那么n是个接近20位的数字,一般数字都会比它小。
这并不难,因为之前牛郎已经设计了字典,每个字在字典中的索引,都可以表示为数字。

一切准备就绪,是不是可以开始了呢?
是的。但是也要考虑,牛郎现在要将加密思路给织女讲一遍,这个是可能被王母窃听的。
所以,需要提前做一点准备。

牛郎先是个织女发了一封“公开的”私信,内容很简单:“静观其变”。
接着,

牛郎用之前的随机算法,加上“费马小定理”,得到了长度为一百位的素数p和q。
对,你没看错,牛郎想要绝对的安全,所以花了3天时间,真的找到了两个一百位长的素数。
接着,牛郎计算出了公开信息n和公钥e,将这两者通过喜鹊网络,广播了出去。
没错,就是广播,所有人都会收到的那种,包括王母:
牛郎
n
e

只有短短的三行,一行文字,两行数字。
最后,牛郎又给织女发了一封“公开的”私信:“静观其变”。


06
织女没有回复。三天以后,牛郎的两行数字到底代表什么,众说纷纭,整个天庭里传的沸沸扬扬。
而也有一些打探到小道消息的人,说牛郎给织女发过“静观其变”,很可能这个专门做给王母看的,想引诱王母出手。
但具体想要王母出手做什么呢?没人能猜得到。

其实,牛郎的目的,已经达到一半了。
虽然现在没有人知道自己的加密算法,但自己的公钥已经是众人皆知,无法被篡改的了。
换句话说,牛郎出其不意地让织女拿到了“绝对是来自牛郎的公钥”,规避了王母冒充自己的风险。
而且,织女只要用这个公钥加密,信息就只有牛郎能够解密,这就保证了安全。

但是很可惜,目前算法只有自己知道,所以自己才可以再众人毫不知情状态下发送广播。
一旦算法公开,很可能下一个人也会广播:织女 n e ,
只是,这个信息,真的是来自织女还是其他人伪造的,就不得而知了。

所以说,我们,算是成功了一半。

怎么才能在王母毫无反应的情况下,拿到织女的公钥呢?
这个已经超出数学领域了,可能需要一点心理学上的技巧。
于是牛郎修书一封:

织女:
我已找到了万全的加密方法,此法仅你能解。
全网广播就是为了气气王母,让她什么都知道却就是解不出来。
第一行是两个素数的积,而这两个素数都不大于第二行的数字。
这两个素数的最后两位,就是约定见面的日期。
盼十天之内回复。


07
可想而知,织女收到了信件,而王母自然也监听到了一份备份。

王母看了信件,明白牛郎织女的通信可能进入最后日期的沟通阶段了。
但这牛郎很嚣张呀,这么简单的事情,还能难得到我王母?
既然这样,这牛郎是不是有什么“话外之音”要传递?
万一牛郎明面上是说这个,实际上在偷偷暗示织女另一个时间,该怎么办?
于是王母赶紧找来语言分析师深入分析。

一群专家讨论了一天,并没发现什么特别之处,都是瞎猜。
这时,有人提出:
“最危险的地方就是最安全的地方,万一牛郎就是利用了王母您的多疑,然后真的就与织女定了这个时间呢?”

王母沉思,觉得也有可能。这样的话,先求出这两个素数,看看最后两位是什么。
很可能秘密就在其中。
王母赶紧召集自己的部下:“巴戈,解密这事就交个你了,明天告诉我结果。”

大将巴戈领旨后,觉得不难,随便派了几个部下计算。结果,第二天,竟然还没算出来。
巴戈急了,赶紧命令麾下所有将士一起计算,务必完成王母任务。

可惜,还是失败了。夜里,巴戈垂头丧气地向王母汇报:“属下无能,属下求不出来。”
王母这才意识到问题的严重性,看来,很可能牛郎真的用了这两个素数。
突然,王母一拍桌子:“坏了,牛郎大概利用了我的大意,想打时间差,十天可能是个幌子。”


08
接着,王母有镇定下来:
“牛郎啊牛郎”王母自言自语,“你这题目虽难,但天庭人才辈出,可不是吃素的。”
“传令,召集天庭数学专家,争取3天之内解决问题!”
“就算织女再快,也终究是一个人,不可能超过我这一群专家的。”

专家们整整想了3天,并无找到解决方案。
最终,专家们只得派代表想王母请罪:“王母息怒,臣等无法解答。”
这让王母怎么息怒:“一群废物!这都五天过去了,都让你们耽误了!”
数学专家说:“虽然我们解不出来,但是我们可以肯定,织女也解不出来。”
王母满是疑惑:“为什么?”
“因为,质因数分解只能逐个试商,就算集合整个天庭之力,也至少要计算百年。”

王母再次拍桌子:“既然是无解的问题,你们怎么不早说!”
“那您也没早问呀……”
忽然大殿之外传来喊声:“报——”
一名探子快步走入堂前,呈上文书:“下午织女发起了全网广播,怕是牛郎也已经收到了。”
王母打开文书,只见上面写着:

牛郎:
我思索3天自认为算不出来,你既来信,必有解答之法。
我按你的格式,将日期藏在质数后两位,并计算得到了2个数字 n e,
现在换你来求解日期了呢~

王母不甘心,同时也觉得牛郎不可能比自己的专家都厉害。
王母把新的文书扔给专家代表:“再给你们三天,解不出来就不用回来了。”


附录

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

推荐阅读更多精彩内容

  • 有了“小沙同学”的帮助,牛郎与织女有了安全高效的校验机制。似乎是已经“万事俱备,只欠东风”——加密策略了。只要有了...
    七色瑾林阅读 167评论 0 3
  • 一、什么是对称加密技术? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥。信息接收双方都需...
    Djbfifjd阅读 1,881评论 2 8
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,032评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,870评论 0 2