Preface
前??言
本書是密碼學課程的教材 ,從1997年開始就將其用於在美國馬裡蘭大學向高年級本科生和一年級研究生講授密碼學,並從2003年開始在美國羅格斯大學用於教學。在設計這門課程時,我們考慮了以下要求:
●?課程內容應該是最新的,並且從數學的觀點看它應該涵蓋了密碼學中的大部分主要專題。
●?課程內容應該能讓不熟悉數論和計算機編程但是已選修過本科數學基礎課的學生也易於接受。
●?課程內容應該包含足夠多的實例,用於展示各種密碼算法實際上是怎樣運行的。
我們不想把注意力隻放在RSA和離散對數上,因為這樣會讓這門課程變成一門主要關於數論的課。我們也不想把注意力集中在各種協議和如何入侵別人的計算機上,那樣會讓這門課程的數學性不夠強。
密碼學中有很多專題可以在一門導論性的課程中介紹。我們盡量把大多數專題包括在本課程內。這些章節在很大程度上代表了我們在不同學期所授課程涉及的主題。當然,這裡的材料比大多數一學期的課程都要多。前13章是本書的核心部分,其餘章節的選取取決於學生的水平和教師的目標。
除與全書內容都有關聯的第3章(數論)外,其餘各章內容彼此獨立,因此可以按任何合理順序進行安排。由於學生掌握數論的程度各不相同,我們把基本的數論知識集中放在第3章以便參考,但還是建議按照課程的進度逐步介紹學生所需的數論概念。
信息論、橢圓曲線、格方法、糾錯碼和量子密碼這幾章內容比其他章的數學知識更多。糾錯碼一章是基於幾位審稿人的建議而放入本書中的,因為在一門課程中同時介紹密碼學和編碼理論的做法是非常普遍的。
上機實例
假如你想給出一個RSA算法的例子,可以選擇使用兩個1位數的素數,模擬使用50位的素數進行運算,或者用你習慣的軟件包來實現一個有大素數的實例。或許你正在使用移位密碼,試圖通過一一嘗試密文的26種移位而對一個消息進行解密。不過這個工作應該由計算機來完成。
此外,書末的附錄裡給出了分別用Mathematica、Maple、MATLAB和Sage等軟件編寫的上機實例。之所以選擇這些軟件是因為它們界面友好且不需要有編程經驗。雖然密碼學課程在不使用計算機的情況下也可以正常授課,但這些上機實例仍然是本書不可分割的一部分,因此應該深入學習。書中不僅包含了關於怎樣進行某些計算的數值方面的例子,還闡述了其中的重要思想和相關的問題。
基於上述軟件的課後作業(即各章後的上機練習)學生可以獨自完成並實現這些實例。當然,有更多編程背景的學生可以自己編寫相應的程序。
第三版中新增的內容
密碼學是一個迅速發展的領域。本書在第三版中有如下幾個方面的變化:
●?重新組織了第二版中的兩章(第4章和第5章)內容,並把它們拆分為流密碼(包括RC4)、分組密碼、DES和AES(分別對應第5章至第8章)。其中,RC4的內容是新增的。
●?散列函數(第二版的第11章)被分成了兩章內容:第11章(散列函數)新增了SHA-2和SHA-3的內容,第12章(散列函數:攻擊與應用)新增了消息認證碼、口令協議和區塊鏈的內容。
●?第二版中與“一次一密”相關的內容被擴展成第4章,新增了一次一密的多次使用、完全保密和密文不可區分性的內容。
●?新增了第14章(會出什麼問題),主要講述了當密碼算法被錯誤使用或設計時會導致什麼樣的問題。
●?第16章(數字現金)為第二版第11章的擴展,新增了比特幣和密碼貨幣的內容。
●?新增的第22章給出了基於對的密碼繫統的介紹。
●?對全書的注釋內容進行了更新,體現了相關領域的最新進展。
●?附錄新增了針對各章相關內容采用Mathematica、Maple、MATLAB和Sage語言編寫的上機實例。
●?新增了一些習題。
●?本書最後新增了大部分奇數編號習題的參考答案或提示。
致謝
本書在準備過程中得到了許多人的幫助與支持。首先,我們要感謝我們的學生,他們的熱情、洞察力和建議都對本書貢獻極大。我們特別感謝許多提供修改意見和其他信息的人,尤其是Bill Gasarch,Jeff Adams,Jonathan Rosenberg和Tim Strobell。我們還要感謝Wenyuan Xu,Qing Li和Pandurang Kamat,他們為本書制作了一些圖表,並且在第二版的基礎上提供了新的反饋意見。我們很愉快地與Pearson的員工們一起工作,尤其是編輯Jeff Weidenaar和Tara Corpuz。
我們要特別感謝本書的審稿人,他們在內容表述和內容組織方面的建議極大地改善了本書的最終面貌。下列標注“*”符號的是指第三版的審稿人。
* Anurag Agarwal, Rochester Institute of Technology
* Pradeep Atrey, University at Albany
Eric Bach, University of Wisconsin
James W. Brewer, Florida Atlantic University
Thomas P. Cahill, NYU
Agnes Chan, Northeastern University
* Nathan Chenette, Rose-Hulman Institute of Technology
* Claude Crépeau, McGill University
* Reza Curtmola, New Jersey Institute of Technology
* Ahmed Desoky, University of Louisville
Anthony Ephremides, University of Maryland, College Park
* David J. Fawcett, Lawrence Tech University
* Jason Gibson, Eastern Kentucky University
* K. Gopalakrishnan, East Carolina University
David Grant, University of Colorado, Boulder
Jugal K. Kalita, University of Colorado, Colorado Springs
* Saroja Kanchi, Kettering University
* Andrew Klapper, University of Kentucky
* Amanda Knecht, Villanova University
Edmund Lamagna, University of Rhode Island
* Aihua Li, Montclair State University
* Spyros S. Magliveras, Florida Atlantic University
* Nathan McNew, Towson University
* Nick Novotny, IUPUI
David M. Pozar, University of Massachusetts, Amherst
* Emma Previato, Boston University
* Hamzeh Roumani, York University
* Bonnie Saunders, University of Illinois, Chicago
* Ravi Shankar, University of Oklahoma
* Ernie Stitzinger, North Carolina State
* Armin Straub, University of South Alabama
J. Felipe Voloch, University of Texas, Austin
Daniel F. Warren, Naval Postgraduate School
* Simon Whitehouse, Alfred State College
Siman Wong, University of Massachusetts, Amherst
* Huapeng Wu, University of Windsor
本書的第一作者要感謝Nisha Gilra提供的鼓勵和建議;感謝Sheilagh O’Hare 引導他進入密碼學領域;感謝K. J. Ray Liu給予的支持。
本書的第二作者要感謝Susan Zengerle和Patrick Washington在他編寫本書時所給予的耐心、幫助和鼓勵。
當然,我們歡迎任何的建議和指正,我們的聯繫方式分別為
Wade Trappe trappe@winlab.rutgers.edu
Lawrence C. Washington lcw@math.umd.edu