448 字
2 分鐘
一些 CTF 密碼學會用到的東西
常用到的密碼學工具
- yafu:大整數分解工具
- factordb:質因數分解資料庫
- sagemath:數學計算軟體,常用於密碼學計算
- CoCalc:線上 SageMath 環境
- CyberChef:編碼解碼和數據分析工具
常用到的 Python 函式庫
- gmpy2:高精度數學運算庫
- libnum:數論和密碼學工具庫
- sympy:符號數學庫
- pycryptodome:密碼學函式庫(Crypto 模組)
- owiener:Wiener attack 實現
正確安裝 Crypto
如果遇到 ModuleNotFoundError: No module named 'Crypto' 錯誤,通常是因為安裝了錯誤的 crypto 套件。正確的安裝方式:
pip uninstall crypto pycryptodomepip install pycryptodomecrypto.bytes_to_long 原理
def bytes_to_long(bytes_data): result = 0 for b in bytes_data: result = result * 256 + b return resultcrypto.long_to_bytes 原理
def long_to_bytes(long_val): if long_val == 0: return b'\x00' result = bytearray() while long_val > 0: result.append(long_val & 0xff) long_val >>= 8 return bytes(result[::-1])RSA 原理
- 隨意選擇兩個大的質數 和 , 不等於 ,計算
- 根據歐拉函數獲取
- 選擇一個小於 並與 互質的整數 (public key),我們通常取 65537
- 求得 關於 的模反元素 (private key),即
- 丟棄(保留 )
- 加密:
- 解密:
- 公鑰:
- 私鑰:
RSA 攻擊
針對 N 的攻擊
- p, q 質數太小:可以使用分解工具(如 yafu、factordb)直接分解
- 共用 N:如果多個密文使用相同的 ,可以通過最大公因數找到 和
- p, q 太接近:可以使用費馬分解法(Fermat’s factorization method)
針對 e 的攻擊
- e 太小:如果 很小且 ,則 ,可以直接開方還原明文
- e 太大導致 d 太小:可以使用 Wiener attack 或 Boneh-Durfee attack
- Wiener attack:當滿足以下條件時可以使用
一些 CTF 密碼學會用到的東西
https://blog.guan4tou2.com/posts/some-ctf-crypto/