公共密鑰加密用于網(wǎng)絡(luò)安全,并且在工業(yè)自動化領(lǐng)域得到越來越多的應(yīng)用。
大多數(shù)人都熟悉加密,加密本質(zhì)上涉及到對數(shù)據(jù)進行拼接,并使有意義的數(shù)據(jù)顯示為位、字節(jié)或字符的隨機序列。
這是一個簡單的過程,通過這個過程對數(shù)據(jù)進行加密、傳輸,然后使用共享私鑰進行解密。由于采用相同的密鑰用于加密和解密數(shù)據(jù),因此這被稱為對稱密鑰加密。另外,由于密鑰對公眾保密,因此也被稱為私鑰加密。
為什么工業(yè)領(lǐng)域不使用這樣一個簡單而安全的方法呢?因為這個模型有問題。發(fā)送方和接收方都必須共享密鑰的副本。如果雙方相距很遠,比如說分布在兩個半球上,那交換密鑰將很困難。
當(dāng)然,發(fā)送方可以將密鑰副本"郵寄"給接收方,但在這個過程中可能會有人攔截該密鑰,為自己制作副本,并開始 "監(jiān)聽" 對話。而這就是被稱為非對稱密鑰加密的公鑰加密發(fā)揮作用的地方。
公鑰加密的原理
公鑰加密指的是由對應(yīng)的一對唯一性密鑰(即公開密鑰和私有密鑰)組成的加密方法。它解決了密鑰的發(fā)布和管理問題,是目前商業(yè)密碼的核心。要解釋公鑰加密,請讓我們以信件和保險箱為例。
假設(shè)愛麗絲想給鮑勃寄一封保密的信。她可以把信鎖在保險箱里,把上鎖的保險柜寄給鮑勃。鮑勃用鑰匙打開保險柜,然后就可以看到信。這本質(zhì)上是對稱 (私鑰) 加密。但是,愛麗絲和鮑勃如何安全地共享密鑰副本?
愛麗絲有沒有辦法在不交換密鑰副本的情況下,安全地把信寄給鮑勃?有的。解決方案包括創(chuàng)建兩個密鑰,一把是給保險箱上鎖的公鑰,一把是用于打開保險箱的私鑰。
繼續(xù)以此為例,鮑勃拿起解鎖的保險箱,創(chuàng)建了兩把密鑰,一把是私鑰 (他保留的) 和一把公共密鑰 (他寄給了愛麗絲)。鮑勃接下來拿著公鑰和空的、解鎖的保險箱,把它們都郵寄給愛麗絲。愛麗絲把她的信放在保險柜里,然后用鮑勃郵寄的公共秘鑰鎖上保險柜。愛麗絲把保險柜寄回給鮑勃,鮑勃用他的私人密鑰打開保險柜,看信。假設(shè)有人復(fù)制了鮑勃發(fā)給愛麗絲的公鑰。他無法打開保險柜,也看不了信。鮑勃給愛麗絲的公鑰只能用來給保險柜上鎖,而不能開鎖。
身份驗證替代方法
無論誰能訪問公鑰,愛麗絲都可以安全地將她的信發(fā)送給鮑勃。如果查理攔截了公鑰,假裝是愛麗絲打開安全鎖,這樣他就可以給鮑勃發(fā)送假信息了嗎?這就是公鑰加密的另一個好處,即身份驗證。
鮑勃創(chuàng)建了私鑰和公鑰。但是,為了說明身份驗證的工作原理,讓我們舉一個新例子。鮑勃仍然創(chuàng)建私鑰和公鑰。但是,愛麗絲也創(chuàng)建了自己的私鑰和公鑰。接下來,鮑勃和愛麗絲交換他們的公鑰。愛麗絲把她的公鑰寄給鮑勃,鮑勃把他的公鑰寄給了愛麗絲。和以前一樣,鮑勃把未上鎖的保險箱發(fā)給愛麗絲。愛麗絲把她的信放在保險柜里,用鮑勃提供的公鑰上鎖。
然而,這一次,愛麗絲還做了其它事情。她拿著自己的鎖,把它應(yīng)用到保險柜上,用她創(chuàng)建的私鑰鎖住。愛麗絲然后把保險箱寄回給鮑勃。這一次,在鮑勃用他的私鑰打開保險柜之前,他首先拿了愛麗絲發(fā)給他的公鑰,并試圖打開愛麗絲的鎖。如果鮑勃可以使用公鑰打開鎖,這個鎖是愛麗絲使用她的私鑰鎖上的,那么鮑勃就知道這封信來自愛麗絲。此過程稱為身份驗證。愛麗絲應(yīng)用于保險箱的鎖可以被視為簽名。
更多的工業(yè)自動化設(shè)備正在采用公鑰加密。此外,許多基于網(wǎng)絡(luò)瀏覽器的監(jiān)控和數(shù)據(jù)采集系統(tǒng)(SCADA)開始集成了HTTPs 網(wǎng)頁支持功能,這也是基于公鑰加密的。
選擇安全設(shè)備
在現(xiàn)實世界中,我們?nèi)绾蝿?chuàng)建公鑰加密?有一種方法,與數(shù)學(xué)中一個有趣且非常困難的問題有關(guān),將大數(shù)分解為素數(shù)。例如,考慮以下簡單的加密算法: me mod N=c
在這個方程中,m 是要加密的消息,e 是用于加密消息的公鑰,N 是兩個質(zhì)數(shù) (N= P1*P2) 的乘積,c 是加密的消息。在我們的示例中,鮑勃選擇主要整數(shù)P1和P2,將它們相乘以計算出N。他還選擇了公鑰e。鮑勃隨后將 e 和 N 發(fā)送給愛麗絲,同時他自己保留了P1和P2。愛麗絲將她的消息 m 以及鮑勃發(fā)送的數(shù)字 (e和N) 代入上述方程中,以生成她的加密消息c,她將這些消息發(fā)送回鮑勃。一旦鮑勃收到來自愛麗絲的加密消息c,他只需使用以下公式對其進行解密: cd mod N=m即可找回原始消息。
在這個等式中,他沒有使用他發(fā)給愛麗絲的公鑰e,而是使用他的私鑰d來解密消息。如果鮑勃且只有鮑勃能弄清楚d是什么,那么這就行得通了。正好可以使用歐拉函數(shù) j(N)計算 d,其中d * e =k jN+1。 歐拉函數(shù)j(N) 的重要屬性是被稱為陷阱門的函數(shù)。對我們的示例這意味著,如果P1和P2 是已知的,計算j(P1*P2)很容易,但如果P1和P2不知道,則很難計算 。
試圖解密消息的人可能會考慮獲取 N (因為 N 是鮑勃已發(fā)送給愛麗絲的公開信息),將 N 分解為兩個質(zhì)數(shù)P1和P2,然后解密消息。然而,將大數(shù) N分解為素數(shù)是非常耗時的。事實上很難實現(xiàn),即使是使用超級計算機解決起來也不現(xiàn)實。這就是公鑰加密背后的真正力量所在。鮑勃可以用多個 P1*P2來生成允許愛麗絲用于加密消息的數(shù)字N。但N是否公開并不重要。解密消息還需要了解P1和P2。只要鮑勃不公開這數(shù)字。
在選擇安全設(shè)備和配置安全設(shè)備時,對公鑰加密的理解也很有幫助。了解安全性有助于消除不必要的恐懼。相反,還可以對網(wǎng)絡(luò)安全采取更主動的方法。