密碼學/非對稱密碼
在密碼學中,非對稱金鑰演算法使用一對不同但相關的加密金鑰進行加密和解密。兩個金鑰在數學上相關; 使用一個金鑰透過演算法加密的訊息可以透過使用另一個金鑰的相同演算法來解密。從某種意義上說,一個金鑰“鎖定”一個鎖(加密);但需要不同的金鑰來解鎖它(解密)。
一些,但並非所有,非對稱金鑰密碼都具有“公鑰”屬性,這意味著在已知其中一個金鑰的情況下,沒有已知的有效方法可以找到金鑰對中的另一個金鑰。這類演算法非常有用,因為它完全規避了所有對稱金鑰密碼和一些非對稱金鑰密碼固有的金鑰分發問題。一個人可以簡單地釋出一個金鑰,而將另一個金鑰保密。它們構成了現代密碼學實踐的基礎。
可以用來理解非對稱系統的優點的類比是想象兩個人,愛麗絲和鮑勃,透過公共郵件傳送秘密訊息。在這個例子中,愛麗絲擁有秘密訊息,並希望將其傳送給鮑勃,之後鮑勃發送秘密回覆。
使用對稱金鑰系統,愛麗絲首先將秘密訊息放入一個盒子裡,然後使用一把她有鑰匙的掛鎖鎖上盒子。然後,她透過普通郵件將盒子傳送給鮑勃。當鮑勃收到盒子時,他使用愛麗絲鑰匙的完全相同的副本(他以前以某種方式獲得)開啟盒子,並閱讀訊息。然後,鮑勃可以使用相同的掛鎖傳送他的秘密回覆。
在非對稱金鑰系統中,鮑勃和愛麗絲擁有獨立的掛鎖。首先,愛麗絲要求鮑勃透過普通郵件將他的開鎖的掛鎖傳送給她,並將其鑰匙保密。當愛麗絲收到它時,她用它來鎖住一個裝有她資訊的盒子,並將鎖好的盒子傳送給鮑勃。然後鮑勃可以用他的鑰匙開啟盒子,並閱讀愛麗絲的訊息。為了回覆,鮑勃必須以類似的方式獲得愛麗絲的開鎖的掛鎖來鎖住盒子,然後將其寄回給她。非對稱金鑰系統中的關鍵優勢是鮑勃和愛麗絲永遠不需要互相傳送他們鑰匙的副本。這大大降低了第三方(也許,在這個例子中,是一個腐敗的郵遞員)在傳輸過程中複製鑰匙的可能性,從而允許該第三方窺探愛麗絲和鮑勃之間將來發送的所有訊息。此外,如果鮑勃不小心讓其他人複製了他的鑰匙,愛麗絲髮送給鮑勃的訊息將被洩露,但愛麗絲髮送給其他人的訊息將保持秘密,因為其他人將提供不同的掛鎖供愛麗絲使用......
幸運的是,密碼學並不關心實際的掛鎖,而是關心不容易被撬棍、剪線鉗或液氮攻擊的加密演算法。
並非所有非對稱金鑰演算法都以這種方式執行。最常見的是愛麗絲和鮑勃擁有兩個金鑰;它們中的任何一個(據目前所知)都不能從另一個推斷出來。這被稱為公鑰密碼學,因為金鑰對中的一個金鑰可以在不影響訊息安全的情況下發布。在上面的類比中,鮑勃可能會公佈如何製作一把鎖的說明(“公鑰”),但鎖的構造使得不可能(據目前所知)從這些說明中推斷出如何製作一個可以開啟該鎖的鑰匙(“私鑰”)。那些希望向鮑勃發送訊息的人使用公鑰加密訊息;鮑勃使用他的私鑰解密它。
當然,有人可能“撬開”鮑勃或愛麗絲的鎖。與一次性密碼或其等效物不同,目前尚無已知的非對稱金鑰演算法已被證明對數學攻擊是安全的。也就是說,目前尚不清楚金鑰對中金鑰之間的某種關係,或者演算法操作中的某個弱點,是否可能被發現,從而允許在沒有金鑰的情況下進行解密,或者僅使用加密金鑰進行解密。非對稱金鑰演算法的安全性基於對解決底層數學問題難度的估計。隨著計算機能力成本的降低以及新的數學發現,這些估計一直在發生變化。
過去曾在有前景的非對稱金鑰演算法中發現弱點。“揹包填充”演算法在發現意外攻擊時被證明是不安全的。最近,一些基於仔細測量已知硬體加密明文所需的確切時間的攻擊已被用於簡化對可能解密金鑰的搜尋。因此,使用非對稱金鑰演算法並不能保證安全性;這是一個積極的研究領域,旨在發現和防禦新的和意想不到的攻擊。
使用非對稱金鑰過程中的另一個潛在弱點是“中間人”攻擊的可能性,在這種攻擊中,公鑰的通訊被第三方攔截並修改,以提供第三方的公鑰。但是,加密的響應也必須被攔截、解密並使用正確的公鑰在所有情況下重新加密,以避免懷疑,這使得這種攻擊在實踐中難以實施。
第一個已知的非對稱金鑰演算法是由英國 GCHQ 的克利福德·科克斯發明的。當時沒有公開,並於 1976 年由麻省理工學院的裡維斯特、沙米爾和阿德曼重新發明。通常被稱為 RSA,這是其結果。RSA 的安全性依賴於對對非常大的整數進行因式分解的難度。該領域的突破將給 RSA 的安全性造成相當大的問題。目前,RSA 容易受到攻擊,透過對公鑰的“模數”部分進行因式分解,即使金鑰選擇得當,對於小於 700 位的金鑰也是如此。大多數權威人士建議 1024 位金鑰在一段時間內將是安全的,除非在因式分解實踐或實際量子計算機方面取得突破,但其他人則傾向於使用更長的金鑰。
至少還有兩種非對稱演算法是在 GCHQ 工作之後但 RSA 出版之前發明的。它們分別是拉爾夫·默克爾難題密碼系統和迪菲-赫爾曼系統。在 RSA 出版很久之後,塔赫爾·埃爾加馬爾發明了埃爾加馬爾離散對數密碼系統,它依賴於在有限域中反轉對數的難度。它用於 SSL、TLS 和 DSA 協議。
橢圓曲線密碼學是新增到非對稱金鑰演算法類別中的一個相對較新的補充。雖然它在計算上更復雜,但許多人認為它比因式分解或離散對數問題代表了更難的數學問題。
非對稱金鑰演算法的一個缺點是它們比“同等”安全的對稱金鑰演算法慢得多(典型值為 1000 多倍)。在許多高質量的加密系統中,兩種演算法型別都被使用;它們被稱為“混合系統”。PGP 是一個早期且眾所周知的混合系統。接收者的公鑰加密一個對稱演算法金鑰,該金鑰用於加密主要訊息。如果操作得當,這將結合了兩種演算法型別的優點。
我們將在本書後面的 公鑰概述 和後續部分中更詳細地討論非對稱密碼。