$$ 01 $$
目前雖然有了不錯(cuò)的加密方法,但這秘鑰,確實(shí)還是個(gè)難題。
而且,同一個(gè)秘鑰,使用的時(shí)間也不能太長,否則一旦被破解出來,那么通信就會變得很不安全。
現(xiàn)在,牛郎需要想一種能夠快速安全交換秘鑰的方式。
·
這個(gè)的難點(diǎn)在于,目前要盡量避免使用隱私信息。
現(xiàn)在牛郎織女不能見面,兩人共同知曉的隱秘信息終是有限的,用一個(gè)少一個(gè),所以,這些最好先留著,作為以后的“王牌”。
那么,如果使用現(xiàn)有的秘鑰,進(jìn)行加密傳遞呢?
也不行,那跟明文沒什么區(qū)別。
·
試想,一旦哪一天,這個(gè)舊的秘鑰泄露了或者被破解了出來,那么,王母就能順藤摸瓜,得到新的秘鑰值。
尤其是現(xiàn)在加密方法剛剛是初級階段,目前只有一個(gè)“見面日期”的秘鑰,破解難度自然沒有那么高,簡直就是明文。
所以說,這個(gè)新的秘鑰,還不能依賴現(xiàn)有的秘鑰,也就是“絕對獨(dú)立”的。
而且,加密和解密需要相同的秘鑰,這就是牛郎目前最大的挑戰(zhàn)了:
·
如何在全程明文傳輸?shù)那闆r下,(剛才說了,加密沒有意義),
讓雙方得到相同的秘鑰,但其他人卻不知道該秘鑰。
·
很顯然,由一方傳遞給另一方,顯然是行不通的了,這樣途中所有的監(jiān)聽者都會知道秘鑰。
是不是覺得“比登天還難”了?既然都全程明文了,還怎么讓別人“不知道”?
·
----
$$ 02 $$
不過,仔細(xì)想一想,好像還真是有可能的。
畢竟,我們并不需要像寫加密信件一樣傳遞太多信息。
要做的,僅僅是需要雙方拿到一個(gè)秘鑰而已,再直白一點(diǎn),那就是個(gè)長度為十位的自然數(shù)罷了。
·
像個(gè)辦法,讓雙方得到一個(gè)相同的十位數(shù),很難么?不難。
那如何在不使用隱秘信息的情況下,讓別人不知道呢?
這個(gè)么,其實(shí)也是有可能做到的。
想想之前加密時(shí),提到的“加密強(qiáng)度”:
“按目前王母的實(shí)力,只要加密算法在3億次嘗試之內(nèi)無法被解密,那么,就可以認(rèn)為它是安全的?!?p> ·
也就是說,如果能有一種方式,將運(yùn)算差異化,讓雙方能夠快速計(jì)算出結(jié)果,
但是其他人則需要超過3億以上次運(yùn)算,那么,就可以實(shí)現(xiàn)安全的秘鑰交換。
當(dāng)然,這樣,就不是簡單的加密領(lǐng)域了,而是,需要去想一些數(shù)學(xué)方法。
·
牛郎在喜鵲仙子的幫助下,翻閱了古往今來數(shù)學(xué)領(lǐng)域的各種著作,突然發(fā)現(xiàn)了一種相對單向的運(yùn)算:
計(jì)算一個(gè)數(shù)的乘方,是有速算方法的,但是,反過來求其逆運(yùn)算,基本沒有速算方式。
·
舉個(gè)例子,計(jì)算2的4次方,正常是4次乘法,2x2x2x2=16,
但其實(shí)它等價(jià)與2的平方的平方,2x2=4,4x4=16,只要2次乘法就能算出來。
但如果想計(jì)算2的幾次方等于16,那么要16不斷除以2直到值為1,然后看除了幾次,
即16/2=8,8/2=4,4/2=2,2/2=1,需要4次除法運(yùn)算,是基本沒有優(yōu)化空間的。
看來,這應(yīng)該就是本次秘鑰交換的核心了。
·
----
$$ 03 $$
只要能找到一種數(shù)學(xué)方法,形成算法上的隔離,
讓自己和織女能通過乘方速算法計(jì)算秘鑰,而監(jiān)聽者們只能通過乘方逆運(yùn)算或者枚舉求解,
當(dāng)兩者的計(jì)算量的差距足夠大時(shí),那么就可以認(rèn)為拿到了一個(gè)相對安全的秘鑰。
·
唉,這個(gè)乘方的逆運(yùn)算,叫起來太不順口了,反正都是對數(shù)字的運(yùn)算,要不就簡稱“對數(shù)”計(jì)算吧。
現(xiàn)在,算法的思想有了,接下來又出現(xiàn)了另一個(gè)難點(diǎn):怎么去形成這種算法生的隔離呢?
·
如果所有人拿到的信息都一樣,那么所有人肯定可以用相同的算法去計(jì)算,所以,必然要?jiǎng)?chuàng)造信息上的差異。
讓自己和織女的信息,能夠用乘方速算,但其他監(jiān)聽者,卻只能用較慢的對數(shù)計(jì)算。
只是,要引入信息差異,但還不能引入雙方都知道的隱私信息,這改怎么辦?
·
哈哈,既然“雙方都知道的信息”很有限,不能隨便用,那“僅有單方知道的信息”,應(yīng)該是近乎無限的吧?
比如說,引入“只有牛郎知道的信息”,讓織女不知道該信息也能算出秘鑰,但其他人卻不行。
但是,這可能嗎?
·
這確實(shí)有可能,因?yàn)榭椗小爸挥锌椗赖男畔ⅰ?,也就是牛郎織女比其他監(jiān)聽者知道的多。
只要像個(gè)辦法,讓“只有單方面知道的信息”,即參與了運(yùn)算,又能互相湮滅,就足夠了。
而中間的監(jiān)聽者,因?yàn)椴恢离p方信息湮滅后的產(chǎn)物,要計(jì)算秘鑰,或者反推雙方的信息,還是很有難度的。
那么,這就是個(gè)數(shù)學(xué)上要處理的問題了。
·
----
$$ 04 $$
具體要怎么處理呢?該回到剛才我們說的“乘方運(yùn)算”了。
比如牛郎想到一個(gè)數(shù)3,織女想到一個(gè)數(shù)4,互不告訴對方。
約定以2位底數(shù)算乘方,牛郎得到2^3=8,織女得到2^4=16,把這個(gè)數(shù)告訴對方。
此時(shí),織女無需知道牛郎想到的是幾,只要計(jì)算8^4=4096,而牛郎也只需要計(jì)算16^3=4096。
由此,雙方不需要知道對方的數(shù)字,卻可以拿到相同的秘鑰:4096。
·
讓我們看看,王母安排的監(jiān)聽者們,會得到哪些信息:雙方約定的底數(shù)2,牛郎發(fā)送的8,織女發(fā)送的16。
因?yàn)橹挥羞@3個(gè)數(shù)在途中傳遞了,其他信息沒有被傳遞,監(jiān)聽者是不知道的。
那么,這些監(jiān)聽者們,能通過已知的這3個(gè)數(shù),得到秘鑰4096嗎?
·
答案是“能”。
因?yàn)?,知道底?shù)2,知道牛郎發(fā)送的數(shù)字8,那么,2的幾次方是8呢?
這個(gè)很容易計(jì)算,因此他們完全可以反推出,牛郎想到的數(shù)字,是3。
同理,他們也能反推出,織女想到的數(shù)字是4。
·
那這個(gè)方法有什么用?
重點(diǎn)來了,剛才監(jiān)聽者們反推牛郎織女的數(shù)字,是需要時(shí)間計(jì)算的。
我們提供,對數(shù)運(yùn)算基本沒有優(yōu)化空間,所以要得到3和4,他們至少需要3+4=7次計(jì)算。
這就是監(jiān)聽者比牛郎織女多做的事情,怎么樣,有思路了吧?