crypto密码学知识大纲
文章目录
- 概述
- 基本分类
- 古典密码
- 凯撒密码
- 移位密码
- atbash cipher(埃特巴什)
- 简单替换密码
- 仿射密码
- 多表替换加密
- 维基利亚密码
- hill密码
- 培根密码
- 栅栏密码
- 01248 云影密码
- 键盘密码
- 对称密码
- 流密码
- 块密码
- 非对称密码
- RSA
- 哈希函数
- MD5
- SHA1
概述
ctf-wiki https://ctf-wiki.github.io/ctf-wiki/crypto/introduction/
基本分类
古典密码
识别密码类型 加密方式,字符类型
##单表替换加密
特点:明文密文一一对应
破解:密钥空间小,暴力破解(2的64次方以内);
密文长度长,词频分析(http://quipqiup.com/)
工具:CAP4
JPK
Cryptool
凯撒密码
明文中不同的偏移量,按照字母表中固定顺序
此外,还有还有一种基于密钥的凯撒密码 Keyed Caesar。其基本原理是 利用一个密钥,将密钥的每一位转换为数字(一般转化为字母表对应顺序的数字),分别以这一数字为密钥加密明文的每一位字母
JPK 解密凯撒
此图为解密知道密钥的凯撒,在空白框内键入密文,然后选择keyed Caesarsh输入密钥
还可以进行base64 等转换,功能挺强大
移位密码
字母和数字,特殊字符都能处理,ASCII表进行
atbash cipher(埃特巴什)
词频分析
http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/
简单替换密码
每个明文字母对应唯一的一个且不同的字母,完全混乱,26!数量太庞大
一般词频分析http://quipqiup.com/
仿射密码
加密函数E(x)=(ax+b)(modm)E(x)=(ax+b)(mod m)E(x)=(ax+b)(modm)
其中x为明文按照某种编码得到的数字(比如说可以就按照字母表的顺序),m为编码系统中字母的个数
解密函数D(X)=a(−1)(x−b)D(X)=a^(-1)(x-b)D(X)=a(−1)(x−b)
首先了解什么是乘法逆元及求法?
如果有ab≡1(modp)ab≡1(modp)ab≡1(modp),则称b是mod p意义下a的乘法逆元
比如2×3=1(mod5)2 \times 3=1(mod 5)2×3=1(mod5),则称3是mod 5下2的乘法逆元
所以(E(x)−b)∗a(−1)(E(x)-b)*a^(-1)(E(x)−b)∗a(−1)就能恢复x
求逆元,可以在Python中加载gmpy2
欧拉函数:
在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)
φ(x)=x(1−1/p(1))(1−1/p(2))(1−1/p(3))(1−1/p(4))…..(1−1/p(n))φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n))φ(x)=x(1−1/p(1))(1−1/p(2))(1−1/p(3))(1−1/p(4))…..(1−1/p(n))其中p(1),p(2)…p(n)为x
的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。
注意:每种质因数只有一个。
φ(10)=10×(1−1/2)×(1−1/5)=4φ(10)=10×(1-1/2)×(1-1/5)=4φ(10)=10×(1−1/2)×(1−1/5)=4;
1 3 7 9
破解:
首先特点一般都是26个字母,这种密码由两种参数来控制,如果我们知道其中任意一个参数,那我们便可以很容易地快速枚举另外一个参数得到答案
或者知道密文对应的两个不同的明文,则可以根据上式,求出a,然后可以枚举求出b
例子:TWCTF 2016 super_express ??
多表替换加密
维基利亚密码
已知密钥 可以直接用CAP4破解
未知密钥
https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx
https://www.guballa.de/vigenere-solver
hill密码
工具cap4
培根密码
只有两种字符,长度为5的倍数
栅栏密码
破解 可以Python暴力破解
这里发现了一个新大陆,国内和国外的栅栏竟然不一样,
http://www.practicalcryptography.com/ciphers/classical-era/rail-fence/
http://ctf.ssleye.com
这个解密工具也是根据国外的栅栏算法进行的
在线解的栅栏网站,国外的栅栏式“ V ”型进行解密,而国内一般是矩形的排列
7个作为一栏,然后在底部的是两栏共用,最后按照行从左至右的顺序进行加密
所以加密后的结果就是 kzna{blnl_abj_lbh_trg_vg}
变换成了类似 flag{} 的形式,然后想着凯撒解密
get。
PS:
此题的知识盲区就是对栅栏密码的了解只在矩形形式上,国外哪种V型不了解,而且是用其进行加密,以后遇到类似的可以试着不一定是解密,也可能是加密。
01248 云影密码
使用 0,1,2,4,8 四个数字,其中 0 用来表示间隔,其他数字以加法可以表示出 如:28=10,124=7,18=9,再用 1->26 表示 A->Z
只有01248四个数字
键盘密码
电脑键盘加密
例子:0ctf 2014 classic
2017 xman 选拔赛 一二三 木头人
阿里彩蛋,消失的三重密码(quip qiup)
2017 seccon vigenere3d
对称密码
加密和解密使用的密钥相同,需要传输密钥
流密码
流密码一般逐字节或者逐比特处理信息。一般来说
流密码的密钥长度会与明文的长度相同。
流密码的密钥派生自一个较短的密钥,派生算法通常为一个伪随机数生成算法。
伪随机数生成器(PRNG)
线性同余寄存器
例子:Google woodman
(比特位思想)
https://github.com/ctf-wiki/ctf-challenges/tree/master/crypto/streamcipher/prng/2016_google_ctf_woodman
线性反馈移位寄存器
例子:2018 强网杯streamgame1
https://ctf-wiki.github.io/ctf-wiki/crypto/streamcipher/fsr/lfsr/#2018-streamgame1
https://blog.csdn.net/qq_39153247/article/details/80144695
1.分析flag 的比特位 32,在范围内,可以暴力破解
2.矩阵变换,从a 0-a n-1 ,经过一次线性变换 a 1 -a n,输出an, 经过n次变换后,a n- a 2n-1,
矩阵中表示,a0*T^n=an ,从而乘以T^n的逆,得a0
非线性移位寄存器
例子:2018强网杯streamgame3
特殊流密码 RC4
块密码
DES
输入64位,输出64位,密钥64位
例子:2018 N1CTF N1ES
AES
攻击攻击 积分攻击、碰撞攻击、不可能攻击
例子:2018国赛 Crackmec
simoon block cipher
例子:
ECB
不同明文分组的加密
例子:2016 ABCTF aes-mess
https://github.com/ctfs/write-ups-2016/tree/master/abctf-2016/crypto/aes-mess-75
e220eb994c8fc16388dbd60a969d4953f042fc0bce25dbef573cf522636a1ba3fafa1a7c21ff824a5824c5dc4a376e75
对这个判断明文之间的长度,可以分为三段
CBC
padding Oracle attack
例子:2017 HITON Secret Server
https://github.com/p4-team/ctf/tree/master/2017-11-04-hitcon/secret_server
2017 SECCON Simon and Speck Block Ciphers
非对称密码
RSA
然后 公钥为N+e,私钥为N+d,的拼接,
进行加密,其中n为消息经过某种编码转换成的数字,
进行解密,所以知道N,e,d就能解出
RSA的证明,可以看ctf-wiki
工具:RSAtool 生成私钥
RSA Converter
根据给定密钥对,生成pen.m文件(存储证书和密钥,实质上是base64编码的二进制内容)
根据n e d 得出p q
openssl
查看公钥文件
factor.db网站分解整数,yafu工具分解
Python 库 :primefac(整数分解库)
gmpy2
pycrypto
例子:
Jarvis OJ - Basic - veryeasyRSA
https://github.com/ctf-wiki/ctf-challenges/tree/master/crypto/asymmetric/rsa/rsa-theory/JarvisOJ-Basic-veryeasyRSA
这道题直接给出了p , q ,e ,让求d,直接可以在Python中运用gmpy2库
gmpy2.invert(e,r),此命令可以求e关于r的逆元即d
2018 CodeGate CTF Rsababy
https://github.com/ctf-wiki/ctf-challenges/tree/master/crypto/asymmetric/rsa/rsa-theory/2018-codegate-rsababy
对于这种根据RSA的原理来解题要分利用充分利用RSA中的已知条件e和d的逆元关系,即
,然后试着分解N,或找出N与其他某数的公约数,求出p
所以呢,此题中变量g中包含d,不妨
这样ed就能发挥作用,
根据RSA解密的原理,消去ed,
把上面的第2个算式带入第3个,并把模展开,
然后看见,可能想到费马小定理(费马小定理(Fermat’s little theorem)是数论中的一个重要定理,在1636年提出,其内容为: 假如p是质数,且gcd(a,p)=1gcd(a,p)=1gcd(a,p)=1,
那么 a(p−1)≡1(modp))a(p-1)≡1(mod p))a(p−1)≡1(modp))
即:
所以P能整除,把这个式子带入进去,p能整除,然后根据p∣(a+b)p|(a+b)p∣(a+b),p∣ap|ap∣a能推出p∣bp|bp∣b,所以
所以
gmpy2.powmod(a,b,c)求 a^b mod c
因此根据这个能求出来。
模数分解
例子:模数分解-光滑
smooth:Google一哈 光滑数是可以因式分解为质数相乘的正整数
primefac模块
哈希函数
MD5
MD5函数的初始IV,可以012345这样的顺序记忆
http://www.cmd5.com/ 破解
SHA1
初始IV
https://alf.nu/SHA1 破解
hashcat https://hashcat.net/hashcat/
crypto密码学知识大纲相关推荐
- 比特币中的密码学知识汇总
比特币中的密码学知识汇总 目前,我的阅读比特币源码系列文章已经更新了5篇,对应于精通比特币前3章内容的学习. 现在来到第4章密钥与地址的学习,本章主要介绍了比特币系统中公钥,私钥和地址之间相互的关系, ...
- NOI大纲 CSP初赛篇·知识大纲 CSP-入门级-NOI大纲
CSP初赛篇·知识大纲(未完成) CSP初赛篇·知识大纲(未完成)_qyxpsx7的博客-CSDN博客_csp考纲 [luogu7735] [NOI2021] 轻重边 - 数据结构 - LCT - 树 ...
- CISP知识大纲思维导图
CISP知识大纲思维导图
- matlab试用SUMT外点法求解,数学建模集训知识大纲
数学建模集训知识大纲 文章目录 数学建模集训知识大纲 评价算法 简单加权法 逼近于理想解的排序法(TOPSIS算法) 层次分析法 主成分分析法 模糊综合评价法 聚类分析法 秩和比法 人工神经网络 熵权 ...
- CTF秀CRYPTO密码学签到
CTF秀CRYPTO密码学签到 继续开启全栈梦想之逆向之旅~ 这题是CTF秀CRYPTO密码学签到 发现类似flag的}wohs.ftc{galf: 直接反转得到flag . . 为什么怎么简单的题目 ...
- Android知识大纲
Android知识大纲 Java垃圾回收机制 Java内存是如何划分的,Java语言为什么要使用垃圾回收机制? 垃圾判定 1. 标记引用算法 2. 根搜索法 虚拟机栈中的引用对象 方法区中的常量引用对 ...
- 数据库系统概论第五版知识大纲
数据库系统概论第五版知识大纲 第1章 绪论 1.1 数据库系统概述 基本概念 数据:描述事物的符号记录 数据库:数据库是长期储存在计算机内.有组织的.可共享的大量数据的集合 数据库系统:数据库系统是由 ...
- 计算机网络管理技术重要知识大纲
计算机网络管理技术知识大纲 一.交换机的数据转发原理 数据链路层.负责相邻节点之间的可靠数据通信,并进行有效流量控制.功能有: 链路连接的建立.拆除和分离. 帧定界和帧同步. 顺序控制. 进行数据协商 ...
- 2021最新腾讯面经分享:知识大纲+技术文档+面试专题
背景 985毕业至今刚好一年,我曾做过两三个月的测试感觉不是很合适,后面选择从事后端开发,还挺香.现在已经进入秋招的提前批了,想着去大厂试试水,就去了腾讯,整个一面下来我整个人都傻了,表示怀疑人生.. ...
- 关于学习密码学知识的一些基础知识( trapdoor function)
关于学习密码学知识的一些基础知识( trapdoor function) trapdoor function 陷门函数:正向计算是很容易的,但若要有效的执行反向计算则必须要知道一些secret/key ...
最新文章
- C语言实现ifconfig获取网卡接收和发送流量统计
- 从零开始学JavaScript一(简介)
- 第14章 结构和其他数据形式 14.12 typedef 简介
- php js 比较大小写,JavaScript中如何实现大小写转换
- oracle自动内存管理要不要开,Oracle 11g的自动内存管理
- 通过挂载系统光盘搭建本地yum仓库的方法
- 阿里云神龙团队拿下TPCx-BB排名第一的背后技术
- 计算机主机组成部分和功能,电脑的组成部分及作用
- saltstack中grains简介
- Java设计模式与实践
- 计算机毕业设计的读书笔记,毕业设计之读书笔记
- SNS源码大集合--转载ITPUB
- 超级鹰平台识别boss验证码
- 7月18日云栖精选夜读丨蚂蚁金服的“野心”:要做新一代世界级金融科技供应商...
- 看看最新BTA大厂的Java程序员的招聘技术标准,聪明人已经收藏了!
- matlab 渐变色
- 从大厂裸辞后,面阿里、字节全都挂掉,连货拉拉都不要自己...
- java自定义lock锁
- K8sPod资源基础管理操作
- L1-012 计算指数 (5 分) C语言
热门文章
- 基于 RK3399 5G 通信和图像增强算法的交通监控系统设计
- loadrunner+fiddler代理录制
- stm32 薄膜键盘原理_stm32F4----薄膜4*4矩阵键盘读取(七)
- C#可用的RSA公钥加密私钥解密以及私钥加密公钥解密,支持2048
- C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥
- 计算机软件需求说明编制指南gb/t 9385-2008,GBT 9385-2008 计算机软件需求说明编制指南.pdf...
- 卡巴斯基蓝屏问题处理
- php目录结构 modules,目录结构
- 二战十大致命武器之“喷火”式战斗机
- php打开word文件怎么打开,docx文件怎样打开