- Published on
Crypto Introduction
- Authors
- Name
- Rickee
入門書籍推薦:
密碼學的產生
密碼學的五個基本要素
明文(plaintext):
密文(cyphertext):
密鑰(key):
加密算法(Encryption):
解密算法(Decryption):
密碼學發展的兩個主要階段
1949 年以前:古典密碼學階段。加密算法不公開、密鑰不公開。主要依賴於加密算法的保密性,而非密鑰的保密性。
1949 年,香農(Shannon)發表論文《保密係統的通信理論》(Communication Theory of Secrecy Systems),將信息理論引入密碼學中。
1976 年,迪菲和赫爾曼(Diffie & Hellman)發表了一篇名為《密碼學的新方向》(New Direction in Cryptography)的文章。他們在這篇文章里提出了現代密碼學公鑰系統的概念,簡稱為 PKC。核心理論:不僅加密算法可以公開,加密的密鑰也可以公開。
古典密碼
移位密碼(又稱凱撒密碼):密鑰 代表移位的數量。在 26 字母表中:
因為密鑰的數量有限(密鑰空間 極小),所以確定該種加密算法后,很容易暴力破解。
移位密碼的變種形式:使用不同的字符—數字映射,例如 ACSII 編碼等。
c = "afZ_r9VYfScOeO_UL^RWUc" p = "flag{" # 已知:明文開頭是 flag{... # 輸出密文的 ASCII 值 for i in s: a = ord(i) print(a, end=" ") print("") # 輸出明文的 ASCII 值 for i in p: a = ord(i) print(a, end=" ") print("") # Output: # 97 102 90 95 114 57 86 89 102 83 99 79 101 79 95 85 76 94 82 87 85 99 # 102 108 97 103 123 # 發現規律:第 n 位上,明文與密文的 ASCII 值相差 (4+n) # 輸出明文: plaintext = "" j = 5 for i in s: plaintext += chr(ord(i) + j) j = j + 1 print(plaintext) # Output: # flag{Caesar_variation}
單表替換密碼: 的任意同構(一對一)映射,加密算法和解密算法互為對方的逆映射。每個字母被轉換成任意字母。若只考慮 26 個大寫字母,那麼密鑰空間可達到 種。
密鑰空間大就一定安全嗎?並非如此。對應語言中各個字母出現的頻率是符合一定統計學規律的,而這種規律在單表替換密碼編碼之後得到保留。只要確定明文所用的語言,就可以根據字幕出現的頻率來破解密文(然而不一定成功)。
Letter Frequency Table
多表替換密碼。設密鑰為長度為 m 的矢量,則:
也就是說,對明文的每一位採取不同的編碼位移方法。凱撒密碼可以認為是多表替換密碼的特殊形式:凱撒密碼中 等價於多表替換密碼中 。
Vigenère Cypher:明文 + 密鑰 = 密文。
現代密碼學
對稱密碼:置換和代換
公鑰密碼:基於數學難題
RSA 密鑰生成算法
選取兩個安全的大質數 和 (長度大於 1,024 比特,即大於 )。
計算 。
歐拉函數 定義為:小於或等於 的正整數中與 互質的數的數目。易知對於質數 ,。對於兩個質數之積 ,有:
隨機選取小於或等於 的正整數 作為公鑰。根據貝祖定理,一定存在整數 使得 ( 和 可以用擴展歐幾裡得算法算出),即一定存在 使得
即
將此 作為私鑰。
加密算法:任意選取 使得 。
解密算法:
證明:根據同餘的性質,在 下,
只需證明 。
若 互質,則根據歐拉定理,,直接得證。
若 不互質,由於 只有兩個因數 , 必然為其中一個數的倍數,同時與另一個數互質。設 且 與 互質。則根據歐拉定理: