簡介
對稱或秘鑰
密碼術早已被人們使用了數千年,它包括任何加密形式,其中同一個密鑰既用於加密也用於解密所涉及的文本。最簡單的形式之一往往被稱為“愷撒(Caesar)”密碼 — 據說是 Julius Caesar 用來隱蔽訊息的方法 — 其過 程很簡單,就是將字母表沿某一方向或反方向移動數位。第 1 部分中提供的 HAL/IBM 示例正是這種形式,它的密鑰指示將字母向前移動一位進行解密。在這個普通示例中,解密密鑰是一個加密密鑰的
鏡像(mirror image),而不是它的複製品,但這並沒有損害作為對稱機制的保密級別。
排列
這種簡單方案的變體涉及使用一個任意排序的字母表,它和用於明文訊息的字母表有同樣的長度。在這種情況下,密鑰可能是由數字組成的一個長序列,例如:5, 19, 1, 2, 11 ... 表明 A 應該映射為 E、B 為 S、C 為 A、D 為 B、E 為 K 等等 — 也可能是許多有點獨創性方案中的一種,這些 方案包含的字母(假定)是從特定小說的句子中選取的。
當然,這樣的系統是極其脆弱的,而現代的系統則使用基於難解的數學問題的複雜算法,並因此趨於極端強壯。
非對稱
密碼術的過程有一個公共元素,而且幾乎從不共享
私鑰。與非對稱密碼術的這種情況不同,對稱密碼術通常需要在一個受限組內共享
密鑰並同時維護其保密性。對於一個查看用對稱密碼加密的數據的人來說,如果對用於加密數據的密鑰根本沒有訪問權,那么他完全不可能查看加密數據。如果這樣的秘鑰落入壞人之手,那么就會馬上徹底地危及使用該密鑰加密的數據的安全性。因此,使用秘鑰方法的這個組中的所有系統所共享的內容是
密鑰管理的難點,將在關於實際問題的特性中(緊接在本系列後)更詳細地討論。
密碼長度
通常提到的
密鑰都有特定的位長度,如 56 位或 128 位。這些長度都是對稱密鑰密碼的長度,而非對稱密鑰密碼中至少私有元素的密鑰長度是相當長的。而且,這兩組的密鑰長度之間沒有任何相關性,除非偶爾在使用某一給定系統的情況下,達到某一給定密鑰長度提供的安全性級別。但是,Phil Zimmermann,非常有效而且重要的軟體包 — 稱為“PGP 加密軟 件(Pretty Good Privacy,PGP)”的創始人,提出 80 位的對稱密鑰目前在安全性方面與 1024 位的非對稱密鑰近似相等;要獲得 128 位
對稱密鑰提供的安全性,可能需要使用 3000 位的非對稱密鑰。有些人肯定會對其中一些比較、(毫無疑問)甚至對比較的嘗試持反對意見。
但是,在任何特定組中,所用密鑰的長度通常是確定安全性時的一個重要因素。而且,密鑰長度並不是線性的,而是每增加一位就加倍。二的二次方是四,三次方是八,四次方是十六,依次類推。Giga Group 提供一個簡單的比喻,它提出如果一個茶匙足夠容納所有可能的 40 位的密 鑰組合,那么所有 56 位的密鑰組合需要一個游泳池來容納,而容納所有可能的 128 位的密鑰組合的體積將會粗略地與地球的體積相當。一個用
十進制表示的 128 位的值大概是 340,後面跟 36 個零。
對稱密鑰方法比非對稱方法快得多,因此加密大量文本時,對稱密鑰方法是首選機制。諸如 DES(qv)的密碼在軟體中至少比非對稱密碼 RSA(在關於非對稱系統的特性中有所討論)快 100 倍,而且在專門的硬體上實現時可能高達 10,000 倍。秘鑰密碼最適合用於在單用戶或 小型組的環境中保護數據,通常都是通過使用密碼實現。實際上,正如在別處已提到的,廣為散布或大規模實際使用的最令人滿意的方法往往都同時組合了對稱和非對稱系統。
對稱密碼的類型
現在,通常使用
分組密碼(block cipher)或
序列密碼(stream cipher)實現對稱密碼,我們將在此討論這兩種密碼。這一特性中還要考慮稱為“
訊息認證代碼(Message Authentication Code,MAC)”的一種使 用秘鑰的
校驗和機制。MAC 與
訊息摘要 是完全不同的,訊息摘要是在
數字簽名中使用的,將在關於非對稱
密碼術(第 3 部分)的特性中討論。
分組密碼
分組密碼將定長的明文塊轉換成等長的密文,這一過程在秘鑰的控制之下。使用逆向變換和同一
密鑰來實現解密。對於當前的許多分組密碼,分組大小是 64 位,但這很可能會增加。
明文訊息通常要比特定的分組大小長得多,而且使用不同的技術或操作方式。這樣的方式示例有:電子編碼本(ECB)、密碼分組連結(CBC)或密碼反饋(
CFB)。ECB 使用同一個密鑰簡單地將每個明文塊一個接一個地進行加密;在 CBC 方式中,每個明文塊在加密前先與前一密文塊進行“
異或”運算,從而增加了複雜程度,可以使某些攻擊更難以實施。 “
輸出反饋”方式(OFB)類似 CBC 方式,但是進行“異或”的量是獨立生成的。 CBC 受到廣泛使用,例如在 DES(qv)實現中,而且在有關
密碼術的技術性方面的相應書籍中深入討論了各種方式。請注意:您自己建立的
密碼系統的普遍弱點就是以簡單的形式來使用某些公開的算法,而不是以提供了額外保護的特定方式使用。
疊代的
分組密碼是那些其加密過程有多次循環的密碼,因此提高了安全性。在每個循環中,可以通過使用特殊的函式從初始秘鑰派生出的子
密鑰來套用適當的變換。該附加的計算需求必然會影響可以管理加密的速度,因此在安全性需要和執行速度之間存在著一種平衡。天下沒有免費的午餐,密碼術也是如此;與其它地方一樣,套用適當方法的技巧中有一部分是源於對需要進行的權衡以及它們與需求平衡的關係如何的理解。
分組密碼包括 DES、IDEA、SAFER、Blowfish 和 Skipjack — 最後一個是“
美國國家安全局(US National Security Agency,NSA)”限制器晶片中使用的算法。
序列密碼
與
分組密碼相比,
序列密碼可以是非常快速的,儘管某些方式下工作的一些分組密碼(如 CFB 或 OFB 中的 DES)可以與序列密碼一樣有效地運作。序列密碼作用於由若干位組成的一些小型組,通常使用稱為
密鑰流的一個位序列作為密鑰對它們逐位套用“
異或”運算。有些序列密碼基於一種稱作“線形
反饋移位暫存器(Linear Feedback Shift Register,LFSR)”的機制,該機制生成一個
二進制位序列。
序列密碼是由一種專業的密碼,Vernam 密碼(也稱為
一次性密碼本(one-time pad)),發展而來的。序列密碼的示例包括 RC4 和“軟體最佳化
加密算法(Software Optimized Encryption Algorithm,SEAL)”,以及 Vernam 密碼或一次性密碼本的特殊情形。
訊息認證代碼
訊息認證代碼(MAC)並不是密碼,而是
校驗和(通常是 32 位)的一種特殊形式,它是通過使用一個秘鑰並結合一個特定認證方案而生成的,並且附加在一條訊息後。
訊息摘要是使用
單向散列函式生成的,緊密聯繫的
數字簽名是使用非對稱
密鑰對生成並進行驗證的。與這兩者相比,預期的接收 方需要對秘鑰有訪問權,以便驗證代碼。