要了解什麼是中間人攻擊,我們可以用一個故事來舉例說明,你今天要傳紙條給A同學說「你好」,但你沒有親手交給他,而是請A同學的同班同學B幫你傳紙條,結果好死不死B同學非常討厭你,B同學就把你要傳給A同學的話改成了「你好醜,醜死了」才傳給A同學,導致A同學也開始討厭你。
故事中的B同學,就是中間人(man-in-the-middle),但真正的中間人攻擊和上面的例子不同的地方就是這種攻擊是可以被主動製造出來,也就是說你可能在自己都不知道的情況下請了一個人幫你傳話,我們在網路上進行活動時,都會有所謂的公鑰及私鑰,公鑰顧名思義是公開在網路上的,就是像是帳號的名稱,而私鑰就像是該帳號對應的密碼,兩者彼此在加密與解密上互相對應。
但我們看到對方的帳號,也不一定能確定是否是和他本人在進行溝通,由於在網路上的所有的公鑰密碼系統都有可能遭受中間人攻擊,所以這是個非常嚴重的問題,為了解決這個問題,我們需要有一個具有權威性、公正性、唯一性的認證機構,而這個機構就叫做CA。
憑證頒發機構CA是什麼?
CA,全名寫作Certificate Authority,中文翻譯為數位憑證認證機構,也可以被稱為「電子商務認證中心」、「電子商務認證授權機構」,從名稱就可以知道此機構對電子商務的重要性,CA最主要的工作,就是是負責發放和管理數位憑證的權威機構,並在電子商務交易中作為受信任的第三方,擔任公鑰體系中檢核公鑰合法性的責任。
CA如何進行身分驗證?
CA中心會為每個使用公開金鑰的用戶發放一個「數位憑證」,透過憑證來告訴大家,我合法擁有了我的公鑰,簡單說來,數位認證就是一種網路中的身份證。數位憑證的內容除了包含持有者的公開金鑰、持有者的電子郵件地址等基本資訊外,憑證發行單位、憑證有效期限等資訊也會在該認證資訊中,除了能公開這份憑證的效力,也能使攻擊者不能偽造和篡改憑證。
若是以現實生活作為例子,憑證就像是我們向政府單位申請的各種公文,當我向台中市政府的地政事務所申請建物謄本時,我們就可以透過我們申請完成的建物謄本內容來看,公鑰就像是地址,而數位簽章就像是公文帳面印下的台中市政府,我們可以透過此公文來告訴大家,這個地址是屬於我的所有,而公開此公文就可以讓大家知道這個效力是政府背書,讓他人難以進行偽造或竄改。
透過上述舉例可以看到,不論是SSL或是TLS,憑證跟CA的角色才是當中最關鍵的核心,CA的主要工作就是負責產生、分配以及管理所有目前正參與網路交易與加密的個體所需的數位憑證,但實際上的CA公司不像政府機關,僅此一家絕無分號,CA公司的數量非常多,彼此之間又有著橫向或縱向的機構從屬關係,這複雜的關係就需要我們稍微往後,拉開一些距離來看。
什麼是PKI?
PKI,全名Public Key Infrastructure,中文譯做公開金鑰基礎建設,上段所提到的CA、數位憑證、公私鑰的加密解密等機制,都囊括在其中,所謂的PKI會有一種層層信任的關聯性結構,實際運行時會透過一個中介憑證單位為多個客戶簽發不同的終端實體憑證,在這些申請到終端實體憑證的客戶間雖然無法直接互相驗證來檢核彼此的真實性,但透過PKI這種樹狀結構來做層層的傳遞與把關,所以在此傳遞關係中所有下層憑證,都會因為上層的憑證可被信賴進而繼承信任基礎。
例如甲機構發佈了憑證給乙,乙機構再發佈憑證給丙,這樣憑證就會有所謂「甲>乙>丙」的信任鍊產生,其中最上層的甲就是信任鍊的頂端,通常不需要再向其他CA機構做審核,就可稱之為root certificate(根憑證),而頒給根憑證的CA當然就是根CA,所以我們也可以說Root CA是信任鍊的起點也不為過。
所謂的根憑證都必須獲得廣泛認可,通常已預先安裝在各種軟體(包括作業系統、瀏覽器、電子郵件軟體等),作為信任鏈的起點,它可能來自於公認可靠的政府機關(台灣網路資訊中心)、憑證頒發機構公司(如DigiCert、Google)或是非營利組織(如Let's Encrypt)等,與各大軟體商都必須透過嚴謹的核認程序才能在不同的軟體廣泛部署,而且由於部署程序複雜費時,需要行政人員的授權及機構法人身分的核認,一張根憑證有效期可能長達二十年以上。
像這樣的層層信賴鍊機制,台灣目前也有實際的例子可以觀察,像是台灣的GRCA(國家發展委員會委託中華電信管理的政府憑證管理中心),就將其簽發的憑證給政府公開金鑰基礎建設(GPKI)作為下層CA,再讓內政部憑證管理中心成為GPKI中的第一層下屬CA,最後內政部透過GPKI的政策及機制做出最有名的產品,就是我們熟知的自然人公鑰憑證了。
如前段所述,自行簽發的根憑證必須廣泛認可才可能在不同機構或是用戶間運行,但是在某些企業,也可能會在內部電腦自行安裝企業自簽的根憑證,以支援內部網路的企業級軟體;但是這些憑證非常有可能只在企業內部適用。