1. 程式人生 > >請問可以告訴我你的密碼嗎

請問可以告訴我你的密碼嗎

談及密碼,大家都覺得十分常見,比如解鎖手機的密碼、微信微博的登入密碼等。但是,這些我們平日裡使用的密碼,並不是真正的密碼,僅僅是一種用來驗證其所有權的口令。這篇文章要介紹的“密碼”是一個非常龐大而複雜的資訊處理體系,涉及資訊的機密性、完整性、認證等。近年來大火的區塊鏈技術中便採用密碼學的方式來保證資料傳輸和訪問的安全。

 

 

我們想象一個Alice向Bob傳送電子郵件的場景。

 

 

由於郵件通過網際網路傳送,途中會經過其它計算機和通訊裝置進行中轉,在這個過程中,就可能存在被惡意“竊聽者”偷看到訊息。Alice不想被別人看到郵件的具體內容,就決定把郵件進行加密後再發送給Bob。我們將加密前的訊息稱作明文,加密後的訊息稱作密文。Bob收到Alice的加密郵件後,需要進行解密才可以讀懂訊息。

 

 

訊息加密後,即使被竊聽,在不知道如何解密的情況下,便無法得知訊息的具體內容,由此保證了郵件的機密性。

 

加密的步驟稱為加密演算法,解密的步驟稱為解密演算法。密碼演算法和金鑰共同完成加解密。例如愷撒密碼,通過將明文中使用的字母按照一定字數平移來加密。比如,平移4個字母,a加密變為E,b加密變為F,……以此類推,w變為A,x變為B,y變為C,z變為D。

 

 

假設我們要對明文trias進行加密,按照平移4位字母來加密,則密文為XVMEW。這樣,我們就完成了加密過程,其中的加密演算法就是平移操作,金鑰就是4。對應的解密過程就是使用加密時的金鑰進行反向的平移操作。

 

 

根據金鑰的使用方法,密碼可以分為對稱密碼和非對稱密碼,其中,對稱密碼又稱為私鑰密碼、公共金鑰密碼、傳統密碼、共享金鑰密碼等,非對稱密碼又稱為公鑰密碼。對稱密碼是指在加密和解密時使用同一個金鑰的方式,而非對稱密碼則是在加密和解密時使用不同金鑰的方式。還有一種混合密碼系統,是將對稱密碼和非對稱密碼的優勢結合使用的方法,通常先用對稱密碼對訊息進行加密,保證機密性,然後用非對稱密碼對該對稱密碼的金鑰進行加密。

 

對稱密碼和非對稱密碼通常保證了訊息的機密性,我們又如何檢驗訊息是否被篡改呢?假設我們從網路上下載了一款軟體,那麼我們所下載的軟體,又是否是軟體作者所釋出的軟體?軟體內又是否被植入了惡意程式呢?

 

一些軟體釋出者會在釋出軟體的同時提供該軟體的雜湊值,雜湊值就是利用單向雜湊函式計算出的數值,根據雜湊值是否一致,來檢測資料是否被篡改。

 

在保證了訊息未被篡改後,我們還希望知道訊息是否來自正確的傳送者,即需要對訊息進行認證,判斷訊息是否是其他人偽裝成傳送者發出的,這時,就需要訊息驗證碼來進行驗證。訊息驗證碼可以理解為一種與金鑰相關聯的單向雜湊函式,既可以用來確認訊息的完整性,也可以進行認證。

 

如果我們在確認了訊息未被篡改,同時也不存在偽裝的情況下,為了防止傳送者事後否認訊息的行為,我們採用數字簽名來驗證訊息到底是誰寫的。數字簽名類似於生活中的簽名和蓋章,既能夠確保完整性、提供認證,又能夠防止否認。

 

綜上,我們提到了五種密碼技術,各自發揮著極其重要的作用。對稱密碼和非對稱密碼保證了訊息的機密性,防止訊息洩露;單向雜湊函式、訊息認證碼、數字簽名保證了訊息的完整性,防止資訊被篡改;訊息認證碼和數字簽名又能夠對訊息進行認證,防止他人偽裝成真正的傳送者;數字簽名又可以保證訊息的不可否認性,防止傳送者事後否認自己的訊息。