--- title: Crypto --- # Crypto by Mask >密碼學到底是簡單還是複雜呢?讓我們繼續看下去 > [簡報連結](https://drive.google.com/file/d/1l07ibtl3uCxONdDdK-blHT9ZxS5AlRpR/view?usp=sharing) > [課程影片連結](https://youtu.be/UgKfpZGlrm8) > [課後問卷](https://forms.gle/b4BjUiFM81WVZJiq5) ## Python 複習 - 創建一個副檔名為 py 的檔案 ex:`test.py` - 寫上 `printf("Hello world")` - cmd 裡輸入 `py test.py` - 這樣 cmd 裡就會跑出 `Hello world` ## 密碼學簡介 - 可分為古典密碼學和現代密碼學 - 古典密碼學仰賴創造力與技巧 - 現代密碼學仰賴大量電腦科學、數學等理論 - 密碼學 == 數學 ### 名詞簡介 - 加密 Encrypt - 指將明文經過某種程序轉換成密文,該程序稱為加密 - 解密 Decrypt: - 指將密文經過某種程序轉換成明文,該程序稱為解密 - 明文 Plaintext: - 加密前的訊息 - 密文 Cipertext: - 加密後的訊息 - 演算法 Algorithm - 解決複查問題的程序 - 密碼學演算法: - 做與密碼學相關程序(如加密、解密、簽章...)的演算法 - 金鑰 / 密鑰 Key: - 加解密時所使用的「鑰匙」 - 編碼(encoding): - 是資訊從一種形式或格式轉換為另一種形式的過程 - 解碼(decoding): - 編碼的逆過程,即將資料從另一種形式轉換回來 *編碼!=加密* ## ASCII 編碼 ASCII編碼只有0~127,因為要留一個位元給檢查碼 - `0` = 48 - `A` = 65 - `a` = 97 ![](https://www.asciitable.com/index/asciifull.gif) ## 摩斯電碼 ![](https://sites.google.com/site/a004191293/_/rsrc/1443944789715/zui-xin-xiao-xi/mosimima/res07_attpic_brief.jpg?height=300&width=320) ## Base64 encode - 用於傳輸資料(如圖片) - 一個單元 8bit - Base64 一單元只有6 bits - 詳細見: [Base64](https://http://s.nisra.net/base64) - 如果原文不整除3,結尾會出現對應數量的= ex ![](https://dzone.com/storage/temp/7139353-visualization-preview.png) ## 古典密碼學 - 豬圈密碼(pigen cipher、共濟會密碼) ![](https://upload.wikimedia.org/wikipedia/commons/3/36/Pigpen_cipher_key.svg) ![](https://i.imgur.com/rZgMiwH.png) - 密碼棒 ![](https://i.imgur.com/cZoVFwE.png) > ~~多試幾遍就成功了~~ > [name=Mask] ### 替換式 - 單表加密: - 凱薩加密、阿特巴希密碼 - 多表加密: - 維吉尼亞密碼、自動密鑰密碼 - 凱撒密碼(單表): ABC 3 => DEF DEF -3 => ABC HELLO 13 => URYYB URYYB 13 => HELLO ![](https://i.imgur.com/9R2ZXOc.png) - ROT-13(凱撒裡的特定種) #### 單表加密攻擊 - 爆破: - 已知為凱撒密碼,只有26種可能,未知則26! - [線上爆破](http://theblob.org/rot.cgi) - 字頻分析: - 最常出現的字母: e, t, a, o, i - 最常出現的單字: the, to, of, and - [自動化分析](https://quipqiup.com/) #### 多表加密攻擊 - 維吉尼亞密碼 - ![](https://i.imgur.com/0VIUkMH.png) - 加密: - 密鑰:CSIEC - 明文:HELLO - 密文:JWTPQ - 解密: - 密鑰:CSIEC - 密文:JWTPQ - 明文:HELLO - 從密文、明文取得密鑰 - 明文:HELLO - 密文:JWTPQ - 密鑰:CSIEC - 卡西斯基試驗 (Kasiski examination) - 密鑰:ABCDAB CD ABCDA BCD ABCDABCDABCD - 明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY - 密文:CSASTP KV SIQUT GQU CSASTPIUAQJB > 相差 16 位 => 密鑰為 16 的因數 - Index of coincidence - 已知在英文一段有意義的長文中,隨機取兩字母,相同機率為 0.068 - 已知同樣明文經同樣的密鑰加密後會出來同樣的密文 > C ----- key=B -----> D - 以重複間隔不斷取密文,其字母重複的機率應該接近 0.068 > `Q`PW`K`AL`V`RX`C`QZ`I`KG`R`BP`F`AE`O`MF`L`... - 先把密文拆成 n 行(n=1, 2, 3...),並計算每一行的字元出現次數 ### 移位式加密 - I LOVE YOU BOB -> BOB UOY EVOL I - 字母不變,但透過一些規則重新排序,使得較難辨認原文 - Ex. 密碼棒、柵欄加密、中國式密碼 #### Lab 1 - ASCII + ROT-13 - some tool - http://theblob.org/rot.cgi - https://www.asciitohex.com #### Lab 2 - 維吉尼亞密碼加密 #### 古典密碼學的不足 - 柯克霍夫原則 (Kerckhoffs's principle) - 即使演算法完全洩漏,只要金鑰沒有洩漏,密文就是安全的 - Claude Shannon: - "the enemy knows the system." - Bruce Schneier: - 任何以隱藏設計作為防護的保安系統必然會失敗 ## 現代密碼學 - 不再限於書寫文字 - 基於各種複雜的數學 - 加密簡單破解難 - 對稱式加密 & 非對稱式加密 ### XOR ![](https://i.imgur.com/FeRlNiF.png) ![](https://i.imgur.com/FoNgmce.png) ### 對稱式加密 - 加密解密用同一把金鑰 ### 區塊加密法/串流加密法 - 區塊加密 - 常用於已知訊息長度的情況 - 將明文分成一塊一塊等長的模組分別加密 - AES DES - 串流加密 - 常用於需要即時回應,或是訊息長度未定的情況 - 對明文逐 bit 加密 ## Advanced Encryption Standard (AES) - 美國國家標準局 NIST 於 1997 年開始徵選下一代的對稱式加密系統 - 要求實作程式碼必須公開 - 必須無償給所有人使用 - 除安全性外要考慮效能、記憶體使用量、是否易於實作等 - 由全世界所有專家一起研究與評比 - 由比利時密碼學家 Joan Daemen 和Vincent Rijmen 設計的 Rijndael 獲勝 - 金鑰長度(Key sizes):128, 192 or 256 bits - 加密回合:10、12、14 (與金鑰長度對應) - 區塊長度(Block sizes):128 bits - 換而言之,AES 規定一次只能加密 128 bits - 詳細加密過程請見: - https://www.youtube.com/watch?v=xtCfKHE4-r8 - http://netzts.in/cryptography-blog-downloads/ - 用途: - 無線網路協定 - Wi-Fi Protected Access (WPA) - ZigBee - 無線網路協定 - Secure Sockets Layer (SSL) - Transport Layer Security (TLS) - 其他軟硬體協定 - 攻擊: - Padding Oracle attack - 社交工程學 ### XOR Cipher - 攻擊: - 已知明文與密文時可以直接回推 Key (明文⊕密文 = 金鑰) - 遇到一長串 Null (0x00) 時會直接寫出 Key,而這在二進制檔案中是很常見的事情 - 如果 Key 長度等於 Plaintext,又 Key 完全隨機且不重用,是被證實無法破解的。 ## RSA - 非對稱式加密 - 由 Rivest、Shamir、Adleman三位教授發展出來 - 運算速度慢,通常用來加密Session key (用來加密會議內容的key) - 將兩個質數p和q(p!=q)相乘得到N很簡單,但從N推回p、q不簡單,尤其當N很大的時候。 - 製作 Public Key 與 Private Key: - 1. 選擇 2 個超大相異質數 p, q 並計算 N = pq - 2. 計算 r = (p-1) × (q-1) - 3. 選一整數 e 滿足 e < r 且 gcd(e, r) = 1 - 4. 尋一整數 d 滿足 ed ≡ 1 (mod r) - 5. 銷毀 p 與 q,得 Public Key `e` 與 Private Key `d` - 加密與解密: - 1. Bob 要傳訊息給 Alice,訊息依據特定方法轉成整數 m( m < N) - 2. Alice 將 Public Key (N, e) 交給 Bob - 3. Bob 運算 c ≡ m^e^ (mod N) 得 c 並交給 Alice (加密) - 4. Alice 運算 c^d^ ≡ m (mod N) 得 m ,再依約定方法轉回原始內容(解密) ### 歐拉原理 gcd a, N = 1 , a ^φ(N)^ ≡ 1 (mod N) 𝑎 ^𝜑(𝑁+1)^ ≡ a (mod N) 如果 φ N + 1 可以分解成兩數(設e,d)相乘,就可寫成: a^ed^ % N =a (其中 a < N) =>a^e^ % N = ct (ct)^d^ % N = a - 符號們 - pt:Plain text - ct:Cypher text - e:Encrypt key - d:Decrypt key - (pt)^e^ % N = ct - (ct)^d^ % N = pt ### Hash (雜湊、哈希) - 將任意長度的字串轉成固定長度 - 雪崩效應:字串即使只有動一個字,Hash 結果差異很大 - md5(1234) = 81dc9bdb52d04dc20036dbd8313ed055 - md5(1235) = 9996535e07258a7bbfd8b132435c5962 - 無法回推:可以從 X 算出 Hash(X),但無法從 Hash(X) 算出 X - 抗碰撞:很難找到兩個不同字串 X 與 X’ 符合 Hash(X) = Hash(X’) - md5, sha256, bcrypt #### Hash 用處? - 驗證資料完整性(Data integrity) - 用不安全通道傳很大的檔案 - 用安全通道傳該檔案的 Hash - 傳過去後hash對看看 - 在不取得明文的情況下驗證資料正確性 - 儲存使用者密碼的 Hash 在資料庫,確保管理員看不到使用者密碼的明文 ### 數位簽章 - 類似於在紙上簽名,證明這份資料是我認可的 - 只有擁有私鑰的人可以簽章,所有人都可以驗證簽章 - 因為訊息很長,所以通常會先將訊息 Hash 過再簽章 - 基於非對稱式加密系統的應用 - 具有不可否認性(Non-repudiation) ### Lab3 Base64 + MD5 hash ### Lab4 RSA - (pt)^e^ % N = ct - (ct)^d^ % N = pt --- ###### tags: `Enlightened` `NISRA` `2020` <style> .navbar-brand::after { content: " × NISRA"; } </style>