充滿各類數學證實的密碼學是使人頭疼的,一聽到密碼、黑客、攻擊等詞的時候,就給人一種神祕又高大上的感受,但除非你真的從事密碼學相關工做,不然你並不須要對密碼學有多麼深入的理解。git
這是一篇適合在飯後的品茶時光中閱讀的文章,我們虛構一個故事來說解,雖然故事看起來很隨性,可是 HTTPS 也是這麼工做的。裏面有一些術語你也應該聽過,由於它們常常出如今技術文獻裏面。github
一天,一個男子到河邊抓魚給母親吃,而河岸的另外一頭是一大戶人家的小姐和她的丫環在散步。忽然,一個不當心,對面小姐不慎跌入水中,而丫環又不會游泳,這可把小丫環急的呀!!!正在抓魚的男子見此情況,來不及脫掉身上的衣物,就像箭同樣竄入水中.....想必看客已經猜到了,小姐被救起,男子抱着迷迷糊糊小姐走上岸的過程當中,小姐感受本身像觸電了同樣,以爲這個男人很安全,只要靠着他,就算天塌下來也不怕,而男子把小姐放下的那一刻,也很不捨,好像把她放下就失去了活下去的但願。瀏覽器
小姐回到家中,給父親大人說了這件事,父親很高興,就叫下人去把這位男子請到家中表示感謝,結果一問,這小夥幼年喪父,如今家中還有病弱的老母親,連一間屋子都沒有,一直和母親寄住在城外的破廟裏面,不過他畢竟救了本身的女兒,父親讓下人拿出了五十兩黃金以表謝意,但不容許他和小姐再有任何來往。安全
.....此處省略五千字。網絡
咱們姑且稱小姐爲小花,稱男子爲小明,他們不能相見了,可是又備受相思之苦,所以只能經過寫信的方式來傳達彼此的思念了。post
若是小花想給小明寫信,那麼她能夠把寫好的信讓信鴿給小明送去,小明也能夠經過信鴿給小花回信,這樣他們就能知道彼此的感情了。網站
可是很快這種方式出問題了,由於他們都隱約感受到收到的來信不是對方寫的,由於從信件上看,雙方都表示再也不喜歡彼此。憑藉着對彼此的信任,他們才知道是小花的父親從中阻撓他們。每次他們寫的信都被父親的下人攔下了,而後換上他們事先準備好的信件,目的就是爲了讓小花和小明斷了感情。加密
HTTP 就是這樣的工做方式。code
小花是博冠古今的人,這怎麼能難倒她呢。他們彼此約定,每次寫信都加上密碼,讓信鴿傳送的信件是用密文書寫的。他們約定的密碼是把每一個字母的位置向後移動三位,好比 A → D 、 B → E ,若是他們要給對方寫一句 "I love you" ,那麼實際上信件上面寫的就是 "L oryh brx" 。如今就算父親把信件攔截了,他也不知道里面的內容是什麼,並且也沒辦法修改成有效的內容,由於他不知道密碼,如今小花和小明又能給對方寫情書了。數學
這就是對稱加密,由於若是你知道如何加密信息,那也能知道如何解密信息。上面所說的加密常稱爲凱撒密碼,在現實生活中,咱們使用的密碼確定會更復雜,可是主要思想是同樣的。
顯然對稱加密是比較安全的(只有兩我的知道密碼的狀況下)。在凱撒密碼中,密碼一般是偏移指定位數的字母,咱們使用的是偏移三位。
可能你已經發現問題了,在小花和小明開始寫信以前,他們就已經沒辦法相見了,那他們怎麼肯定密鑰呢,若是一開始經過信鴿告訴對方密鑰,那父親就能把信鴿攔下,也能知道他們的密鑰,那麼父親也就能夠查看他們信件的內容,同時也能修改信件了。
這就是典型的中間人攻擊,惟一能解決這個問題的辦法就是改變現有的加密方式。
小花想出了更好的辦法,當小花想給小明寫情書的時候,她將會按照下面的步驟來進行:
使用這種方式,父親大人就沒辦法攔截信鴿了,由於他沒有箱子的鑰匙。一樣若是小明想給小花寫情書,也採用這種方式。
這就是非對稱加密,之因此稱之爲非對稱加密,是由於即便你能加密信息(鎖箱子),可是你卻沒法解密信息(開箱子),由於箱子的鑰匙在對方那裏。在技術領域,把這裏的箱子稱做公鑰,把鑰匙稱做私鑰。
細心的你可能發現問題了,當小明收到箱子後,他如何肯定這個箱子的主人是誰呢,由於父親也可讓信鴿帶箱子給小明啊,因此父親若是想知道他們的信件內容,那隻須要把箱子偷換掉就行了。
小花決定在箱子上面簽上本身的名字,由於筆跡是不能模仿的,這樣父親就沒辦法僞造箱子了。可是依舊有問題,小花和小明在不能相見以前並無見過彼此寫的字,那麼小明又如何識別出小花的字跡呢?因此他們的解決辦法是,找張三丰替小花簽名。
衆所周知,張三丰是當世的得道高人,他的品德是世人都承認的,你們都把他奉爲聖人,並且天下確定不止一對有情人遇到小花和小紅這樣的問題。張三丰只會爲合法居民簽名。
張三丰會在小花的盒子上簽名,前提是他肯定了要簽名的是小花。因此父親大人是沒法獲得張三丰表明小花簽名的盒子,不然小明就會知道這是一個騙局,由於張三丰只在驗證了人們的身份後纔會表明他們給盒子簽名。
張三丰在技術領域的角色就是認證機構,你如今閱讀這篇文章所使用的瀏覽器是附帶了各類認證機構的簽名的。因此當你第一次訪問某個網站時,你相信這不是一個釣魚網站,是由於你相信第三方認證機構,由於他們告訴你這個箱子是合法的。
雖然如今小花和小明有了一個可靠的通訊系統,可是信鴿帶個箱子飛的慢啊,熱戀中的人是「一日不見如隔三秋」,信鴿飛慢了怎麼行呢。
因此他們決定仍是採用對稱加密的方式來寫情書,可是對稱加密的密鑰要用箱子來傳遞,也就是用非對稱加密方式來傳遞對稱加密密鑰,這樣就能夠同時得到對稱加密和非對稱加密的優勢了,還能避免彼此的缺點。
須要注意的是,在網絡世界中,信息不會像鴿子傳送的那麼慢,只不過只用非對稱加密技術加密信息要比對稱加密慢,因此只用它來交換密鑰。
以上就是 HTTPS 的工做過程。
這個故事你可能早就知道了,我只是在寫文章的過程當中忽然想起了它,就是笛卡爾的愛情故事。
具體細節你能夠網上去查,笛卡爾天天給本身喜歡的公主寫信,可是信都被國王攔截了,笛卡爾給公主寫的第十三封信中只有一個數學方程,可是這個方程國王看不懂,因此就把這封信交給了公主,公主一看方程,馬上着手把方程的圖形畫了出來,發現這是一顆心的形狀。
參考內容:https://medium.freecodecamp.org/https-explained-with-carrier-pigeons-7029d2193351