“檔案校驗和”與“數字簽名”
Apache Subversion這個版本管理軟體最近頻繁更新,在公告郵件中經常可以看到兩個詞:SHA-256 checksum還有PGP Signature。這是什麼意思呢?簡單說就是用於確保你所下載的東西是靠譜的,以及防止官網和你之間互相的抵賴,並且是經過授權的。今天,我們就來講述關於校驗和簽名的事兒。
檔案校驗和——CheckSum
每個檔案都對應唯一的檔案校驗和。用來證明你下載的東西是和源頭的是一樣的,沒有經過改變的。包括有MD5,SHA256等等。給你看下SHA256的樣子:
什麼原理呢?很簡單,用SHA256對你下載的檔案計算,產生的值跟上面的圖片(不同的檔案對應著不同的校驗和,你可以從官網中看到)中的值比較,只要是一模一樣的,就說明你下載的東西是100%沒問題的。其實校驗和起到了類似於防止中間人攻擊的作用,什麼是中間人攻擊,下面有介紹。
數字簽名——PGP Signature
而PGP Signature就起到了第二個功能:數字簽名的作用。上面說到簽名基於RSA非對稱加密體系,我們先介紹非對稱加密。來看下整體的結構:
非對稱加密
非對稱加密就是說加密和解密的金鑰是不一樣的。具體來說RSA包括三部分:公鑰+私鑰+金鑰。其中,服務端存放公鑰和私鑰,客戶端(你)存放金鑰,準確說是生成。圖片中你看到的就是公鑰,被髮布在網際網路中,任何人都能看到。而私鑰用於解密被公鑰加密後的金鑰,絕對不能公開的,等到服務端的私鑰解密通過後,服務端才信任你,然後你才能下載對應的資源,加密流程才結束。因為公鑰加密的密文可以用私鑰解密,因此非對稱加密技術也被稱為公鑰加密技術。RSA的原理就是這樣了。具體看下圖:
非對稱加密的漏洞
但是非對稱加密是有漏洞的,不能防止第三方攻擊,駭客可以輕鬆截獲並篡改金鑰,如下:
從圖中可以看出,從服務端發出的公鑰K2被駭客截獲,然後客戶端收到的公鑰是駭客自己的公鑰PK2。客戶端用假公鑰PK2來加密自己的私鑰K2,生成的加密密文被傳輸到服務端時又被駭客截獲,因為駭客具備了假公鑰PK2對應的私鑰PK1,因此可以解密得到金鑰K,從而進行篡改後,用之前截獲的公鑰K2加密再發給服務端。
防止中間人攻擊
可想而知,服務端解密後得到的金鑰是經過中間人篡改的。根本不能被信任。那怎麼辦呢?這不在這篇文章的介紹範圍,但簡單說下,可以使用訊息認證的方式來解決中間人攻擊,具體就是用證書,即採取HTTPS的方式。我們也可以看到,Apache的網站是HTTPS的,因此自帶了防止中間人攻擊。另外,上文中的checksum檔案校驗和也是用來防止中間人攻擊的。可是為什麼有數字簽名呢?這是為了解決通訊雙方的抵賴。
防止互相抵賴——數字簽名
我們知道,數字簽名是認證技術的一種。認證技術包括三個:身份認證、訊息認證(解決中間人攻擊)、數字簽名(解決通訊雙方的抵賴)。
而PGP數字簽名基於RSA非對稱加密,我給出一個簽名的樣子:
這就是簽名,其實就是一個RSA中的公鑰(我這裡不是特別確定~)。具體數字簽名是這麼做到防止通訊雙方互相抵賴的,以及到底什麼是互相抵賴呢?我將我知道的簡單解釋下,抵賴就是通訊雙方互不相讓,這裡的apache和使用者沒有太大的體現,但是像支付寶之類的,如果沒有防止互相抵賴,那使用者或者商家很容易錯報資金,從而導致風險出現。而具體實現就是透過一個第三方(CA)來實現,這裡的第三方就是數字簽名。我也就只能說到這了。
結尾
“檔案校驗和”與“數字簽名”
Apache Subversion這個版本管理軟體最近頻繁更新,在公告郵件中經常可以看到兩個詞:SHA-256 checksum還有PGP Signature。這是什麼意思呢?簡單說就是用於確保你所下載的東西是靠譜的,以及防止官網和你之間互相的抵賴,並且是經過授權的。今天,我們就來講述關於校驗和簽名的事兒。
檔案校驗和——CheckSum
每個檔案都對應唯一的檔案校驗和。用來證明你下載的東西是和源頭的是一樣的,沒有經過改變的。包括有MD5,SHA256等等。給你看下SHA256的樣子:
什麼原理呢?很簡單,用SHA256對你下載的檔案計算,產生的值跟上面的圖片(不同的檔案對應著不同的校驗和,你可以從官網中看到)中的值比較,只要是一模一樣的,就說明你下載的東西是100%沒問題的。其實校驗和起到了類似於防止中間人攻擊的作用,什麼是中間人攻擊,下面有介紹。
數字簽名——PGP Signature
而PGP Signature就起到了第二個功能:數字簽名的作用。上面說到簽名基於RSA非對稱加密體系,我們先介紹非對稱加密。來看下整體的結構:
非對稱加密
非對稱加密就是說加密和解密的金鑰是不一樣的。具體來說RSA包括三部分:公鑰+私鑰+金鑰。其中,服務端存放公鑰和私鑰,客戶端(你)存放金鑰,準確說是生成。圖片中你看到的就是公鑰,被髮布在網際網路中,任何人都能看到。而私鑰用於解密被公鑰加密後的金鑰,絕對不能公開的,等到服務端的私鑰解密通過後,服務端才信任你,然後你才能下載對應的資源,加密流程才結束。因為公鑰加密的密文可以用私鑰解密,因此非對稱加密技術也被稱為公鑰加密技術。RSA的原理就是這樣了。具體看下圖:
非對稱加密的漏洞
但是非對稱加密是有漏洞的,不能防止第三方攻擊,駭客可以輕鬆截獲並篡改金鑰,如下:
從圖中可以看出,從服務端發出的公鑰K2被駭客截獲,然後客戶端收到的公鑰是駭客自己的公鑰PK2。客戶端用假公鑰PK2來加密自己的私鑰K2,生成的加密密文被傳輸到服務端時又被駭客截獲,因為駭客具備了假公鑰PK2對應的私鑰PK1,因此可以解密得到金鑰K,從而進行篡改後,用之前截獲的公鑰K2加密再發給服務端。
防止中間人攻擊
可想而知,服務端解密後得到的金鑰是經過中間人篡改的。根本不能被信任。那怎麼辦呢?這不在這篇文章的介紹範圍,但簡單說下,可以使用訊息認證的方式來解決中間人攻擊,具體就是用證書,即採取HTTPS的方式。我們也可以看到,Apache的網站是HTTPS的,因此自帶了防止中間人攻擊。另外,上文中的checksum檔案校驗和也是用來防止中間人攻擊的。可是為什麼有數字簽名呢?這是為了解決通訊雙方的抵賴。
防止互相抵賴——數字簽名
我們知道,數字簽名是認證技術的一種。認證技術包括三個:身份認證、訊息認證(解決中間人攻擊)、數字簽名(解決通訊雙方的抵賴)。
而PGP數字簽名基於RSA非對稱加密,我給出一個簽名的樣子:
這就是簽名,其實就是一個RSA中的公鑰(我這裡不是特別確定~)。具體數字簽名是這麼做到防止通訊雙方互相抵賴的,以及到底什麼是互相抵賴呢?我將我知道的簡單解釋下,抵賴就是通訊雙方互不相讓,這裡的apache和使用者沒有太大的體現,但是像支付寶之類的,如果沒有防止互相抵賴,那使用者或者商家很容易錯報資金,從而導致風險出現。而具體實現就是透過一個第三方(CA)來實現,這裡的第三方就是數字簽名。我也就只能說到這了。
結尾