Skip to main content

🔢CNSS 2024 Crypto Guideline

密码学是网络安全的基石,主要研究的是如何对信息进行加密和解密。其原理大部分基于数论和代数,而实现则依靠于算法。

📚 相关资料

💪 如何学?怎么学?应该注意什么?

  • 保持热情,保持耐心,不要恐惧、泄气,遇到特别晦涩难懂的知识可以暂时跳过,回头再看。
  • 比起枯燥的看书,也许直接面向题目来学习知识点更加快速高效。比较推荐去刷相关资料中提到的 CryptoHack – A fun, free platform for learning cryptography。比起直接去靶场刷题,上面的题目更加体系化,难度也是逐步上升的。当然,也可以直接对着招新的题找知识点学习。
  • 遇到不会的知识点,要善用搜索,可以去找 CTF-wiki,也可以去找一些相关博客。博客上真的能学到很多。
  • 尽量使用 google 或者 bing,很多资料(论文)百度都搜不到。
  • 做题时应学会了解题目所涉及的密码体系及可能的攻击方式
  • 密码学算法不一定要自己全部实现,但用别人的轮子时要清楚里面的原理。相关资料里面 Crypto-Attacks 实现了不少轮子,在了解轮子具体的使用条件、使用方法后再去使用轮子。

💻 语言基础

打好扎实的基础才能在后序写脚本更加顺畅

  • Python 3 基础语法
  • 常见编码知识(bin, hex, bytes, base64, encode, decode, etc.)以及它们在 Python 中的转换。
  • Python 里面相关的库:pycryptodome、gmpy2。
  • 学会使用 pwntools 进行交互
  • SageMath 的使用(这是个语法基于 Python 的一个功能非常强大的软件,里面封装了很多跟密码学有关的函数,在密码学的学习中可以起到重要作用)。
  • 需要注意的是,Sage 对 Windows 环境不是很友好。因此推荐在 Windows 里面安装WSL虚拟环境来使用 Sage。附上一篇文章 Installing SageMath 10.1 in Ubuntu,仅供参考。

数学基础

首先推荐一本对初学者比较友好的书《An introduction to mathematical cryptography》,在招新群文件里面可以找到,覆盖了密码学基本数学知识,注意选择性阅读。

数论

数论中很多问题目前都属于NP问题,因此常用来构建密码协议。扎实的数论基础可以帮助你更好地分析与研究相关题目。

  • 整除理论:素数、唯一分解定理、欧几里得算法、扩展欧几里得算法
  • 同余理论:同余、原根离散对数、费马小定理、欧拉定理中国剩余定理二次剩余、二次互反律
  • 连分数理论
  • etc.

线性代数

作为大一上的必修课,线性代数在格密码学中有着广泛的应用。

  • 矩阵的一些基本运算以及性质
  • 向量空间、基向量、线性无关
  • etc.

群论

群论的知识可以帮助你抽象出一些结构的共通之处,更快地找到问题的本质。但是该部分比较抽象,建议在有一定数论基础之上进行学习。

  • 群中元素的阶、拉格朗日定理
  • 子群
  • etc.

密码协议与分析

非对称加密

  • RSA
  • 椭圆曲线(ECC)
  • 格密码(Lattice)

对称加密

  • Feistel 密码结构
  • AES (Rijndael)、DES

密码原语

  • 哈希函数
  • 数字签名
  • 伪随机数生成器
  • etc.

😈 进阶内容

  • 各种密码协议,以及特例下的攻击方式。
  • 学习抽象代数中的环和域。例如多项式环、理想以及有限域等概念会在你深入学习时起到重要作用。
  • 格罗布纳基(Gröbner basis),在多变量代数密码中很常用。
  • 椭圆曲线的特例,如奇异椭圆等。
  • 格理论。SVP问题,CVP问题。格理论是 Coppersmith 攻击的理论基础。
  • Coppersmith 攻击以及多元情况。

👊 暴打负责人

@leukocyte @shizuku