Crypto
密码学
为数据的保密性、完整性、可用性提供理论基础,简单说就是:保证因特网最基础的信息安全。
知识点
密码学(Cryptography)一般可分为古典密码学和现代密码学。
古典密码学方面:
- 单表替换加密(凯撒加密等)
- 多表替换加密(维吉尼亚加密,恩格码机等)
- 奇奇怪怪的加密方式(各种自创的无规律加密)
因古典密码学比较依赖于设计者与敌手的创造性思维,没有对密码学原件进行清晰的定义,故而作为一种实用性艺术,一般 赛题/研究 并不会对古典密码做过多讨论。
现代密码学方面:
- 对称加密(DES,AES,RC4,Chacha20等),加解密密钥一致的密码系统。
- 非对称加密(RSA,ECC,Elgamal等),加解密密钥不一致的密码系统。
- 哈希函数(MD5,SHA家族等),消息或数据压缩成摘要,使得数据量变小。
- 数字签名(RSA签名,Elgamal签名,DSA签名等),为签名者提供信息认证的密码体统。
以数学为起点,信息安全的基础建设。
学习资料:
- 数学基础、现代密码学入门(Bilibili) 优点:纯概念干货。缺点:无习题巩固。
- cryptohack 优点:方便快速学习、实践概念的习题平台。缺点:难度一般。
- 三年赛题,五年模拟:NSSCTF,攻防世界 等
- 概念性wiki
先有概念,再过理论,代码实操,有时候实在无法理解某些密码学组件,可以从敌手的角度思考如何攻击试试。
如何做题
前提:理解数学原理、会一点编程语言就足够了。
准备好纸笔,理清题目的加解密逻辑,分析其中的“数学漏洞”,找出其中可以被求出的参数,经过一定的编程,加以利用、破解密钥。
如果一个人无法理清逻辑,可以试试先识别题目的密码学组件,思考、搜索组件可能存在的漏洞,亦或参考类似题目解法,参考论文文献,查找他人博客经验等,可能碰巧就有现成的思路、解题代码。
常用工具
密码学大概是所有方向里面,最不用折腾计算机环境的一门学科了,装个Python、方便的Python函数库就足以应对绝大部分密码赛题了,对计算机的要求就是能跑出我们想要的数学运算就行。
必备工具
- 纸、笔:理清题目逻辑,把代码抽象为数学表达。再通过数学推导,用编程实现破解。
编程环境
代码编辑器 & IDE
- Sublime : 优点,跟记事本一样轻量便捷、可拓展性高。缺点,得下破解版,手动配置环境插件等。
- VScode :优点,安装即用,插件齐全,也比较轻量。没有太大的缺点。
推荐的Python函数库:
打开命令行 ,通过 pip install 函数库名 即可
- pycryptodome : 密码学计算实用工具库
- gmpy2 : 同上
- pwntools : 用作远程交互、本地调试题目等