@Rio 的故事雖然生動,但是是有錯誤的。透過TLS加密通訊,一旦會話初始化完成,想要完成中間人攻擊是非常困難的。TLS的中間人攻擊是針對加密會話的初始化階段進行的,而不是實際通訊的階段。加密通訊的初始化階段,需要透過非對稱密碼演算法來協商金鑰,然後用協商好的金鑰,使用對稱加密演算法進行實際的通訊。不知道各位有沒有見過一種鎖,當用鑰匙開啟這種鎖之後,鑰匙就可以拔出來了,剩下一個開著的鎖頭。拿著這個開著的鎖,沒有鑰匙,一旦鎖上了就開不了。這是現實生活這的一種非對稱加密的物件,能上鎖,但是不能開鎖。現在故事開始,假設我們回到了那個只能寄信的時代,大家都需要和知乎通訊,而且通訊的內容必須要保密。於是負責接收大家訊息的@顧惜朝 想出來一個辦法,找了很多把上面說的那種鎖(公鑰),都用鑰匙開啟,掛在外面。需要和知乎通訊的人,在通訊之前,需要擁有另外一把有兩個鑰匙的鎖(對稱加密演算法),然後把這把鎖和其中一把鑰匙(對稱金鑰),放進一個無法被破拆的鐵盒子裡面,用知乎提供的那把開著的鎖把鐵盒子鎖上。這時候,這個鐵盒子就無法打開了,除了擁有鑰匙的顧惜朝。這個裝有一把鎖和鑰匙的鐵盒子,可以放心地交到任何一個人手上,然後讓他拿去給顧惜朝。顧惜朝拿到這個鐵盒子之後,加密通訊會話就建立了。她就會用鑰匙開啟鐵盒子,取出鎖和鑰匙,寫下“親愛的知乎使用者,你好,我是顧惜朝”小紙條,放進鐵盒子裡,然後用你提供的鎖把鐵盒子鎖上,然後交回到你的手上。這個時候,鐵盒子被你提供的鎖鎖上了,除了你和顧惜朝,沒有別人有鑰匙能夠開啟這個鐵盒子,鐵盒子也就可以安全地經過郵遞送到你的手上;你收到鐵盒子之後,用你自己的鑰匙開啟鎖,讀鐵盒子裡面的訊息,然後放進新的小紙條,再寄送回去。以上是加密通訊的過程。接下來,別有用心的@匿名使用者 出現了,偷偷地換掉了幾個知乎開啟放在外面的鎖,並且自己充當了郵遞員的身份在外面晃悠。當你需要和知乎通訊的時候,匿名使用者遞給你一把他自己的鎖,騙你說這把是知乎掛在外面的鎖。當你把你自己的鎖和鑰匙放進去,然後交給匿名使用者,麻煩他把這些送給顧惜朝的時候,匿名使用者就可以找到另外一個鐵盒子,裝上自己的另外一把兩個鑰匙的鎖,用真正的知乎提供的鎖鎖上,然後寄給顧惜朝。我們辛勤的顧惜朝依然會正常的收到一個鐵盒子,裡面裝著一把鎖和一把鑰匙,只不過,這個鎖已經不是你的了,而是匿名使用者的,你的那把鎖實際上在匿名使用者手上。顧惜朝把“親愛的知乎使用者,你好,我是顧惜朝”的小紙條放進鐵盒,然後讓匿名使用者帶回去給你,而這個時候,匿名使用者就可以開啟這個小鐵盒,偷看你們之間的訊息,然後自己編造一條訊息,放進鐵盒裡面,然後傳回去給你。以上是中間人攻擊。為了避免中間人攻擊,我們聰明的顧惜朝,發明了一種神奇的、無法撕毀、塗改和變造的小紙條(數字簽名),上面寫著“這把鎖經過顧惜朝認證,是知乎加密通訊專用鎖”,然後在每一把知乎提供的鎖上貼上,這樣子匿名使用者就不能偽造鎖了,這時候這個鎖叫作證書。但是問題又來了,許多新來的知乎使用者不認識顧惜朝,他們怎麼知道顧惜朝就是可信的,她認證的鎖就是可用的?於是@黃繼新在這個小紙條的下方又貼了一個小紙條,“顧惜朝經過黃繼新的認證,可以對知乎加密通訊專用鎖進行認證”。黃繼新不僅可以認證鎖,還可以認證顧惜朝等管理員的權力,這時候黃繼新就是CA。可是問題還沒有解決,還是有很多知乎使用者不認識黃繼新,於是李開復又在黃繼新的小紙條上又貼了一個小紙條,“黃繼新經過李開復的認證,可以對知乎加密通訊專用鎖進行認證”。問題依然沒有解決,還是有人不認識李開復,於是這時候需要一個權威的、人們無條件相信的機構來對李開復進行認證,這個機構就是根CA,他貼上去的小紙條就叫作根證書。以上是信任體系,另見《既然這個世界沒有絕對的“權威”,那麼我們該相信誰?》。最後一個問題,TLS的中間人攻擊怎麼實施。這時候@Rio出場了,因為是知乎的工作人員,具有一個可信的證書,類似於“Rio經過黃繼新的認證,可以對知乎加密通訊專用鎖進行認證”。於是他自己偽造了一個鎖,然後利用上一級CA對他的信任,去騙取知乎使用者使用他提供的鎖初始化加密會話。因為他的鎖上面有上一級CA的認證,所以你會認為這個鎖是可信的,而實際上Rio透過自己擁有的證書,可以實施中間人攻擊,竊取你和顧惜朝之間通訊的內容。以上便是TLS的中間人攻擊。手裡掌握權力的人,只有道德能夠防止他做壞事。
@Rio 的故事雖然生動,但是是有錯誤的。透過TLS加密通訊,一旦會話初始化完成,想要完成中間人攻擊是非常困難的。TLS的中間人攻擊是針對加密會話的初始化階段進行的,而不是實際通訊的階段。加密通訊的初始化階段,需要透過非對稱密碼演算法來協商金鑰,然後用協商好的金鑰,使用對稱加密演算法進行實際的通訊。不知道各位有沒有見過一種鎖,當用鑰匙開啟這種鎖之後,鑰匙就可以拔出來了,剩下一個開著的鎖頭。拿著這個開著的鎖,沒有鑰匙,一旦鎖上了就開不了。這是現實生活這的一種非對稱加密的物件,能上鎖,但是不能開鎖。現在故事開始,假設我們回到了那個只能寄信的時代,大家都需要和知乎通訊,而且通訊的內容必須要保密。於是負責接收大家訊息的@顧惜朝 想出來一個辦法,找了很多把上面說的那種鎖(公鑰),都用鑰匙開啟,掛在外面。需要和知乎通訊的人,在通訊之前,需要擁有另外一把有兩個鑰匙的鎖(對稱加密演算法),然後把這把鎖和其中一把鑰匙(對稱金鑰),放進一個無法被破拆的鐵盒子裡面,用知乎提供的那把開著的鎖把鐵盒子鎖上。這時候,這個鐵盒子就無法打開了,除了擁有鑰匙的顧惜朝。這個裝有一把鎖和鑰匙的鐵盒子,可以放心地交到任何一個人手上,然後讓他拿去給顧惜朝。顧惜朝拿到這個鐵盒子之後,加密通訊會話就建立了。她就會用鑰匙開啟鐵盒子,取出鎖和鑰匙,寫下“親愛的知乎使用者,你好,我是顧惜朝”小紙條,放進鐵盒子裡,然後用你提供的鎖把鐵盒子鎖上,然後交回到你的手上。這個時候,鐵盒子被你提供的鎖鎖上了,除了你和顧惜朝,沒有別人有鑰匙能夠開啟這個鐵盒子,鐵盒子也就可以安全地經過郵遞送到你的手上;你收到鐵盒子之後,用你自己的鑰匙開啟鎖,讀鐵盒子裡面的訊息,然後放進新的小紙條,再寄送回去。以上是加密通訊的過程。接下來,別有用心的@匿名使用者 出現了,偷偷地換掉了幾個知乎開啟放在外面的鎖,並且自己充當了郵遞員的身份在外面晃悠。當你需要和知乎通訊的時候,匿名使用者遞給你一把他自己的鎖,騙你說這把是知乎掛在外面的鎖。當你把你自己的鎖和鑰匙放進去,然後交給匿名使用者,麻煩他把這些送給顧惜朝的時候,匿名使用者就可以找到另外一個鐵盒子,裝上自己的另外一把兩個鑰匙的鎖,用真正的知乎提供的鎖鎖上,然後寄給顧惜朝。我們辛勤的顧惜朝依然會正常的收到一個鐵盒子,裡面裝著一把鎖和一把鑰匙,只不過,這個鎖已經不是你的了,而是匿名使用者的,你的那把鎖實際上在匿名使用者手上。顧惜朝把“親愛的知乎使用者,你好,我是顧惜朝”的小紙條放進鐵盒,然後讓匿名使用者帶回去給你,而這個時候,匿名使用者就可以開啟這個小鐵盒,偷看你們之間的訊息,然後自己編造一條訊息,放進鐵盒裡面,然後傳回去給你。以上是中間人攻擊。為了避免中間人攻擊,我們聰明的顧惜朝,發明了一種神奇的、無法撕毀、塗改和變造的小紙條(數字簽名),上面寫著“這把鎖經過顧惜朝認證,是知乎加密通訊專用鎖”,然後在每一把知乎提供的鎖上貼上,這樣子匿名使用者就不能偽造鎖了,這時候這個鎖叫作證書。但是問題又來了,許多新來的知乎使用者不認識顧惜朝,他們怎麼知道顧惜朝就是可信的,她認證的鎖就是可用的?於是@黃繼新在這個小紙條的下方又貼了一個小紙條,“顧惜朝經過黃繼新的認證,可以對知乎加密通訊專用鎖進行認證”。黃繼新不僅可以認證鎖,還可以認證顧惜朝等管理員的權力,這時候黃繼新就是CA。可是問題還沒有解決,還是有很多知乎使用者不認識黃繼新,於是李開復又在黃繼新的小紙條上又貼了一個小紙條,“黃繼新經過李開復的認證,可以對知乎加密通訊專用鎖進行認證”。問題依然沒有解決,還是有人不認識李開復,於是這時候需要一個權威的、人們無條件相信的機構來對李開復進行認證,這個機構就是根CA,他貼上去的小紙條就叫作根證書。以上是信任體系,另見《既然這個世界沒有絕對的“權威”,那麼我們該相信誰?》。最後一個問題,TLS的中間人攻擊怎麼實施。這時候@Rio出場了,因為是知乎的工作人員,具有一個可信的證書,類似於“Rio經過黃繼新的認證,可以對知乎加密通訊專用鎖進行認證”。於是他自己偽造了一個鎖,然後利用上一級CA對他的信任,去騙取知乎使用者使用他提供的鎖初始化加密會話。因為他的鎖上面有上一級CA的認證,所以你會認為這個鎖是可信的,而實際上Rio透過自己擁有的證書,可以實施中間人攻擊,竊取你和顧惜朝之間通訊的內容。以上便是TLS的中間人攻擊。手裡掌握權力的人,只有道德能夠防止他做壞事。