- Java加密與解密的藝術
- 梁棟
- 298字
- 2018-12-31 19:18:59
第2章 企業應用安全的銀彈—密碼學
通過對第1章內容的學習,我們基本了解了這枚解決企業應用安全的銀彈—密碼學。密碼學并不是最近才興起的新學科,它的歷史最早可以追溯到幾千年以前,而且古今中外都有密碼學運用的記載。引用《破譯者》書中戴維·卡恩的話,“人類使用密碼的歷史幾乎與使用文字的時間一樣長”。在經歷戰火的洗禮,步入現代以后,計算機科學與數學應用科學的快速發展,促進了密碼學的進步。密碼學成為應對計算機系統安全問題當之無愧的安全衛士,它廣泛應用于計算機與網絡安全領域,并逐步進入我們的日常生活:自動柜員機芯片卡、公交IC卡、電子商務,等等。計算機科學的迅速發展,使得密碼學在我們的生活中變得越來越重要。
2.1 密碼學的發家史
可以這么說,密碼學是靠著戰爭發家的。自從有了戰爭,就有了密碼學的應用環境。在戰爭中,對陣雙方要保護自己的通信安全并竊取、破譯對方的情報,于是就有了密碼學。用著名的密碼學專家羅納德·李維斯特(Ronald L. Rivest)的話說,“密碼學是關于如何在敵人存在的環境中通信”??v觀密碼學的發展歷程,我們大體可以將其分為三個階段,即手工加密階段、機械加密階段和計算機加密階段。
2.1.1 手工加密階段
密碼學很早就廣泛應用于古代戰爭中,使用手工方式完成加密操作,以確保戰爭中軍事信息的秘密傳送,這一階段稱為手工加密階段。這一階段是古典密碼學蓬勃發展的時期,稱為古典加密階段。
公元前1000年左右,武王伐紂時期。見于周朝兵書《六韜·龍韜》,書中記載了周朝著名軍事家姜子牙為戰時通信制定的兩種軍事通信密碼:陰符和陰書。陰符是使用雙方在通信前事先制造的一套尺寸不等、形狀各異的“陰符”,共八種,每種都代表一定的意義,只有通信雙方知道。陰符,可算是密碼學中的替代法。陰書在陰符的基礎上繼續發展,它應用“一合而再離,三發而一知”的理論,也就是密碼學中的移位法。將一份完整的軍事文書一分為三,分三人傳遞,必須要把三份文書重新合并后才能獲得完整的軍事信息。即使途中一人或二人被捕,也不至于暴露軍事機密。
公元前480年,波希戰爭。波斯大量軍隊秘密集結,意圖對雅典和斯巴達發動一次突襲。恰逢希臘人狄馬拉圖斯(Demaratus)在波斯的蘇薩城內看到了這次集結,于是他在木板上記錄了波斯突襲希臘的意圖,然后用蠟把木板上的字封住。這塊木板就這樣在蠟封的掩蓋下送到了希臘,最終使得波斯海軍覆沒于雅典附近的薩拉米灣—薩拉米灣海戰。
公元前404年,斯巴達征服希臘。斯巴達在波斯帝國的幫助下,征服了希臘。斯巴達北路軍司令萊薩德還沒來得及慶祝就接到密探送來的信函。萊薩德接過密探的腰帶,將其纏繞在斯巴達密碼棒(Scytale)上,得知波斯帝國意圖吞并他的城池。萊薩德當機立斷,成功反擊了波斯帝國的進攻。斯巴達密碼棒實際上是一個指揮棒,將羊皮紙卷在密碼棒上,把要保密的信息寫在羊皮紙上。由上述“腰帶”的含義可知,羊皮紙沿卷軸繞行方向做了切割,切割后的羊皮紙上的信息雜亂無章,信息得以加密。
公元前100年,高盧戰爭。羅馬帝國的凱撒大帝(Caesar)使用以自己的名字命名的密碼—凱撒密碼,對重要的軍事信息進行加密,這是一種簡單的單字母替代密碼,屬于替代法。在當時,凱撒的敵人大多數是目不識丁的,對于這種“移形換位”大法,可謂是根本不知所云。凱撒密碼的加密強度,在當時來看是相當有效的。
公元1040年,北宋時期?;鹚幈亲嬖粒?99~1078)與北宋文字訓詁學家丁度(990~1053)等奉敕集體編撰了《武經總要》,共40卷,該書詳細記載了中國古代已知最早的軍事情報通信密碼。其中,收集了軍隊中常用的40種戰斗情況,編成40條短語,分別編碼產生密碼本。這套密碼的使用方法是,由軍事部門指定一首沒有重復字的五言律詩(40字),作為解密密鑰。詩中的每個字都與短語一一對應,短語順序在戰前臨時隨機排列。密碼本由戰時前后兩方高級將領保管,前后方通過該密碼本進行戰時通信。
公元1578年,瑪麗女王被伊麗莎白女王軟禁,安東尼·貝平頓(Anthony Babington)及其同黨意圖營救。英國人菲力普·馬尼斯(Philip van Marnix)利用頻度分析法,成功破解了安東尼發給瑪麗的密碼信。信件內容除了營救瑪麗女王的計劃外,還計劃行刺伊麗莎白女王。信件的破解將安東尼及其同黨一舉抓獲,審判并處死了瑪麗女王。
2.1.2 機械加密階段
19世紀末至20世紀初,工業革命促進了機械和機電技術的發展,密碼學進入機械加密階段。工業革命為密碼學的發展提供了基礎,世界大戰的爆發為密碼學的飛躍提供了契機。
在第一次世界大戰中,密碼分析有了重大突破,它是戰爭能否取得勝利的重要因素之一;在第二次世界大戰中,密碼學經歷了它的黃金時代,在戰爭中扮演了更重要的角色。
1.第一次世界大戰
19世紀末,無線電技術的發明和使用使通信工具發生了革命性的變革。由此產生了以密碼技術為核心的包括偵察、測向、信號分析、通信分析等一整套無線電信號偵察以及對抗這種偵察的信號保密技術。軍事電報的加密與破解成為同盟國與協約國取得成敗的關鍵。
1914年8月,俄國在芬蘭灣口擊沉德國“馬格德堡”輕巡洋艦,在德國軍艦殘骸里,俄國潛水員意外發現了一份德國海軍的密碼本,并將其提供給英國,使英國人輕而易舉地破譯了德國海軍的無線電密碼。1916年5月30日下午,英國情報部門憑借截獲的德國海軍無線電密碼,破譯德國海軍電報,日德蘭海戰以英國皇家海軍勝利告終。
1917年1月16日,德意志帝國外交秘書阿瑟·齊默爾曼向德國駐墨西哥大使亨尼?!ゑT·艾克哈爾特(Heinrich von Eckardt)發出的加密電報—齊默爾曼電報,電報內容建議墨西哥與德意志帝國結成對抗美國的軍事聯盟。在這個緊要關頭,電報內容被英國破譯密碼的專門機構“40號房間”所截獲,利用繳獲的德國密碼本破譯了電報的內容,此次事件被稱為“情報史上最偉大的密碼破譯事件”。“齊默爾曼電報”的破譯,促使美國放棄中立參戰,改變了戰爭進程。
2.第二次世界大戰
20世紀初,機械及機電技術的快速發展,加速了密碼設備的變革—轉輪密碼機的發明。轉輪密碼機的出現是密碼學的重要標志之一,促進了傳統密碼學的進展,提高了機密系統的加密復雜度。轉輪密碼機Enigma,別名“謎”(恩尼格瑪密碼機)的出現,成為密碼學界劃時代的豐碑。德國發明家亞瑟·謝爾比烏斯(Arthur Scherbius)發明了Enigma;波蘭數學家馬里安·雷耶夫斯基(Marian Rejewski)初步破解了簡單的Enigma,而英國數學家阿蘭·圖靈(Alan Turing)
徹底終結了最高難度的Enigma。
1941年12月8日,美國對日本宣戰。在整個太平洋上,美軍與日軍展開了全面的島嶼爭奪戰。在電影《風語者》中,日軍以成功破解美軍軍事通信密碼,占據戰場上的優勢,極大地阻礙著美軍前進的步伐。1942年,美軍征召納瓦霍人(Navajo,美國最大的印第安部落)加入海軍,并訓練他們使用納瓦霍語言作為通信密碼。所謂“風語者”,就是使用納瓦霍語言的通信兵。這是密碼學和語言學的成功結合,使得納瓦霍語成為唯一沒有被日本破獲的密碼,并且成為贏得這場戰爭的關鍵。
1942年1月,大西洋海戰進入第二階段。德軍以高人一等的密碼通信能力,使用“狼群”戰術發動大規模無限制潛艇戰,致使同盟國節節受挫。在電影《獵殺U-571》中,美軍為截獲德軍密碼機在大西洋上與德軍潛艇U-571展開了殊死的斗爭,最終以截獲德軍密碼機告終。德軍密碼機的截獲,使美軍迅速破譯了德軍指令,扭轉了大西洋戰事,有力地回擊了德軍的無限制大規模潛艇戰爭,加速了第二次世界大戰的終結。
2.1.3 計算機加密階段
第二次世界大戰后,計算機與電子學快速發展,促進并推動了密碼學進入計算機加密階段。在這一階段,計算機成為密碼設計與破譯的平臺:利用計算機可以設計出更為復雜的加密算法,避免了徒手設計時容易造成的錯誤;利用計算機可以對加密算法進行破譯,縮短了破譯時間。當然,許多設計高明的加密算法的速度通常都很快而且占用資源少,但破解它卻需要消耗大量的資源,破解通常以失敗告終。在1949年之前,密碼學是一門藝術;在1949~1975年,密碼學成為科學;1976年以后,密碼學有了的新方向—公鑰密碼學;1977年以后,密碼學廣泛應用于各種場所。
1949年,信息論始祖克勞德·艾爾伍德·香農(Claude Elwood Shannon)發表了《保密系統的通信理論》一文,把密碼學建立在嚴格的數學基礎之上,為密碼學的發展奠定了理論基礎。密碼學由此成為一門真正的科學。在此之前,密碼學完全是一門藝術,密碼的設計和分析完全依賴于密碼專家的直覺。
1976年,密碼學專家迪菲(Whitfield Diffie)和赫爾曼(Martin E. Hellman)兩人發表了《密碼學的新方向》一文,解決了密鑰管理的難題,把密鑰分為加密的公鑰和解密的私鑰,提出了密鑰交換算法(Diffie-Hellman,D-H),這是密碼學的一場革命。
1977年,美國國家標準枝術研究所(National Institute of Standards and Technology,NIST)制定數據加密標準(Data Encryption Standard,DES),將其頒布為國家標準,這是密碼學歷史上一個具有里程碑意義的事件。
同年,密碼學專家羅納德·李維斯特(Ronald L.Rivest)、沙米爾(Adi Shamir)和阿德勒曼(Len Adleman)在美國麻省理工學院,共同提出第一個較完善的公鑰密碼體制—RSA體制,這是一種建立在大數因子分解基礎上的算法,RSA為數字簽名奠定了基礎。RSA源于整數因子分解問題,DSA源于離散對數問題。RSA和DSA是兩種最流行的數字簽名機制。數字簽名是公鑰基礎設施(Public Key Infrastructure,PKI)以及許多網絡安全機制(SSL/TLS,VPNs等)的基礎。自此以后,密碼學成為通信、計算機網絡、計算機安全等方面的重要工具。
1985年,英國牛津大學物理學家戴維·多伊奇(David Deutsch)提出了量子計算機的初步設想。利用量子計算機,僅需30秒鐘即可完成傳統計算機要花上100億年才能完成的大數因子分解,從而破解RSA運用這個大數產生公鑰來加密的信息。
同年,物理學家貝內特(Charles H. Bennett)根據多伊奇關于量子密碼術的協議,在實驗室第一次實現了量子密碼加密信息的通信。盡管通信距離僅有30厘米,仍舊證明了量子密碼術的實用性。
1997年1月,美國國家標準技術研究所征集新一代數據加密標準,即高級數據加密標準(Advanced Encryption Standard,AES)。最終,比利時密碼學家兼計算機科學家Vincent Rijmen和Joan Daemen設計的Rijndael加密算法入選,因此AES算法也稱為Rijndael算法。高級數據加密標準用以替代原先的DES,謀求更加安全的加密算法。2002年5月26日,美國國家標準技術研究所將其定為有效的加密標準。
2003年,位于日內瓦的id Quantique公司和位于紐約的MagiQ技術公司,推出了傳送量子密鑰的距離超越了貝內特實驗中30厘米的商業產品。由此,量子密碼學進入商業化。
進入計算機加密階段后,密碼學應用不再局限于軍事、政治和外交領域,逐步擴大到商務、金融和社會的其他各個領域。密碼學的研究和應用已大規模擴展到了民用方面。
2.2 密碼學定義、術語及其分類
歷經四千多年的風風雨雨,密碼學逐步發展成為一門學科,對于它的定義也越來越清晰,那么什么是密碼學呢?
? 密碼學:主要是研究保密通信和信息保密的問題,包括信息保密傳輸和信息加密存儲等。密碼學包含密碼編碼學(Cryptography)和密碼分析學(Cryptanalyst)兩個分支。編碼學與分析學相互促進,又相互制約。一方面,兩者在加強密碼分析的安全上相互促進;另一方面,兩者在實施更為有效的攻擊方面也相互影響。
? 密碼編碼學:主要研究對信息進行編碼,實現對信息的隱蔽,是密碼學理論的基礎,也是保密系統設計的基礎。
? 密碼分析學:主要研究加密消息的破譯或消息的偽造,是檢驗密碼體制安全性最為直接的手段,只有通過實際密碼分析考驗的密碼體制,才是真正可用的。
2.2.1 密碼學常用術語
在簡要了解了密碼學的一些基本概念后,讓我們來看一下密碼學常用術語,如下所示:
? 明文(Plaintext):指待加密信息。明文可以是文本文件、圖片文件、二進制數據等。
? 密文(Ciphertext):指經過加密后的明文。密文通常以文本、二進制數據等形式存在。
? 發送者(Sender):指發送消息的人。
? 接收者(Receiver):指接收消息的人。
? 加密(Encryption):指將明文轉換為密文的過程。
? 加密算法(Encryption Algorithm):指將明文變化為密文的轉換算法。
? 加密密鑰(Encryption Key):指通過加密算法進行加密操作用的密鑰。
? 解密(Decryption):指將密文轉換成明文的過程。
? 解密算法(Decryption Algorithm):指將密文轉換為明文的轉換算法。
? 解密密鑰(Decryption Key):指通過解密算法進行解密操作用的密鑰。
? 密碼分析(Cryptanalysis):指截獲密文者試圖通過分析截獲的密文從而推斷出原來的明文或密鑰的過程。
? 密碼分析者(Cryptanalyst):等同于密碼破譯者,指從事密碼分析的人。
? 被動攻擊(Passive Attack):指對一個保密系統采取截獲密文并對其進行分析和攻擊。這種攻擊對密文沒有破壞作用。
? 主動攻擊(Active Attack):指攻擊者非法入侵密碼系統,采用偽造、修改、刪除等手段向系統注入假消息進行欺騙。這種攻擊對密文具有破壞作用。
? 密碼體制(Cipher System):由明文空間、密文空間、密鑰空間、加密算法和解密算法五部分構成。
? 密碼協議(Cryptographic Protocol):有時也稱為安全協議,是指以密碼學為基礎的消息交換的通信協議,其目的是在網絡環境中提供各種安全服務。密碼協議與密碼算法同等重要,堪稱當今密碼學研究的兩大課題。密碼學是網絡安全的基礎,但網絡安全不能單純依靠安全的密碼算法。密碼協議是網絡安全的一個重要組成部分,通過密碼協議進行實體之間的認證、在實體之間安全地分配密鑰或其他各種秘密、確認發送和接收的消息的不可否認性等。
? 密碼系統(Cryptography):指用于加密和解密的系統。加密時,系統輸入明文和加密密鑰,加密變化后,輸出密文;解密時,系統輸入密文和解密密鑰,解密變換后,輸入明文。一個密碼系統由信源、加密變換、解密變化、信宿和攻擊者組成。密碼系統強調密碼方案的實際應用,通常應當是一個包含軟、硬件的系統。
? 柯克霍夫原則(Kerckhoffs’ Principle):數據的安全基于密鑰而不是算法的保密。換句話說,系統的安全性取決于密鑰,對密鑰保密,對算法公開。信息論始祖克勞德·艾爾伍德·香農(Claude Elwood Shannon)將其改為“敵人了解系統”,這樣的說法稱為香農箴言。柯克霍夫原則是現代密碼學設計的基本原則。
2.2.2 密碼學分類
密碼學起源于古代,發展于現代。隨著時間的推移,密碼學不斷完善,逐步擁有了眾多分類??梢詮臅r間上劃分,也可以從保密內容的算法上劃分,還可以從密碼體制上劃分,下面將詳細介紹這3類密碼。
1.按時間劃分
從時間上可以分為古典密碼和現代密碼,古典密碼以字符為基本加密單元,2.4節中將會有詳細的闡述;現代密碼以信息塊為基本加密單元。
2.按保密內容的算法劃分
根據保密內容的算法可分為受限制算法和基于密鑰算法。
? 受限制(Restricted)算法:算法的保密性基于保持算法的秘密。一般不贊成使用這種算法,除非應用于類似軍事一類的應用,算法由專業機構開發、驗證,確保其算法的安全性。這是古典密碼學的主要特征。
? 基于密鑰(Key-Based)算法:算法的保密性基于對密鑰的保密。這其實是基于柯克霍夫原則設計的算法,這樣做的好處是:算法的公開有助于算法安全性的驗證,算法的漏洞得以及時修正,避免算法的設計者在算法上留下后門等。這正是現代密碼學的主要特征。
3.按密碼體制劃分
根據密碼體制可分為對稱密碼體制和非對稱密碼體制。
? 對稱密碼體制(Symmetric Cryptosystem):也稱為單鑰密碼體制或私鑰密碼體制,將在2.5節詳細闡述。指該密碼體制中的加密密鑰與解密密鑰相同,即加密過程與解密過程使用同一套密鑰。
? 非對稱密碼體制(Asymmetric Cryptosystem):也稱為雙鑰密碼體制或公鑰密碼體制。指該密碼體制中的加密密鑰與解密密鑰不同,密鑰分為公鑰與私鑰。公鑰對外公開,私鑰對外保密。
與上述密碼體制對應的算法有對稱密碼算法和非對稱密碼算法。
? 對稱密碼算法(Symmetric Cipher):也稱為單鑰密碼算法或私鑰密碼算法。指對應于對稱密碼體制的加密、解密算法。常見的DES、AES算法都是對稱密碼算法的典范。
? 非對稱密碼算法(Asymmetric Cipher):也稱為雙鑰密碼算法或公鑰密碼算法。指對應于非對稱密碼體制的加密、解密算法。大名鼎鼎的RSA算法就是非對稱密碼算法,多應用于數字簽名、身份認證等。當然,非對稱密碼算法的相對于對稱密碼算法有著更高的安全性,卻有著不可回避的加密解密的耗時長的問題。
4.按明文的處理方法劃分
根據明文的處理方法可分為分組密碼和流密碼。
? 分組密碼(Block Cipher):指加密時將明文分成固定長度的組,用同一密鑰和算法對每一塊加密,輸出也是固定長度的密文。分組密碼多應用于網絡加密。
? 流密碼(Stream Cipher):也稱為序列密碼。指加密時每次加密一位或一個字節的明文。手機平臺對應用使用系統資源有著極為苛刻的要求,這恰恰給了對系統資源要求極低的流密碼以用武之地。RC4是相當有名的流密碼算法。
在手工加密階段和機械加密階段,流密碼曾是當時的主流。現代密碼學的研究主要關注分組密碼和流密碼及其應用。在對稱密碼體制中,大部分加密算法屬于分組密碼。關于分組密碼和流密碼的詳細內容,請閱讀2.5節。
2.3 保密通信模型
密碼學并不是孤立地存在的,它需要有一個環境,就是保密通信模型。在了解了密碼學的基本術語后,我們來討論保密通信模型。
密碼學的目的在于確保信息的保密傳送。通常這樣理解這層含義,信息的發送者和接收者在不安全的信道上進行通信,而破譯者不能理解他們通信的內容。用保密通信模型來詮釋這種信息傳送方式,如圖2-1所示。
在上述模型中,信息的發送者和接收者要在不安全的信道上交換機要信息,為避免破譯者竊聽,需要對機要信息進行加密和解密處理。加密信息在傳送過程中即使被破譯者截獲,也不能被破譯?;诳驴嘶舴蛟瓌t,只要密鑰安全,即便破譯者知道該密碼系統的加密算法,也無法對加密信息進行破譯。在這個模型中,加密密鑰很可能和解密密鑰是同一個密鑰,或者說由一方密鑰可以推導出另一方密鑰,這就是對稱加密密碼體制;反之,加密密鑰與解密密鑰不同,由一方密鑰難以推導出另一方密鑰,這就是非對稱加密密碼體制。

圖2-1 保密通信模型
2.4 古典密碼
古典密碼(Classical Cipher)起始于古代終止于19世紀末,是現代密碼的基礎。當時生產力水平較低,普遍采用紙、筆或簡單器械完成加密、解密操作,正是密碼學發展史上手工加密階段迅速發展的時期。雖然,古典密碼由于安全性較低、效率低等多種缺陷已經退出了歷史舞臺,但古典密碼對于密碼學的研究卻有著不可替代的作用。
古典密碼受限于當時的環境,以語言學為基礎對文字進行字符變化,也就是對字符加密,以達到信息加密的目的。古典加密算法最常用、最核心的兩種加密技巧是移位和替代,這同樣是對稱加密算法最常用的方法。
? 移位密碼(Transposition Cipher):也稱錯位密碼。將字符的順序重新排列。例如,將“1234567890”變成“3216549870”。這種加密算法看似簡單,但卻十分有效。如果不能領會其中的規律,很難辨別其內容的真正含義。
? 替代密碼(Substitution Cipher):也稱置換密碼。將明文中的一組字符替代成其他的字符,形成密文。例如,“Encryption algorithm”變成“Fodszqujpo bmhpsjuin”(每個字母用下一個字母替代)。接收者對密文做反向替代就可以恢復明文。著名的凱撒密碼就應用了替代式算法。
在古典加密時代,替代密碼發展迅速,而且變得更加復雜,擁有眾多分支,又分為如下幾種。
? 單表替代密碼(Monoalphabetic Cipher):也稱簡單替代密碼。明文的一個字符用相應的一個密文字符代替。加密過程中是從明文字母表到密文字母表的一一映射。主要包括移位(shift)密碼、乘數(multiplicative)密碼、仿射(affine)密碼、多項式(Polynomial)密碼、密鑰短語(Key Word)密碼。
? 同音替代密碼(Homophonic Substitution Cipher):也稱多名替代密碼。與單表替代系統相似,唯一的不同是單個字符明文可以映射成密文的幾個字符之一,例如,A可能對應于5、13、25或56,“B”可能對應于7、19、31或42,所以,同音代替的密文并不唯一。電影《風語者》中,美軍征召納瓦霍人加入海軍,訓練他們使用納瓦霍語言作為通
信密碼,這實際上是應用了多名替代密碼。
? 多表替代密碼(Ployalphabetic Substitution Cipher):明文中的字符映射到密文空間的字符還依賴于它在上下文中的位置。由多個簡單的代替密碼構成,例如,可能有5個被使用的不同的簡單代替密碼,單獨的一個字符用來改變明文的每個字符的位置。弗吉尼亞(Vigenere)密碼、博福特(Beaufort)密碼、滾動密鑰(running-key)密碼、弗納姆(Vernam)密碼、轉子機(rotor machine)密碼均為多表替代密碼。第二次世界大戰中,德軍用的轉子加密機—Enigma,正是多表替代密碼應用的典范。
? 多字母替代密碼(Polygram Substitution Cipher):明文中的字符被成組加密,例如“ABA”可能對應于“RTQ”,ABB可能對應于“SLL”等。希爾(Hill)密碼、Playfair密碼均為多字母替代密碼。在第一次世界大戰中英國人就采用了這種密碼。
不管是移位算法還是替代算法,終究脫離不開人類語言。針對該特點,通過對密文進行語義分析使得古典密碼在破譯上有章可循。例如,凱撒密碼是單表替代密碼,要破解凱撒密碼,只要以語言學為基礎,找出使用頻度最高的字符,如' '和 'e',用ASCII碼表示就是32和101,差值69。如果明文中兩個出現頻率最高的字符的ASCII碼相差69,那么加密后密文中相應出現頻率最高的字符的ASCII碼相差也一定是69。很顯然,通過這樣的分析方法,只要找出密文中與之對應的字符,計算偏移量—密鑰,就可以破譯密文,這就是著名的頻度分析法。公元1578年,瑪麗女王營救計劃因密信被破解而以失敗告終,當時使用的破解方法就是頻度分析法。
2.5 對稱密碼體制
對稱密碼體制并不是現代密碼學的新生產物,它是古典密碼學的進一步延續。古典密碼常用的兩種技巧—替代和移位,仍然是對稱密碼體制中最重要的加密技巧。
對稱密碼體制的保密通信模型如圖2-2所示。對稱密碼體制要求加密與解密使用同一個共享密鑰,解密是加密的逆運算,由于通信雙方共享同一個密鑰,這就要求通信雙方必須在通信前商定該密鑰,并妥善保存該密鑰,該密鑰稱為秘密密鑰。秘密密鑰的存在使得對稱密碼體制開放性變差。

圖2-2 對稱密碼體制的保密通信模型
對稱密碼體制分為兩種:一種是對明文的單個位(或字節)進行運算,稱為流密碼,也稱為序列密碼;另一種是把明文信息劃分成不同的組(或塊)結構,分別對每個組(或塊)進行加密和解密,稱為分組密碼。
2.5.1 流密碼
流密碼是軍事、外交等機要部門中應用最為廣泛的對稱密碼體制。同時,它也是手機應用平臺最常用的加密手段。流密碼實現較為簡單,加密時將明文按字符(或字節)逐位進行加密,解密時將密文按字符(字節)逐位解密。加密、解密可以是簡單的位運算,如模n運算。明文加密后,生成的密文幾乎和明文保持同樣的長度。流密碼加密與解密的流程如圖2-3所示。

圖2-3 流密碼加密與解密流程
流密碼分為同步流(序列)密碼和自同步流(序列)密碼。
1.同步流密碼
信息發送方和接收方在傳遞信息時,同步進行加密解密操作,明文與密文一一對應。密文的內容如果在傳輸過程中被篡改、刪除或插入,可導致同步失效,以致密文解密失敗,必須通過重新同步來實現解密、恢復密文。在密文傳輸過程中,如果一個密文位發生變化,那么該位的變化只影響該位的恢復,對后續密文位不影響,這是同步流密碼的一個重要特點。但是,根據該特性主動攻擊者可以有選擇地對密文字符進行改動,并準確知道這些改動對明文的影響。因此,同步流密碼具有同步性、無錯誤傳遞性及主動攻擊性三種特性。同步流密碼適用于為音頻和視頻數據提供版權保護。
2.自同步流密碼
與同步流密碼相比,自同步流密碼是一種有記憶變換的密碼。每一個密鑰與已產生的固定數量的密文位有關,密鑰由已生成的密文決定。在密文傳輸過程中,如果一個密文位發生變化,那么該位的變化會影響到后續有限位(如n位)的密文位的正確解密。所以,自同步流密碼有錯誤傳遞現象。但是,在接收n位正確密文字符后,密碼自身會實現重新同步?;谶@一特點,如果主動攻擊者對密文做了修改,接收方仍然不能檢測出密文的完整性。與同步流密碼相比,自同步流密碼的密碼分析更加困難,安全性更高。因此,自同步流密碼具有自同步性、錯誤傳遞有限性、主動攻擊性及明文統計擴散性四種特性。
流密碼實現簡單、便于硬件計算、加密與解密處理速度快、錯誤傳播率低等優點。但是,流密碼對錯誤的產生不夠敏感,這是流密碼的缺點。為了彌補這一缺點,流密碼通常配合其他技術驗證信息的完整性。流密碼涉及大量的理論知識,受限于應用場合(目前主要用于軍事和外交等機要部門),許多研究成果并未完全公開。目前使用較多的流密碼是自同步流密碼。流密碼的常用算法有RC4和SEAL等。
流密碼的安全強度依賴于密鑰流生成器所產生的密鑰流序列的特征,關鍵在于密鑰生成器的設計以及信息收發兩端密鑰流產生的同步技術。
2.5.2 分組密碼
分組密碼多應用于網絡加密,是對稱密碼體制中發展最為完善的密碼體制。分組密碼對固定長度的一組明文進行加密,這一固定長度稱為分組長度。分組長度是分組密碼的一個參數,它與分組算法的安全性成正比,其取值范圍取決于實際應用的環境。為保證分組算法的安全性,分組長度越長越好,分組長度越長,則密碼分析越困難;為保證分組密碼的實用性,分組長度越短越好,分組長度越短,則越便于操作和運算。分組長度的設定需要權衡分組算法的安全性與實用性,一般設置為56位。但隨著密碼學的發展,分組長度只有56位的分組密碼已經不能確保算法的安全性。目前,分組密碼多選擇128位作為算法的分組長度。
分組密碼的加密過程是對一個分組長度為n位的明文分組進行加密操作,相應地產生一個n位的密文分組,由此可見,不同的n位明文分組共有2n個??紤]到加密算法的可逆性(即保證解密過程的可行性),每一個不同的n位明文分組都應該產生一個唯一的密文分組,加密過程對應的變換稱為可逆變換或非奇異變換。所以,分組密碼算法從本質上來說是定義了一種從分組的明文到相應的密文的可逆變換。
分組密碼是現代密碼學的重要組成部分,具有代表的分組加密算法有DES、AES等,我們將在后續章節具體探討如何實現分組密碼。
1.分組密碼設計原則
分組密碼的設計原則包括安全性和實現性兩個方面。前者主要研究如何設計安全算法,分組長度和密鑰長度,后者主要討論如何提高算法的執行速度。
(1)針對安全的一般設計原則
安全性原則也稱為不可破譯原則,它包含理論上不可破譯和實際上不可破譯兩重含義。香農認為:在理想密碼系統中,密文的所有統計特性都與所使用的密鑰獨立。關于實用密碼的兩個一般的設計原則是香農提出的混亂原則和擴散原則。
? 擴散(Diffusion)原則:人們所設計的密碼應使得密鑰的每一位數字影響到密文的多位數字,以防止對密鑰進行逐段破譯,而且明文的每一位數字也影響密文的多位數字以便隱藏明文數字的統計性。
? 混亂(Confusion)原則:人們所設計的密碼應使得密鑰和明文以及密文之間的信賴關系相當復雜以至于這種信賴性對密碼分析者來說是無法利用的。
如何衡量一個密碼體制的安全性?
主要有以下幾個方面:
1)密碼體制的破譯所需要的時間和費用超出了現有的資源和能力。
2)密碼體制的破譯所需要的時間超過了該體制所保護的信息的有效時間。
3)密碼體制的破譯所需要的費用超過了該體制所保護的信息的價值。
(2)針對實現的設計原則
分組密碼可以用軟件和硬件來實現。硬件實現的優點是可獲得高效率,而軟件實現的優點是靈活性強、代價低。
? 軟件實現的設計原則:使用子塊和簡單的運算。密碼運算在子塊上進行,要求子塊的長度能自然地適應軟件編程,如8、16、32位等。應盡量避免按位置換,在子塊上所進行的密碼運算盡量采用易于軟件實現的運算。最好是用處理器的基本運算,如加法、乘法、移位等。
? 硬件實現的設計原則:加密和解密的相似性,即加密和解密過程的不同應局限于密鑰使用方式上,以便采用同樣的器件來實現加密和解密,以節省費用和體積。盡量采用標準的組件結構,以便能適應于在超大規模集成電路中實現。
2.分組密碼工作模式
我們以DES算法工作模式為例,DES算法根據其加密算法所定義的明文分組的大?。?6位),將數據分割成若干56位的加密區塊,再以加密區塊為單位,分別進行加密處理。如果最后剩下不足一個區塊的大小,我們稱之為短塊,短塊的處理方法有填充法、流密碼加密法、密文挪用技術。
1980年12月,DES算法工作模式被美國聯邦信息處理標準組織(Federal Information Processing Standard,FIPS)標準化。加密算法應用的復雜性,有的強調效率,有的強調安全,有的強調容錯性。根據數據加密時每個加密區塊間的關聯方式來區分,可以分為4種工作模式:電子密碼本模式(Electronic Code Book,ECB)、密文鏈接模式(Cipher Book Chaining,CBC)、密文反饋模式(Cipher Feed Back,CFB)、輸出反饋模式(Output Feed Back,OFB)。AES標準除了推薦上述4種工作模式外,還推薦了一種新的工作模式:計數器模式(Counter,CTR)。這些工作模式可適用于各種分組密碼算法。
? 電子密碼本模式—ECB
電子密碼本模式如圖2-4所示,它是最基本、最易理解的工作模式。每次加密均產生獨立的密文分組,每組的加密結果不會對其他分組產生影響,相同的明文加密后對應產生相同的密文,無初始化向量(也稱為加密向量)??梢哉J為有一個非常大的電碼本,對任意一個可能的明文分組,電碼本中都有一項對應于它的密文,這也是該模式名稱的由來。
? 優點:易于理解且簡單易行;便于實現并行操作;沒有誤差傳遞的問題。
? 缺點:不能隱藏明文的模式,如果明文重復,對應的密文也會重復,密文內容很容易被替換、重排、刪除、重放;對明文進行主動攻擊的可能性較高。
? 用途:適合加密密鑰,隨機數等短數據。例如,安全地傳遞DES密鑰,ECB是最合適的模式。

圖2-4 電子密碼本模式
? 密文鏈接模式—CBC
密文鏈接模式如圖2-5所示,它是目前應用最廣泛的工作模式。明文加密前需先與前面的密文進行異或運算(XOR)后再加密,因此只要選擇不同的初始向量,相同的明文加密后產生不同的密文。
? 優點:密文鏈接模式加密后的密文上下文關聯,即使在明文中出現重復的信息也不會產生相同的密文;密文內容如果被替換、重排、刪除、重放或網絡傳輸過程中發生錯誤,后續密文即被破壞,無法完成解密還原;對明文的主動攻擊的可能性較低。
? 缺點:不利于并行計算,目前沒有已知的并行運算算法;誤差傳遞,如果在加密過程中發生錯誤,則錯誤將被無限放大,導致加密失敗;需要初始化向量。
? 用途:可加密任意長度的數據;適用于計算產生檢測數據完整性的消息認證碼MAC。
? 密文反饋模式—CFB
密文反饋模式如圖2-6所示,它類似于自同步流密碼,分組加密后,按8位分組將密文和明文進行移位異或后得到輸出同時反饋回移位寄存器。它的優點是可以按字節逐個進行加密解密,也可以按n位字節處理。CFB是上下文相關的,明文的一個錯誤會影響后面的密文(錯誤擴散)。CFB需要一個初始化向量,加密后與第一個分組進行異或運算產生第一組密文;然后,對第一組密文加密后再與第二個分組進行異或運算取得第二組密文,以此類推,直到加密完畢。

圖2-5 密文鏈接模式

圖2-6 密文反饋模式
? 優點:隱藏了明文的模式,每一個分組的加密結果必受其前面所有分組內容的影響,即使出現多次相同的明文,均產生不同的密文;分組密碼轉化為流模式,可產生密鑰流;可以及時加密傳送小于分組的數據。
? 缺點:與CBC相類似。不利于并行計算,目前沒有已知的并行運算算法;存在誤差傳送,一個單元損壞影響多個單元;需要初始化向量。
? 用途:因錯誤傳播無界,可用于檢查發現明文密文的篡改。
? 輸出反饋模式—OFB
輸出反饋模式如圖2-7所示,它將分組密碼作為同步流密碼運行,和CFB相似,不過OFB用的是前一個n位密文輸出分組反饋回移位寄存器,OFB沒有錯誤擴散問題。該模式產生與明文異或運算的密鑰流,從而產生密文,這一點與CFB大致相同,唯一的差異是與明文分組進行異或的輸入部分是反復加密后得到的。

圖2-7 輸出反饋模式
? 優點:隱藏了明文的模式;分組密碼轉化為流模式;無誤差傳送問題;可以及時加密傳送小于分組的數據。
? 缺點:不利于并行計算;對明文的主動攻擊是可能的,安全性較CFB差。
? 用途:適用于加密冗余性較大的數據,比如語音和圖像數據。
? 計數器模式—CTR
計數器模式如圖2-8所示,它的特點是將計數器從初始值開始計數所得到的值發送給分組密碼算法。隨著計數器的增加,分組密碼算法輸出連續的分組來構成一個位串,該位串被用來與明文分組進行異或運算。計數器模式是用來提取分組密碼的最大效能以實現保密性的。在AES的實際應用中,經常會選擇CBC模式和CTR模式,但更多的是選擇CTR模式。

圖2-8 計數器模式
? 優點:可并行計算;安全性至少與CBC模式一樣好;加密與解密僅涉及密碼算法的加密。
? 缺點:沒有錯誤傳播,因此不易確保數據完整性。
? 用途:適用于各種加密應用。
2.6 非對稱密碼體制
1976年,密碼學專家Diffie和Hellman在《密碼學的新方向》一文中提出了公開密鑰密碼體制的思想,開創了現代密碼學的新領域,非對稱密碼體制的篇章由此揭開。
非對稱密碼體制的保密通信模型如圖2-9所示。非對稱密碼體制與對稱密碼體制相對,其主要的區別在于:非對稱密碼體制的加密密鑰和解密密鑰不相同,分為兩個密鑰,一個公開,一個保密。公開的密鑰稱為公鑰,保密的密鑰稱為私鑰。因此,非對稱密碼體制也稱為公鑰密碼體制。非對稱密碼體制使得發送者和接收者無密鑰傳輸的保密通信成為可能,彌補了對稱密碼體制的缺陷。

圖2-9 非對稱密碼體制的保密通信模型
在非對稱密碼體制中,公鑰和私鑰均可用于加密與解密操作,但它與對稱密碼體制有極大的不同。公鑰與私鑰分屬通信雙方,一份消息的加密與解密需要公鑰與私鑰共同參與。公鑰加密則需要私鑰解密,反之,私鑰加密則需要公鑰解密。我們把通信雙方定義為甲乙兩方,甲乙兩方分場景扮演信息發送者或接收者。公鑰與私鑰分屬甲乙兩方,甲方擁有私鑰,乙方擁有公鑰。為了更好地描述非對稱密碼體制通信流程,我們通過圖2-10、圖2-11來說明甲乙雙方如何完成一次完整的會話。
甲方(發送方)用私鑰加密數據向乙方發送數據,乙方(接收方)接收到數據后使用公鑰解密數據,如圖2-10所示。

圖2-10 私鑰加密-公鑰解密的保密通信模型
乙方(發送方)用公鑰加密數據向甲方發送數據,甲方(接收方)接收到數據后使用私鑰解密數據,如圖2-11所示。
非對稱密碼體制的主要優點是可以適應開放性的使用環境,密鑰管理問題相對簡單,可以方便、安全地實現數字簽名和驗證。RSA是非對稱密碼體制的典范,它不僅可以完成一般的數據保密操作,同時它也支持數字簽名與驗證。關于數字簽名,請參見2.8節。除了數字簽名,非對稱密碼體制還支持數字信封等技術。我們將在后續章節詳細講述該類技術的具體實現。
非對稱密碼算法的安全性完全依賴于基于計算復雜度上的難題,通常來自于數論。例如, RSA源于整數因子分解問題;DSA—數字簽名算法,源于離散對數問題;ECC—橢圓曲線加密算法,源于離散對數問題。由于這些數學難題的實現多涉及底層模數乘法或指數運算,相對于分組密碼需要更多的計算資源。為了彌補這一缺陷,非對稱密碼系統通常是復合式的:用高效率的對稱密碼算法對信息進行加密解密處理;用非對稱密鑰加密對稱密碼系統所使用的密鑰。通過這種復合方式增進效率。

圖2-11 公鑰加密-私鑰解密的保密通信模型
2.7 散列函數
在講到對稱密碼體制的流密碼實現方式時,曾經提到過對于信息完整性驗證需要其他技術來支持,這種技術就是由散列函數提供的消息認證技術。
散列函數,也稱做哈希函數、消息摘要函數、單向函數或雜湊函數。與上述密碼體制不同的是,散列函數的主要作用不是完成數據加密與解密的工作,它是用來驗證數據的完整性的重要技術。通過散列函數,可以為數據創建“數字指紋”(散列值)。散列值通常是一個短的隨機字母和數字組成的字符串。消息認證流程如圖2-12所示。

圖2-12 消息認證流程
在上述認證流程中,信息收發雙方在通信前已經商定了具體的散列算法,并且該算法是公開的。如果消息在傳遞過程中被篡改,則該消息不能與已獲得的數字指紋相匹配。
散列函數具有以下一些特性:
? 消息的長度不受限制。
? 對于給定的消息,其散列值的計算是很容易的。
? 如果兩個散列值不相同,則這兩個散列值的原始輸入消息也不相同,這個特性使得散列函數具有確定性的結果。
? 散列函數的運算過程是不可逆的,這個特性稱為函數的單向性。這也是單向函數命名的由來。
? 對于一個已知的消息及其散列值,要找到另一個消息使其獲得相同的散列值是不可能的,這個特性稱為抗弱碰撞性。這被用來防止偽造。
? 任意兩個不同的消息的散列值一定不同,這個特性稱為抗強碰撞性。
散列函數廣泛用于信息完整性的驗證,是數據簽名的核心技術。散列函數的常用算法有MD—消息摘要算法、SHA—安全散列算法及MAC—消息認證碼算法。我們將在后續章節詳述上述散列函數的算法實現。
2.8 數字簽名
通過散列函數可以確保數據內容的完整性,但這還遠遠不夠。此外,還需要確保數據來源的可認證(鑒別)性和數據發送行為的不可否認性。完整性、認證性和不可否認性,正是數字簽名的主要特征。數字簽名針對以數字形式存儲的消息進行處理,產生一種帶有操作者身份信息的編碼。執行數字簽名的實體稱為簽名者,簽名過程中所使用的算法稱為簽名算法(Signature Algorithm),簽名操作中生成的編碼稱為簽名者對該消息的數字簽名。發送者通過網絡將消息連同其數字簽名一起發送給接收者。接收者在得到該消息及其數字簽名后,可以通過一個算法來驗證簽名的真偽以及識別相應的簽名者。這一過程稱為驗證過程,其過程中使用的算法稱為驗證算法(Verification Algorithm),執行驗證的實體稱為驗證者。數字簽名離不開非對稱密碼體制,簽名算法受私鑰控制,且由簽名者保密;驗證算法受公鑰控制,且對外公開。RSA算法則既是最為常用的非對稱加密算法,也是最為常用的簽名算法。DSA算法是典型的數字簽名算法,雖然本身屬于非對稱加密算法不具備數據加密與解密的功能。
數字簽名滿足以下三個基本要求:
? 簽名者任何時候多無法否認自己曾經簽發的數字簽名。
? 信息接收者能夠驗證和確認收到的數字簽名,但任何人無法偽造信息發送者的數字簽名。
? 當收發雙方對數字簽名的真偽產生爭議時,通過仲裁機構(可信賴的第三方)進行仲裁。
數字簽名認證流程如圖2-13所示。在這里提請大家注意:私鑰用于簽名,公鑰用于驗證。簽名操作只能由私鑰完成,驗證操作只能有公鑰完成;公鑰與私鑰成對出現,用公鑰加密的消息只能用私鑰解密,用私鑰加密的消息只能用公鑰解密。
那么,數字簽名認證是怎樣一個流程呢?我們暫定甲方擁有私鑰,并且甲方將公鑰發布給乙方;當甲方作為消息的發送方時,甲方使用私鑰對消息做簽名處理,然后將消息加密后連同數字簽名發送給乙方。乙方使用已獲得的公鑰對接收到的加密消息做解密處理,然后使用公鑰及數字簽名對原始消息做驗證處理。

圖2-13 數字簽名認證流程
當然,我們可以對消息先加密,然后對加密后的消息做簽名處理,這樣乙方獲得消息后,先做驗證處理,如果驗證通過則對消息解密。反之,驗證失敗則拋棄消息。這樣做顯然可以提高系統的處理速度,但即便如此,作者仍建議大家對消息先做簽名,再做加密處理。加密與簽名都應該只針對原始消息(明文)做處理。加密是為了確保消息在傳送過程中避免被破解,簽名是為了確保消息的有效性。消息本身可能就是一個可執行的文件,消息的接收方通過對消息的驗證來判別該文件是否有權執行,而這個文件本身是不需要加密的。
由于簽名不可偽造,甲方不能否認自己已發送的消息,而乙方可驗證消息的來源以及消息是否完整。數字簽名可提供OSI參考模型五類安全服務中的三種服務:認證(鑒別)服務、抗否認服務和數據完整性服務。正因如此,數字簽名成為公鑰基礎設施以及許多網絡安全機制的基礎。
在上述認證過程的描述中,似乎大家有這樣一個疑問:當乙方作為發送方,通過公鑰將消息加密后發送給甲方時,由于算法、公鑰公開,任何一個已獲得公鑰的竊聽者都可以截獲乙方發送的消息,替換成自己的消息發送給甲方,而甲方無法辨別消息是否來源于乙方。也就是說,上述的認證方式是單向的,屬于單向認證。如果有兩套公私鑰,甲乙兩方都對數據做簽名及驗證就可以避免這一問題。沒錯,這種認證方式正是雙向認證。以網銀交易為例,一般的網銀交易使用的都是單向認證方式,無法驗證使用者的身份;而要求較高的網銀交易則都是雙向認證方式,交易雙方身份都可以得到驗證。
2.9 密碼學的未來
密碼學歷經四千年錘煉,從古代走到了現代,從軍用走向了民用,逐步貼近我們生活領域的每一個角落。密碼學也有“新陳代謝”,各種國際著名的密碼算法被攻破,預示著更加安全的密碼算法即將誕生。
2.9.1 密碼算法的破解
密碼算法并不像我們想象的那么安全,我們所熟知的、常用的各種算法竟然在歷史的昨天就被破解。
1997年1月28日,美國的RSA數據安全公司在RSA安全年會上公布了一項“秘密密鑰挑戰”競賽,其中包括懸賞1萬美元破譯密鑰長度為56位的DES。位于美國科羅拉多州的程序員Verser從1997年2月18日起,用了96天時間,在網絡上數萬名志愿者的協同工作下,成功地找到了DES的密鑰,贏得了懸賞的1萬美元。
1998年7月,電子前沿基金會(EFF)使用一臺25萬美元的電腦在56小時內破譯了密鑰長度為56位的DES。
1999年1月,RSA數據安全會議期間,電子前沿基金會用22小時15分鐘就宣告破解了一個DES的密鑰。
2004年8月,在美國加州圣芭芭拉召開的國際密碼大會(Crypto’2004)上,山東大學王小云教授宣告她和她的團隊已經破解了MD5、HAVAL-128、MD4和RIPEMD四大國際著名密碼算法。MD5算法的破解預示著SHA-1算法的末日。
2005年2月,較之MD5算法有著更高安全系數的SHA-1算法毫無懸念地被王小云教授破解了。MD5和SHA-1的破解,動搖了目前數字簽名的理論根基,從理論上說明數字簽名可以偽造。
2007年,Marc Stevens、Arjen K. Lenstra和Benne de Weger進一步指出通過偽造軟件簽名,可重復性攻擊MD5算法。研究者使用前綴碰撞法(chosen-prefix collision),使程序前端包含惡意程序,利用后面的空間添上垃圾代碼湊出同樣的MD5散列值。
2008年,荷蘭埃因霍芬技術大學科學家成功把兩個可執行文件進行了MD5碰撞,使得這兩個運行結果不同的程序被計算出同一個MD5。2008年12月一組科研人員通過MD5碰撞成功生成了偽造的SSL證書,這使得在HTTPS協議中服務器可以偽造一些根CA的簽名。
盡管各種大名鼎鼎的密碼算法被破解,但這卻更加帶動了密碼學前進的腳步。也許不久的將來,量子密碼學將成為密碼學領域新一代的霸主!
2.9.2 密碼學的明天
隨著計算機網絡應用的迅猛發展,人們對信息安全和保密的重要性認識不斷提高,密碼學在信息安全中起著舉足輕重的作用,已成為信息安全中不可或缺的重要部分。從古代發展到現代,由軍用轉為民用,密碼學有著廣泛的發展前景。自動柜員機芯片卡、公交IC卡、電子商務等都離不開密碼學的支持。幾乎可以說有網絡的地方,就有密碼學的身影。隨著各種具有高度安全系數的國際密碼算法的破解,密碼算法正經歷著自己的“新陳代謝”。新的密碼學理論層出不窮,新的密碼算法嶄露頭角。我們堅信,密碼學的明天將有無限可能。
2.10 小結
縱觀密碼學的發展史,它的發展共經歷了三個發展階段,分別是手工加密階段、機械加密階段和計算機加密階段。手工加密階段最為漫長,期間孕育了古典密碼,為后期密碼學的發展奠定了基礎。機械工業革命發展的同時促進著各種科學技術的進步,密碼學也不例外。加之兩次世界大戰,更加促進了密碼學的飛速發展,密碼學由此進入現代密碼學階段。但盡管如此,在這一階段的密碼學仍舊未能擺脫古典密碼學的影子,加密與解密操作均有賴于語言學的支持,轉輪密碼機Enigma的發明與破解更是將這一特點發揮到了極致。隨著數據理論逐步介入,密碼學逐漸成為一門學科,而非一門藝術。進入計算機加密階段后,密碼學應用不再局限于軍事、政治和外交領域,逐步擴大到商務、金融和社會的其他領域。密碼學的研究和應用已大規模擴展到了民用方面。
密碼學主要包含兩個分支:密碼編碼學和密碼分析學。密碼編碼學針對于信息如何隱藏;密碼分析學針對于信息如何破譯。編碼學與分析學相互影響,共同促進密碼學的發展。
古典密碼是現代密碼的基礎,移位和替代是古典密碼最常用、最核心的兩種加密技巧。由此,古典密碼主要分為移位密碼和替代密碼。例如,凱撒密碼就是替代密碼的典范。替代密碼其分支眾多,包含單表替代密碼、同音替代密碼、多表替代密碼和多字母替代密碼。移位和替代技巧仍是現代密碼學最常用的兩種加密手段。
基于柯克霍夫原則,對密碼算法公開,對密鑰保密。密碼算法公開有助于提高算法的安全性,避免算法自身的漏洞,如算法的設計者為算法留有后門等。
從密碼體制上劃分,現代密碼學共分為兩種密碼體制:對稱密碼體制和非對稱密碼體制。對稱與非對稱的差別源于加密密鑰和解密密鑰是否對稱,即加密密鑰與解密密鑰是否相同(對稱)。
在對稱密碼體制中,加密與解密操作使用相同的密鑰,我們把這個密鑰稱為秘密密鑰。DES、AES算法都是常用的對稱密碼算法。流密碼和分組密碼都屬于對稱密碼體制。流密碼實現簡單,對環境要求低,適用于手機平臺的加密,廣泛應用于軍事、外交領域。RC4算法就是典型的流密碼算法。流密碼的理論、算法受限于國家安全因素未能公布。分組密碼在這一點上與流密碼恰恰相反,其理論、算法公開,分類眾多。DES、AES算法等主要的對稱密碼算法均屬于分組密碼。分組密碼共有五種工作模式:電子密碼本模式(ECB)、密文鏈接模式(CBC)、密文反饋模式(CFB)、輸出反饋模式(OFB)、計數器模式(CTR)。分組密碼會產生短塊,關于短塊的處理方法有填充法、流密碼加密法、密文挪用技術。
在非對稱密碼體制中,加密與解密操作使用不同的密鑰。對外公開的密鑰,稱為公鑰;對外保密的密鑰,稱為私鑰。用公鑰加密的數據,只能用私鑰解密;反之,用私鑰加密的數據,只能用公鑰解密。RSA算法是常用的非對稱密碼算法。非對稱密碼體制同時支持數字簽名技術,如RSA、DSA都是常用的數字簽名算法。
散列函數可以有效地確保數據完整性,被作為消息認證技術。常用的散列函數算法有MD5、SHA、MAC。散列函數也是數字簽名技術中最重要的技術環節。數字簽名離不開非對稱密碼體制,其私鑰用于簽名,公鑰用于驗證?;跀底趾灻牟豢蓚卧煨?,數字簽名技術成為五類安全服務中數據完整性服務、認證性服務和抗否認性服務的核心技術。通信雙方只有一方提供數字簽名的認證方式稱為單向認證,通信雙方都提供數字簽名的認證方式稱為雙向認證。一般網銀系統多采用單向認證方式,而要求較高的網銀交易則都采用雙向認證方式。密碼學在不斷地向前發展,只不過它的發展通常是以其密碼算法的破解而引發,以更高安全系數算法的誕生而告一段落,密碼學的明天將無可限量。
- 零基礎學Visual C++第3版
- 從零開始:數字圖像處理的編程基礎與應用
- Oracle 11g從入門到精通(第2版) (軟件開發視頻大講堂)
- Mastering OpenCV Android Application Programming
- C# Programming Cookbook
- Rake Task Management Essentials
- 微信小程序入門指南
- Learning Vaadin 7(Second Edition)
- 利用Python進行數據分析
- OpenResty完全開發指南:構建百萬級別并發的Web應用
- Learning YARN
- Learning Docker Networking
- Application Development with Swift
- Robot Framework Test Automation
- Python機器學習開發實戰