對稱式加密就是加密和解密使用同一個密鑰,通常稱之為"SessionKey"這種加密技術目前被廣泛采用,如美國政府所采用的DES加密標準就是一種典型的"對稱式"加密法,它的SessionKey長度為56Bits。
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為"公鑰"和"私鑰",它們兩個必需配對使用,否則不能打開加密文件。這裏的"公鑰"是指可以對外公布的,"私鑰"則不能,隻能由持有人一個人知道。它的優越性就在這裏,因為對稱式的加密方法如果是在網絡上傳輸加密文件就很難把密鑰告訴對方,不管用什麼方法都有可能被別竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的"公鑰"是可以公開的,也就不怕別人知道,收件人解密時隻要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
五、加密技術中的摘要函數(MAD、MAD和MAD)
摘要是一種防止改動的方法,其中用到的函數叫摘要函數。這些函數的輸入可以是任意大小的消息,而輸出是一個固定長度的摘要。摘要有這樣一個性質,如果改變了輸入消息中的任何東西,甚至隻有一位,輸出的摘要將會發生不可預測的改變,也就是說輸入消息的每一位對輸出摘要都有影響。總之,摘要算法從給定的文本塊中產生一個數字簽名(fingerprint或messagedigest),數字簽名可以用於防止有人從一個簽名上獲取文本信息或改變文本信息內容和進行身份認證。摘要算法的數字簽名原理在很多加密算法中都被使用,如SO/KEY和PIP(prettygoodprivacy)。
現在流行的摘要函數有MAD和MAD,但要記住客戶機和服務器必須使用相同的算法,無論是MAD還是MAD,MAD客戶機不能和MAD服務器交互。
MAD摘要算法的設計是出於利用32位RISC結構來最大其吞吐量,而不需要大量的替換表(substitutiontable)來考慮的。
MAD算法是以消息給予的長度作為輸入,產生一個128位的"指紋"或"消息化"。要產生兩個具有相同消息化的文字塊或者產生任何具有預先給定"指紋"的消息,都被認為在計算上是不可能的。
MAD摘要算法是個數據認證標準。MAD的設計思想是要找出速度更快,比MAD更安全的一種算法,MAD的設計者通過使MAD在計算上慢下來,以及對這些計算做了一些基礎性的改動來解決安全性這一問題,是MAD算法的一個擴展。
六、密鑰的管理
密鑰既然要求保密,這就涉及到密鑰的管理問題,管理不好,密鑰同樣可能被無意識地泄露,並不是有了密鑰就高枕無憂,任何保密也隻是相對的,是有時效的。要管理好密鑰我們還要注意以下幾個方麵:
1、密鑰的使用要注意時效和次數
如果用戶可以一次又一次地使用同樣密鑰與別人交換信息,那麼密鑰也同其它任何密碼一樣存在著一定的安全性,雖然說用戶的私鑰是不對外公開的,但是也很難保證私鑰長期的保密性,很難保證長期以來不被泄露。如果某人偶然地知道了用戶的密鑰,那麼用戶曾經和另一個人交換的每一條消息都不再是保密的了。另外使用一個特定密鑰加密的信息越多,提供給竊聽者的材料也就越多,從某種意義上來講也就越不安全了。
因此,一般強調僅將一個對話密鑰用於一條信息中或一次對話中,或者建立一種按時更換密鑰的機製以減小密鑰暴露的可能性。
2、多密鑰的管理
假設在某機構中有100個人,如果他們任意兩人之間可以進行秘密對話,那麼總共需要多少密鑰呢?每個人需要知道多少密鑰呢?也許很容易得出答案,如果任何兩個人之間要不同的密鑰,則總共需要4950個密鑰,而且每個人應記住99個密鑰。如果機構的人數是1000、10000人或更多,這種辦法就顯然過於愚蠢了,管理密鑰將是一件可怕的事情。
Kerberos提供了一種解決這個較好方案,它是由MIT發明的,使保密密鑰的管理和分發變得十分容易,但這種方法本身還存在一定的缺點。為能在因特網上提供一個實用的解決方案,Kerberos建立了一個安全的、可信任的密鑰分發中心(KeyDistributionCenter,KDC),每個用戶隻要知道一個和KDC進行會話的密鑰就可以了,而不需要知道成百上千個不同的密鑰。
假設用戶甲想要和用戶乙進行秘密通信,則用戶甲先和KDC通信,用隻有用戶甲和KDC知道的密鑰進行加密,用戶甲告訴KDC他想和用戶乙進行通信,KDC會為用戶甲和用戶乙之間的會話隨機選擇一個對話密鑰,並生成一個標簽,這個標簽由KDC和用戶乙之間的密鑰進行加密,並在用戶甲啟動和用戶乙對話時,用戶甲會把這個標簽交給用戶乙。這個標簽的作用是讓用戶甲確信和他交談的是用戶乙,而不是冒充者。因為這個標簽是由隻有用戶乙和KDC知道的密鑰進行加密的,所以即使冒充者得到用戶甲發出的標簽也不可能進行解密,隻有用戶乙收到後才能夠進行解密,從而確定了與用戶甲對話的人就是用戶乙。
當KDC生成標簽和隨機會話密碼,就會把它們用隻有用戶甲和KDC知道的密鑰進行加密,然後把標簽和會話鑰傳給用戶甲,加密的結果可以確保隻有用戶甲能得到這個信息,隻有用戶甲能利用這個會話密鑰和用戶乙進行通話。同理,KDC會把會話密碼用隻有KDC和用戶乙知道的密鑰加密,並把會話密鑰給用戶乙。
用戶甲會啟動一個和用戶乙的會話,並用得到的會話密鑰加密自己和用戶乙的會話,還要把KDC傳給它的標簽傳給用戶乙以確定用戶乙的身份,然後用戶甲和用戶乙之間就可以用會話密鑰進行安全的會話了,而且為了保證安全,這個會話密鑰是一次性的,這樣黑客就更難進行破解了。同時由於密鑰是一次性由係統自動產生的,則用戶不必記那麼多密鑰了,方便了人們的通信。
七、數據加密的標準