標籤:

如何在一個月內入門密碼學?


說個靠譜點的流程吧。我就冒昧地當題主零基礎了。可以根據實際情況跳過一些步驟。

有問題可以一起交流。

day 1-3: 準備。

數學方面:

需要有一些基本的數論知識。

整除。同餘。輾轉相除法。

質數及其基本性質。

費馬小定理。裴蜀定理。中國剩餘定理。

還有對概率要有個基本概念。哪些是很大可能的。哪些是幾乎不可能的。

暫時想到這些。當然數學知識肯定是多多益善。

計算機方面:

需要掌握異或運算及其基本性質。

對演算法複雜度有個基本概念就行。big O notation什麼的稍微理解一下。

最好能編寫簡單程序。不行的話也沒關係。

當然很重要的一點。你要大概知道當今計算機的能力上限。

也就是說哪些是可以很快算出來的。哪些是不現實的。

拿分解質因數來說。你要知道什麼樣的數是當今計算機分解不了的。

個人認為就今天的計算機來說 (今天是20151031。)

2的40次方次運算是容易 (easy)。

2的56次方次運算是可做 (feasible)。

2的64次方次運算是勉強能做 (barely feasible)。

2的80次方次運算是不能做 (infeasible)。

2的128次方次運算是絕逼不能做 (totally infeasible)。

當然僅僅是個人認為。有異議歡迎提。

day 4-6: 對稱密鑰加密 (Symmetric Key Encryption)。

掌握以下:

1. 對稱密鑰加密的基本定義。

2. 幾種經典的加密方式及其破解辦法。比如替代密碼 (Substitution Cipher)和維吉尼亞密碼 (Vigenere Cipher)。

3. 一次一密 (One-Time Pad。不是衛生巾!)。

需要知道只有一次一密 (OTP)能保證完美秘密 (Perfect Secrecy)。不過不需要掌握證明過程。

需要知道重複使用OTP有什麼後果。

需要知道OTP在實際操作中並沒有什麼用途。

4. 實際應用中的加密方式。

算是歷史啦。大概了解一下就行。

二戰期間的:

德國人的謎團 (Enigma)還有Lorenz。

日本人的紫碼 (PURPLE)。

還有美國人的納瓦霍密碼 (Navajo Code)。

60年代的:

Feistel Network (找不到中文)。

代換-置換網路 (Substitution-Permutation Network)。

還有IBM的路西法 (LUCIFER)。

然後就是數據加密標準 (Data Encryption Standard。簡稱DES。)和高級加密標準 (Advanced Encryption Standard。簡稱AES。)了。

這兩個最好重點了解一下。

5. 流加密 (Stream Cipher)和塊加密 (Block Cipher)的區別。

(其實一句話就說清啦。)

6. 電碼本模式 (Electronic Codebook。簡稱ECB。)和分組鏈接模式 (Cipher Block Chaining。簡稱CBC。)的異同。

7. 幾種攻擊的定義。

唯密文攻擊 (Ciphertext-only Attack)。

已知明文攻擊 (Known-plaintext Attack)。

選擇明文攻擊 (Chosen-plaintext Attack)。

選擇密文攻擊 (Chosen-ciphertext Attack)。

邊信道攻擊 (Side-channel Attacks)。

物理攻擊 (Physical Attacks)。

day 7: 休息。

day 8-9: 線性密碼分析 (Linear Cryptanalysis)和差分密碼分析 (Differential Cryptanalysis)。

代換-置換網路 (Substitution-Permutation Network。簡稱SPN。)。

線性密碼分析的原理及基本過程。

如何利用線性關係 (Linear Relations)構造線性逼近(Linear Approximations)。

差分密碼分析的原理及基本過程。

day 10: 流加密。

線性反饋移位寄存器 (Linear Feedback Shift Registers。簡稱LFSR。)。

RC4加密演算法。

day 11: 無線網路安全。

大致了解一些標準和協議就行。

如IEEE 802.11。有線等效安全 (Wired Equivalent Privacy。簡稱WEP。)。

day 12-15: 哈希函數。

哈希函數的定義。

抗原像性 (Preimage Resistance)。

抗第二原像性 (2nd Preimage Resistance)。

抗碰撞性 (Collision Resistance)。

哈希函數的常見應用。比如保護密碼。(題外話。國內很多網站好像都存密碼原文的。這在我看來是不道德的... 按理說應該只存hash之後的才對。)。修改檢測碼 (Modification Detection Codes。簡稱MDCs。)。消息鑒別碼 (Message Authentication Codes。簡稱MACs。)。偽隨機比特生成。等等。稍微了解一下就行。

常見哈希函數。如MD5。SHA1。還有各種SHA系列。

詳細了解一下SHA1的過程。

大概了解幾種經典的在哈希函數中找碰撞的辦法和流程。不需要學證明。

大概了解一下王小雲這個人以及她的成就。

找到碰撞以後如何利用? 大概了解一下選擇前綴碰撞攻擊 (Chosen-Prefix Collision Attacks)。還有火焰病毒 (Flame Malware)。

大概了解SHA2和SHA3的過程。

(我真是說了好多個大概了解...)

day 16-17: 消息鑒別碼 (MACs)。

MAC的定義。

一個MAC系統怎樣才算安全?

MAC的應用。

基本的攻擊方法。

CBC-MAC。

如何利用哈希函數構造MAC? 了解一下安全前綴法 (Secret Prefix Method)。安全後綴法 (Secret Suffix Method)。還有信封法 (Envelope Method)。

day 18: 認證加密 (Authenticated Encryption)。

了解幾種可能的策略及其應用。

比如

MAC-then-encrypt。應用於安全套接層 (咳。注意斷句。)和安全傳輸層 (SSL/TLS)。

encrypt-then-MAC。應用於IP安全協議 (IPSec)。

encrypt-and-MAC。應用於安全外殼 (SSH)。

如果可以的話最好從理論角度詳細了解一下幾種策略的過程。

day 19: 公鑰加密 (Public-Key Encryption)

思考對稱密鑰加密的缺點。

理解並掌握公鑰加密的定義及過程。

day 20-23: RSA加密演算法。

希望這塊學得詳細點。因為真的很酷。應用也非常廣。

數學底子好的話。最好是自己證明加密和解密的過程。

喜歡編程的話。可以自己寫程序試試分解大數。看看到什麼級別就分解不動了。

呀。要出門了。後邊的簡略說吧。

day 24: Diffie-Hellman和Elgamal演算法。

這個也很重要的。至少了解一下。

day 25: 電子簽名 (Digital Signatures)和數字證書 (Digital Certificate)。

看到很多網站地址欄邊上的小鎖了么?

day 26: 橢圓曲線演算法 (Elliptic Curves)。

這個強度比RSA還厲害。但我覺得純從數學角度講沒RSA美。

嗯。到這兒應該算是"入門"了吧。後面幾天選讀吧。也可以鞏固一下之前的。

day 27: 硬體實施 (Hardware Implementations)。

day 28: 量子密碼學 (Quantum Cryptography)。

day 29: 邊信道攻擊 (Side-channel Attacks)。

好多方法真的聞所未聞。想都想不到。感興趣可以了解一下。非常有趣。

好了。一個月以內。

嘻嘻。先說這麼多。

純手打。希望不要有錯字。


先扔個自己的書單 求大觸們推薦一些比較系統的關於密碼加密解密的書籍? - 知乎用戶的回答

僅僅是理解概念或者做開發的話可以只看C. Paar的Understanding Cryptography。

==============分割線============================================

覺得這個問題真的很有趣。

貌似接下來要去實習的公司里,會碰到不少很懂開發但不怎麼懂密碼學的同仁。我自己現在也在思考應該怎麼和他們進行概念上的溝通,希望能花費盡量少的氣力在傳達關鍵概念上。

嘗試梳理一下密碼學裡面的概念。

要入門密碼學,可能首先就需要理解什麼叫密碼學意義上的「安全」

用一個非專業辭彙概括的話,「安全」就是指的「難算」

檢驗/判斷某個問題是否「難算」的過程,就是對密碼學演算法的安全證明了。

如果已經了解過計算複雜性理論,知道如何以輸入數據的長度做自變數來度量演算法的時間/空間複雜度,這部分理解起來會相對容易些。

第二個,就是要始終明確 所有的安全性都是基於對攻擊者能力以及應用場景限制假設而言。

比如對於計算能力無限的攻擊者來說,除了OTP,沒有任何加密方案是絕對安全的,即使攻擊者只能竊聽密文。而對於只有普通能力(比如擁有PC,高速硬體,私有雲)的攻擊者來說,即使加密方案僅僅是使用了一個偽隨機函數/偽隨機數產生器所生成的bit串和明文做XOR,只能竊聽密文的話,解密還真的挺難的。但如果竊聽者變成了「中間人」或者「內部攻擊者」,簡單的XOR就給他太多可以利用的地方了。比如,他可以簡單地使用一個自己已知的明文M,來讓伺服器加密得到M XOR K, K是加密用的bit串。然後,他反過來算出K,從而可以解密其他人的信息。對攻擊者扮演角色的改變,其實也是提供了新的場景和新的資源, 使」安全「變得」不安全「。

(可以自己選任意明文給伺服器加密,行話叫Chosen Plaintext Attack, CPA, 而只能竊聽叫Cpiher Only Attack,這兩個是不同的安全性/威脅建模)。

第三,「安全性」定義的種類很多,但大體可分為「很難判斷」(decisional)和「很難直接算」(computational)。

很容易出現的誤解就是把數字簽名所需要「不可抵賴性」和加密演算法提供的「保密性」混在一起說。

"保密性"通常指的是「不可區分」,也就是「很難判斷」(教科書上的RSA除外)。試想,如果攻擊者不能區分你的ID加密後的結果和一個亂敲鍵盤產生的字元串加密後的結果,那麼他就很難知道自己所需要的信息到底在哪裡了。

而」不可抵賴「,實際上就是說「除了你,別人很難偽造/計算,所以是你乾的「。

上面這些概念,心中有個框架就好,接下來就是做做步驟簡單的分析練習了。

拿到一個密碼學演算法,無論是加密、簽名還是密鑰交換,讀演算法描述時,首先需要整理出來它所屬的安全性種類。

比如ElGamal加密演算法

pk = (mathbb{G}, g, q, g^x)\
sk =  (mathbb{G}, g, q, x)\
rin_R mathbb{G}, \
Enc_{pk}(m) := (c_1, c_2) = (g^r, (g^{x})^rcdot m)\
Dec_{sk}(m) := c_2/c_1^x

看到pk( = public key, 公鑰), sk(=secret key, 私鑰),看到Enc(=Encryption,加密),就需要反應出來這是個公鑰加密演算法,安全性的重點在於「判斷」。然後可以看到是明文密文所在的空間都是乘法群。

接下來是威脅建模。

由於是公鑰加密演算法,我們可以考慮(Chosen Plaintext Attack Security,選擇明文攻擊安全)

最後是它所基於的難題假設。這裡是對於群的Decisioanal Deffie Hellman Problem的假設,如果這個難題好解,比如量子計算機真的高效/便宜地實現了的話,那麼我們應該明確這個加密方案不再安全。

以上,寫得比較「干」,但只有能看懂演算法描述里的基本信息和威脅建模的含義,才能算入門。

題外話,自己的幾個同學考密碼學時,認真看書的時間都不超過一個月,考試內容不僅包括上面的,還包括安全性證明,參考書是Introduction to Modern Cryptography。

===2015年10月9日==============

補點關於「學院式」學習時間的信息。

自己學校的密碼學課是每周2次大課兩次習題課,一共是6個小時的時間,持續13周(授課時間78個小時)。參考書上面已經說到,授課基本上覆蓋了書里除了從hardcore predicate構造PRG那章之外的內容。BTW,每次考試不及格率是50%左右。

在此之前有C. Paar自己講的每周3小時,13周*2的兩學期密碼學「導論」打底。其實個人覺得這個是按高中程度開始來教的,很多時候都是算算算,比如解個同餘方程,算個離散對數,查個s-box什麼的。我基本沒上過課……所以考試要我20分鐘算橢圓曲線上18個點的時候我就 ??ヽ(?′Д`)???

另外是覺得如果正兒八經學了密碼學,在安全方面可能就相當於開發人員認真學了數據結構和演算法,直接作用未必明顯(就像寫程序很多人或選擇直接google或者查API拼裝一樣),但會給自己提供更好的視野。


理解密碼學的核心關鍵在於理解密碼學裡面幾個最重要的原語(primitives):單向函數、對稱加密演算法和非對稱加密演算法,外加一個隨機性的概念,這四個東西搞清楚了以後,整個現代密碼學的體系才有可能真正去理解它。這方面當然首推J.Katz的Introduction to Modern Cryptography (Introduction to Modern Cryptography (豆瓣)),然而這本書並不適合實用主義需要,出於實踐的目的,則必須反覆閱讀《密碼學實踐》 (密碼學實踐 (豆瓣))一書,當然這本書的後續版本Cryptographic Engineering也是很好的(我會說這兩本書其實都是一樣內容么)。在這兩本書的風格中取一個平衡點,則是著名的D.Stinson的Cryptography : Theory and Practice (Cryptography (豆瓣)),這本書一定要讀英文版(不要問我為什麼,重要的話不說二遍!)。這三本書若讀者能根據實際需求各取所需,一個月內反覆閱讀即可掌握密碼學的核心,然後再去讀一些代碼(推薦PuTTY的源代碼實現裡面的密碼演算法部分,清晰易懂,結構獨立),做一些CTF比賽的密碼學練習題,基本上就可以實現一個「粗通密碼學」的目標了,然後呢……哼哼,密碼學博大精深,可以研究一百年………………


要認識三個人

Alice, Bob and Eve


1. 網易公開課上有個《現代密碼學》的視頻,一共十集加起來也就不到一個小時,個人覺得講的不錯,把公鑰加密的原理說的挺清楚的。

2. 古典密碼學是比較簡單的也很好理解隨意看看就好原理就是置換置換置換。

3. 我剛開始學密碼學的時候用的書好像是《現代密碼學:原理與協議》書寫的不錯但翻譯的確實不好,有的一句話讀下來我寧願去看看英文版,但是對密碼學裡的定義和數學背景都講了。。。當時在申請港大phd,老闆讓我做那本書的課後題,然後我就在兩三個星期里在寫其他作業的間隙里做完了基本所有的課後題。。。當然,很多不會的。。。做完之後確實覺得更入門了一點。。。

4. 啊。。。如果想做theory的話。。。建議先學抽象代數。。。和數論。。。最好也學好概率統計(證明用)

5. 大半年過去了。。。接觸了FE(函數加密)以後。。。我依舊覺得。。。我還在入門的路上。。。高深莫測。。。

6. 以上所說都是對於密碼學理論。。。如果是想實現加密方案之類的。。。只要會寫代碼然後大概了解一下密碼學知識就好了。。


如果是古典密碼學,一個月沒太大問題,包括實現,故事都能學到。

如果是現代密碼學,除非你有極強的數學基礎和抽象代數基礎,看公式推導像讀小說一樣,那麼基本上不太可能實現。

要明白現代密碼學,至少要明白以下幾塊:

第一,群環域等基本代數結構和其性質。基本的密碼學上用到的數學不可解問題及其變形。

第二,密碼編碼學。包括分組密碼的幾種常見的,公鑰密碼裡面幾種常見的。簽名演算法,哈希演算法等等。

第三,密碼解碼學。弄清楚形式化攻擊和可證明安全,包括基於計算複雜度的安全證明方法和基於形式化的證明方法。

第四,密碼基礎應用。知道要達到某個安全目標,如何選擇相應的演算法工具,構建滿足實用的安全協議,並可以證明之。

第五,密碼實踐。知道各類演算法的實踐編程方法,優化演算法。如何調用已有演算法庫,完成部分實踐協議的功能。


【看來不是地球上的一個月。。。】

其實除了Alice, Bob, Eve,還要認識Victor和Peggy. 樓上似乎都沒有提zero-knowledge proof...? 感覺初學密碼學還是要學這個的。

【關於zero-knowledge的paper裡面男女主角都是Victor和Peggy=w=】

如果是主要從數學的角度上來學密碼學並且只是入門的話,Introduction to Cryptography with coding theory(http://calclab.math.tamu.edu/~rahe/2014a_673_700720/Trappe_2006.pdf)這本書還是不錯。一個月之內基本啃的完。可以cover上面大神們提到的topic。

這裡也是初學者=w=。


可以參照這個。


你會數論嗎


http://scateu.me/2016/11/25/crypto-note.html


看《21天精通密碼學》。


佔個坑。。睡醒了小生分享當初是如何半個月速成密碼學並拿到90+的故事(略

————————————大家好我是分割線——————————————

都快把這事忘了...

先上乾貨吧,由於不太清楚題主現在對密碼學理解多少,就從頭開始講了。

密碼學這個東西吧,一般的教材會把它分成三到四部分:

第一部分對稱密碼,即加、解密演算法相同,也叫古典密碼。老一點的經典演算法有凱撒、柵欄、維吉尼亞等,這一部分大致了解一下就可以了,算作一個小時。後面會提到分組密碼這個概念,這裡就要登場第一個比較重要的加密演算法了——DES,建議重點掌握,至少要用半天的時間。然後會提到一點數論的基礎 群環域的概念以及模運算等等,這裡是為了AES打基礎,這裡我的建議是,你先去看AES的過程,對整個流程有一個整體的印象之後,再去摳一下細節,比如其中涉及到的模運算等等,AES的建議時間也是半天。再往後會涉及到分組密碼的工作模式,包括3DES、電碼本、計數器等等等。這裡我覺得要看你們老師的偏向了,大概不會所有模式都是重點,會有側重的,這裡建議花兩三個小時,可能有人會質疑分給3DES的時間太短,我的想法是:我們現在的目標是通過考試,以考試的程度來說,AES的流程已經是相當複雜的了,沒有老師會叫你在卷子上寫AES的流程,工作量實在太大,所以你懂的。在後面一點偽隨機數和流密碼,大致看一下就行了,一小時

休息一會吃個午飯,回來再講公鑰密碼和完整性校驗這些。。。、


我真的覺得不可能(-o-)/

且不說樓上說的數論,基礎代數,有限域。。。。和計算複雜性理論比,那都是小菜啊(ノ=Д=)ノ

計算複雜性理論,是永遠的痛,永遠不懂的痛!有那麼一門課,你上了半年,愣是不知道他在講什麼!什麼!么!!

數學,你學了密碼學才知道,數學是那麼的高深莫測T_T當我學到黑盒的時候,世界觀都崩塌了,神域,哈哈,神域啊!只有神能解!哈哈哈哈,哈哈,哈

如果題主真的在一個月內入門了,一定要告訴我方法啊!

(ノ=Д=)ノ


最通俗易懂的是日本的&<圖解密碼技術&>,一個星期應該可以入門.


買一本《三十天學會密碼學》


強烈推薦日本結城浩的圖解密碼學簡單易懂,雖然不夠深入,但入門足夠了。

你可以看看這篇文章或許對你有圖解密碼技術 【日】 結城浩 著 周自恆 譯(學習筆記一) & 第一講、3分鐘環遊密碼世界(分享自 @知乎 安卓客戶端)&https://zhuanlan.zhihu.com/p/26854938?utm_source=zhihuamp;utm_medium=social" class="internal">&https://&&http://zhuanlan.zhihu.com/p/26&&854938?utm_source=zhihuamp;utm_medium=social&&&&


入門還不簡單啊, 用openssl做實驗很容易入門


把《應用密碼學手冊》看看


可以先把coursera那兩門入門課刷了


有一個會密碼學的男票

並且存在一個精通密碼學的小三

不要問我為什麼知道

我並不會密碼學


推薦閱讀:

如何證明 f(x)=m^x mod N 的周期性?
這串字元什麼意思?
軍事級加密演算法有哪些?
假設一個對人類文明一無所知的外星種族,得到了一套詳盡描述了人類文明的文字資料(有字無圖),他們能否解讀資料,並且還原人類文明的樣貌?
區塊鏈技術是什麼?未來可能用於哪些方面?

TAG:數學 | 密碼學 |