不知道有沒有高考志願報了電子商務專業的同學,不出意外的話你們以後有門課就是電子支付原理。
我總結了一些私鑰與公鑰的知識,不一定完全正確,但至少可以幫助人們理解。
我們將以提問的方式循序漸進(其實也是我的心路歷程),讓我們開始。
總的來說,是一種採用RSA演算法對網路資料進行加密傳輸的方式。採用這種方式加密,需要生成兩串祕鑰,公開的叫做公鑰,未公開的稱為私鑰。它們都可以用於加密和解密檔案。
RSA演算法一直是使用範圍最廣的"非對稱加密演算法",早在1977年就已經誕生。具體的原理並不難,但不是我們今天討論的重點。
只需要記住使用這種演算法,加密和解密的時候所使用的密碼不一樣,但密碼永遠是成對出現的。
也就是說,一個箱子配備了兩把鑰匙,你用其中一把鑰匙把箱子鎖住,再用這把鑰匙是打不開的,需要用另一把,反之亦然。
公鑰和私鑰是同時存在的一對祕鑰,在本質上沒有區別。
例如,A祕鑰加密的檔案可以用B祕鑰解密(AB祕鑰必須為一對),B祕鑰加密的檔案可以用A祕鑰解密(不能自己解密自己)。只不過人人都知道的叫做公鑰,只有一個人知道的叫做私鑰。
所以,公鑰和私鑰只是人為賦予的名稱,和哪個加密,哪個解密並沒有直接的關係。
之所以會存在這個問題,原因是使用的場景不同,我們先直觀的看看這兩種情況:
-
你有兩個字母A和B,你用A加密了一個檔案,此時只有B可以解密,然後你告訴所有人,這裡有一個我用A加密過的檔案。雖然人人都可以複製一份加密檔案到自己的電腦上,但是他們並不知道B可以解密。然後你想把這個檔案交給我,所以告訴我字母B可以解密,此時我也去複製了一份檔案,並且用字母B進行解密,我也就看到了檔案的內容。這樣就達到了保護資料的目的,此時公鑰用於加密,私鑰用於解密。
-
我有A、B兩個字母,一開始就通知了所有人,想和我說話的同學請用字母B進行加密。這個時候你把用字母B加密過的檔案公開了出來,並註明我來查收。但是,總有那麼些壞人會查收一些不是留給自己檔案,但是壞人拿到的是加密過的檔案,而且並不知道A可以用來解密。所以只有當我拿到檔案時,用A進行解密可以知道內容。也達到了保護資料的目的,此時仍然是公鑰用於加密,私鑰用於解密。
上面兩種情況都是公鑰加密的情況,比較容易理解。那麼我們想一下,如果用私鑰加密,那麼就意味著所有人都能解密我發出的資訊,這種情況有什麼用呢?答案就是數字簽名。
我現在使用字母A加密了我的檔案(A並不會公開),然後我告訴所有人請用字母B來解密,現在大家都知道了我發的內容。但是,如果有人想偽造的檔案呢。此時,如果你用B解密了密文,那麼你自然會想到,這個檔案肯定是由我發出的,因為能用字母B解密的檔案肯定是字母A所加密的,而只有我才知道字母A。這樣就達到了確認檔案來源的目的。
我收到了一句話,內容是讓我立即關閉電腦,還附帶了一個數字簽名,但是我認為只有我老婆才能讓我關掉電腦。這個時候我去問她“你加密檔案的公鑰是什麼”,她生氣的告訴我是字母B(她的公鑰),然後我用字母B去解密數字簽名,解密出的內容是一句英語“Turn off computer”。我用百度已翻譯發現是讓我關閉電腦的意思。我明白了兩個問題:第一,我能夠解密數字簽名,說明這句話確實是她傳送給我的。第二,解密出來的內容和我收到的那句話意思是一樣的,代表這句話並沒有被人篡改過。那麼此時,我欣然的關閉了我的電腦。
其實,第四個場景才是支付介面整合常遇到的情況,前面幾個只是幫助理解雙鑰加密的原理罷了。當然,實際的數字簽名要比這些文字複雜的多,比如說雙人雙鑰的情況。
目的無非就是兩個:保證資訊來源可靠性,和保證資訊完整性。
這兩點在支付流程中是及其重要的,畢竟涉及到錢的東西,誰都不敢含糊。雙鑰加密目前並沒有組織聲稱可以破解,所以能夠最大限度的保障支付資料的安全。
比如,支付寶APP支付和銀聯支付就是雙鑰加密的。
實際上之前介紹的介面採用的是對稱加密的演算法,即加密與解密使用同樣的祕鑰。
雖然認為對稱加密不如非對稱加密安全,但是也沒有任何跡象表面對稱加密會被淘汰,而且對稱加密更簡單易用。
其實,對稱加密最大的風險就在於祕鑰管理。這就是為什麼我們之前介紹的微信支付,在收集祕鑰的時候,總是多次驗證,而且祕鑰只給你看一眼。