最近一直在忙,都没能抽出时间来认认真真的学点东西,寒假去了一家圈子内比较有名的公司呆了几天学了点东西。从今天开始整理下自己所学到东西,也为这几天的学习做一个总结。
这一篇写的是密码学方向的内容,因为之前看WEB的东西看的更多所以每次碰到密码学方向的题目我其实挺懵的,这次机会正好补补基础。
古典密码
凯撒密码
凯撒密码也称为移位密码,加密时会根据偏移量进行相应的移位。对照表是26个英文字母,例如当偏移量为1时明文A经过加密后就变成了B。
在不知道偏移量的情况下我们可以进行爆破。偏移量取值范围为1~25。
乘法密码
乘法密码是替换密码的一种,加密时对已知明文进行编号,通过加密算法得到相应的位置表并且替换明文后得到密文。
1 | 设明文消息元素个数为n,密钥为k。 |
解密时可以进行爆破,密钥有11种。
仿射密码
仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程(ax+b) mod (26)
加密,b为移动大小。
密钥为gcd(a,b)
一共是311种情况这里的明文全为字母。所以在破解时可以尝试暴力破解。
1 | ##判断是否与26互素 |
针对指定规则的简单代换密码,我们还可以采用词频分析的方法来进行破解,因为在现实情况中每个字母的使用频率是有很大的差异的。
维吉尼亚密码
维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。这个密码号称是不可破解的密码,因为它密钥空间够大杜绝了普通计算机暴力破解的可能。
在破解时还是可以根据词频分析来尝试对密文进行破解
在线工具: https://www.guballa.de/vigenere-solver
在线工具: https://www.qqxiuzi.cn/bianma/weijiniyamima.php
现代密码
序列密码
序列密码也称为流密码,它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点。它模仿一次密码本的加密方式,但是密钥是伪随机的。伪随机的意思是实际上它并不能真正的随机出加密密钥,在实际加密中是利用密钥流产生器LFSR。
获取伪随机序列的常用方法是线性反馈移位寄存器。
分组密码
分组密码也可以称为块密码,将明文分成等长的块(如果位数不足则用0补齐),然后对每一块进行加密操作。
DES加密
des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。
加密特点:分组长度为64比特;密钥长度为64比特(但只有56位有效)
AES加密
AES技术是一种对称的分组加密技术,使用128位分组加密数据,提供比WEP/TKIPS的RC4算法更高的加密强度。AES的加密码表和解密码表是分开的,并且支持子密钥加密,这种做法优于以前用一个特殊的密钥解密的做法。AES算法支持任意分组大小,初始时间快。特别是它具有的并行性可以有效地利用处理器资源。
加密特点:分组长度为128比特即16字节。而密钥长度为可选的,分别为128比特、192比特、256比特。
ECB工作模式
最简单的加密模式为电子密码本(Electronic Code Book, ECB)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。最后 直接将密文串连起来。
CBC工作模式
1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
加密特点:每个密文块都依赖于它前面的所有明文块,消除了明文统计特性。
填充攻击
Hash函数
哈希(Hash)函数也叫杂凑函数、散列函数,是将任 意长度的消息 𝑚 转换成较短的、固定长度的哈希值 𝐻(𝑚) 的不需要密钥的不可逆的单向密码体制。
常见的HASH函数:MD5、SHA-1、SHA-256。
1 | 在Linux shadow文件的加密中域密码由三部分组成$id$salt$encrypted |
常见的攻击方法暴力破解及彩虹币攻击(将所有已知的哈希值及明文存入数据库中)。彩虹表攻击在线地址 https://www.cmd5.com/
RSA加密
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。RSA的安全性本质上是基于大数的因数分解,所以通过加密密钥来反推解密密钥在实际的情况中是行不通的。
1 | 密钥的生成: |
上面说过实际上RSA的安全性是基于大数的因数分解困难,在实际情况中我们可以利用工具暴力破解或者是利用在线工具查询已知大数的分解情况。
工具:yafu;在线工具:http://factordb.com/
总结
密码学分类
- 加密密钥是否相同?
- 加解密密钥相同 –> 对称密码
- 加解密密钥不同 –> 公钥密码(非对称密码)
- 无密钥 –> 哈希函数
- 安全性取决于?
- 加密算法的保密 –> 古典密码
- 取决于密钥的保密,算法公开 –> 现代密码
对密码学的攻击
暴力破解
统计分析
数学分析
侧信道攻击(物理方法):
边信道攻击(side channel attack 简称SCA),又称侧信道攻击:针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法被称为边信道攻击。这类新型攻击的有效性远高于密码分析的数学方法,因此给密码设备带来了严重的威胁。
练习题
凯撒相关
原题:
1 | Jxyi yi oekh tqo.Jxyi yi oekh suburhqjyed., qdt jxu vbqw yi vv97v97t5t1ss32t9q5u62s2uu1t2v2s, ikrcyj myjx vbqw qdt {} |
解密:
1 | 直接扔工具跑,位移16: |
仿射密码
原题
1 | achjbnpdfherebjsw |
解密:
1 | 跑脚本,得到flag:flagisyouareright |
DES
原题:
1 | import pyDes |
解题:
1 |
RSA
原题
1 | from Crypto.Util.number import * |
解题:
1 | # Python 3.8 |
最短路径
原题:
1 | 以下是数行数据,每行第一个,第二个数字代表这条路的两个端点国家,第三个数字代表路途长度,最后一个字符串便是神秘代码。路在附件中~ 帮助救世主尼奥吧,他快被吓尿了。。。 |
解题:
1 | 这是一道算法题,求最短路径。 |