跳转至

Crypto

密码学

为数据的保密性、完整性、可用性提供理论基础,简单说就是:保证因特网最基础的信息安全。

知识点

密码学(Cryptography)一般可分为古典密码学和现代密码学。

古典密码学方面:

  • 单表替换加密(凯撒加密等)
  • 多表替换加密(维吉尼亚加密,恩格码机等)
  • 奇奇怪怪的加密方式(各种自创的无规律加密)

因古典密码学比较依赖于设计者与敌手的创造性思维,没有对密码学原件进行清晰的定义,故而作为一种实用性艺术,一般 赛题/研究 并不会对古典密码做过多讨论。

现代密码学方面:

  • 对称加密(DES,AES,RC4,Chacha20等),加解密密钥一致的密码系统。
  • 非对称加密(RSA,ECC,Elgamal等),加解密密钥不一致的密码系统。
  • 哈希函数(MD5,SHA家族等),消息或数据压缩成摘要,使得数据量变小。
  • 数字签名(RSA签名,Elgamal签名,DSA签名等),为签名者提供信息认证的密码体统。

以数学为起点,信息安全的基础建设。

学习资料:

先有概念,再过理论,代码实操,有时候实在无法理解某些密码学组件,可以从敌手的角度思考如何攻击试试。

如何做题

前提:理解数学原理、会一点编程语言就足够了。

准备好纸笔,理清题目的加解密逻辑,分析其中的“数学漏洞”,找出其中可以被求出的参数,经过一定的编程,加以利用、破解密钥。

如果一个人无法理清逻辑,可以试试先识别题目的密码学组件,思考、搜索组件可能存在的漏洞,亦或参考类似题目解法,参考论文文献,查找他人博客经验等,可能碰巧就有现成的思路、解题代码。

常用工具

密码学大概是所有方向里面,最不用折腾计算机环境的一门学科了,装个Python、方便的Python函数库就足以应对绝大部分密码赛题了,对计算机的要求就是能跑出我们想要的数学运算就行。

必备工具

  • 纸、笔:理清题目逻辑,把代码抽象为数学表达。再通过数学推导,用编程实现破解。

编程环境

  • Python :让计算机跑出我们想要的数学结果就行。
  • SageMath :以Python语法为基础的数学运算软件,类似于Matlab,其中封装了很多实用的密码学函数库。

代码编辑器 & IDE

  • Sublime : 优点,跟记事本一样轻量便捷、可拓展性高。缺点,得下破解版,手动配置环境插件等。
  • VScode :优点,安装即用,插件齐全,也比较轻量。没有太大的缺点。

推荐的Python函数库:

打开命令行 ,通过 pip install 函数库名 即可

  • pycryptodome : 密码学计算实用工具库
  • gmpy2 : 同上
  • pwntools : 用作远程交互、本地调试题目等