文章目录

  • 概述
    • 基本分类
  • 古典密码
      • 凯撒密码
      • 移位密码
      • 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密码学知识大纲相关推荐

  1. 比特币中的密码学知识汇总

    比特币中的密码学知识汇总 目前,我的阅读比特币源码系列文章已经更新了5篇,对应于精通比特币前3章内容的学习. 现在来到第4章密钥与地址的学习,本章主要介绍了比特币系统中公钥,私钥和地址之间相互的关系, ...

  2. NOI大纲 CSP初赛篇·知识大纲 CSP-入门级-NOI大纲

    CSP初赛篇·知识大纲(未完成) CSP初赛篇·知识大纲(未完成)_qyxpsx7的博客-CSDN博客_csp考纲 [luogu7735] [NOI2021] 轻重边 - 数据结构 - LCT - 树 ...

  3. CISP知识大纲思维导图

    CISP知识大纲思维导图

  4. matlab试用SUMT外点法求解,数学建模集训知识大纲

    数学建模集训知识大纲 文章目录 数学建模集训知识大纲 评价算法 简单加权法 逼近于理想解的排序法(TOPSIS算法) 层次分析法 主成分分析法 模糊综合评价法 聚类分析法 秩和比法 人工神经网络 熵权 ...

  5. CTF秀CRYPTO密码学签到

    CTF秀CRYPTO密码学签到 继续开启全栈梦想之逆向之旅~ 这题是CTF秀CRYPTO密码学签到 发现类似flag的}wohs.ftc{galf: 直接反转得到flag . . 为什么怎么简单的题目 ...

  6. Android知识大纲

    Android知识大纲 Java垃圾回收机制 Java内存是如何划分的,Java语言为什么要使用垃圾回收机制? 垃圾判定 1. 标记引用算法 2. 根搜索法 虚拟机栈中的引用对象 方法区中的常量引用对 ...

  7. 数据库系统概论第五版知识大纲

    数据库系统概论第五版知识大纲 第1章 绪论 1.1 数据库系统概述 基本概念 数据:描述事物的符号记录 数据库:数据库是长期储存在计算机内.有组织的.可共享的大量数据的集合 数据库系统:数据库系统是由 ...

  8. 计算机网络管理技术重要知识大纲

    计算机网络管理技术知识大纲 一.交换机的数据转发原理 数据链路层.负责相邻节点之间的可靠数据通信,并进行有效流量控制.功能有: 链路连接的建立.拆除和分离. 帧定界和帧同步. 顺序控制. 进行数据协商 ...

  9. 2021最新腾讯面经分享:知识大纲+技术文档+面试专题

    背景 985毕业至今刚好一年,我曾做过两三个月的测试感觉不是很合适,后面选择从事后端开发,还挺香.现在已经进入秋招的提前批了,想着去大厂试试水,就去了腾讯,整个一面下来我整个人都傻了,表示怀疑人生.. ...

  10. 关于学习密码学知识的一些基础知识( trapdoor function)

    关于学习密码学知识的一些基础知识( trapdoor function) trapdoor function 陷门函数:正向计算是很容易的,但若要有效的执行反向计算则必须要知道一些secret/key ...

最新文章

  1. C语言实现ifconfig获取网卡接收和发送流量统计
  2. 从零开始学JavaScript一(简介)
  3. 第14章 结构和其他数据形式 14.12 typedef 简介
  4. php js 比较大小写,JavaScript中如何实现大小写转换
  5. oracle自动内存管理要不要开,Oracle 11g的自动内存管理
  6. 通过挂载系统光盘搭建本地yum仓库的方法
  7. 阿里云神龙团队拿下TPCx-BB排名第一的背后技术
  8. 计算机主机组成部分和功能,电脑的组成部分及作用
  9. saltstack中grains简介
  10. Java设计模式与实践
  11. 计算机毕业设计的读书笔记,毕业设计之读书笔记
  12. SNS源码大集合--转载ITPUB
  13. 超级鹰平台识别boss验证码
  14. 7月18日云栖精选夜读丨蚂蚁金服的“野心”:要做新一代世界级金融科技供应商...
  15. 看看最新BTA大厂的Java程序员的招聘技术标准,聪明人已经收藏了!
  16. matlab 渐变色
  17. 从大厂裸辞后,面阿里、字节全都挂掉,连货拉拉都不要自己...
  18. java自定义lock锁
  19. K8sPod资源基础管理操作
  20. L1-012 计算指数 (5 分) C语言

热门文章

  1. 基于 RK3399 5G 通信和图像增强算法的交通监控系统设计
  2. loadrunner+fiddler代理录制
  3. stm32 薄膜键盘原理_stm32F4----薄膜4*4矩阵键盘读取(七)
  4. C#可用的RSA公钥加密私钥解密以及私钥加密公钥解密,支持2048
  5. C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥
  6. 计算机软件需求说明编制指南gb/t 9385-2008,GBT 9385-2008 计算机软件需求说明编制指南.pdf...
  7. 卡巴斯基蓝屏问题处理
  8. php目录结构 modules,目录结构
  9. 二战十大致命武器之“喷火”式战斗机
  10. php打开word文件怎么打开,docx文件怎样打开