序言
哈尔滨地区的大学,寒假早而久。
于12.27日十点便已解放,28日下午七时方才到家。
🤔大有效仿凡人修仙转之意,本着记录每日以“匕首反握,杀死懒惰”原则,开下此篇。
大体上,密码手的安排,自然是得先把密码搞清楚有多难。
又因为谋划着转到计科,还得学些C、离散数学与做些玩具般的项目为好。
12.28/29
TCP/IP
王小波
愁容骑士
乌云典当铺
酒精
计算器乐
炉石传说
12.30
Crypto·RSA
RSA系列视频:风二西RSA教学
数学知识–模运算
基本运算
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p
a ^ b % p = ((a % p) ^ b) % p
注:% 为取余, ^为幂.
结合律
((a + b) % p + c) = (a + (b + c) % p) % p
((a * b) % p * c) = (a * (b * c) % p) % p
交换律
(a + b) % p = (b + a) % p
(a * b) % p = (b * a) % p
分配律
(a + b) % p = (a % p + b % p) % p
((a + b) % p * c) % p = ((a * c) % p + (b * c) % p )%p
重要定理
若 a ≡ b (mod p),则对于任意的 c,都有(a + c) ≡ (b + c) (mod p)
若 a ≡ b (mod p),则对于任意的 c,都有(a * c) ≡ (b * c) (mod p)
若 a ≡ b (mod p),c ≡ d (mod p),则
(a + c) ≡ (b + d) (mod p)
(a - c) ≡ (b - d) (mod p)
(a * c) ≡ (b * d) (mod p)
(a / c) ≡ (b / d) (mod p)
原理证明
证明RSA加/解密的正确性
py库libnum
获得指定比特位素数
1 | libnum.generate_prime(bits) |
字符串与数字之间的转换(string to num
1 | libnum.s2n(m) |
求解逆元
1 | libnum.invmod(e, phi) |
费马分解
当直接分解n不出且知道p、q两素数大小接近时,可以用费马分解写脚本来得到p、q
代码
1 | def isqrt(n): |
公/私钥
公钥生成
1 | from Crypto.PublicKey import RSA |
私钥生成
1 | from Crypto.PublicKey import RSA |
公钥读取
1 | from Crypto.PublicKey import RSA |
私钥读取
1 | Crypto.PublicKey import RSA |
OAEP
最优非对称加密填充(英语:Optimal Asymmetric Encryption Padding,缩写:OAEP
OAEP结构,正常读取求解会导致结果乱码。
需要针对性的代码
1 | from Crypto.Cipher import PKCS1_v1_5 |
12.31
Crypto·RSA
共模攻击
针对同明文m、同n,且$e_1$与$e_2$互质
出题角度
对明文m用两个e,同一n加密。
格式:
1 | m = .... |
解题角度
数学角度
学习了扩展欧几里得算法(先前用来算e对phi的逆元d),
共模攻击也用上了
扩展欧几里得算法:对于不全为0的a、b,有:ax + by = gcd(a, b)
其中gcd(a, b) 表示 a,b的最大公约数
用其得到 满足 $s_1·e_1 + s_2·e_2 = gcd(e_1, e_2) = 1$的 $s_1、s_2$
最终,明文m可用如下公式得到:
$$m = (C_1^{s_1}modn\cdot C_2^{s_2}modn)modn$$
计算机角度
1 | import gmpy2 |
原理证明
证明共模攻击的可行性
维纳攻击
针对e过大
原理🤔
代码
1 | import gmpy2 |
低加密指数攻击
针对e极小的情况
原理
代码实现
1 | import gmpy2 |
低加密指数广播攻击
相同的m,e(小!素数)
不同的n、c
题目
1 | e= 23 |
原理
中国剩余定理及部分裴蜀定理证明
原理证明
实际应用
代码
1 | import binascii,gmpy2 |
2022.1.1
BMZCTF
“明天要考了,我现在突击一下”
为了明天的正式赛事,凌晨做了下BMZCTF平台的练习题。
采取动态分数,题目后面的即是做时的分数。新年快乐!
4进制·1
题目
1212 1230 1201 1213 1323 1012 1233 1311 1302 1202 1201 1303 1211 301 302 303 1331
py3代码
1 | a = '1212 1230 1201 1213 1323 1012 1233 1311 1302 1202 1201 1303 1211 301 302 303 1331' |
2018 AFCTF Morse·1
题目
-…./.—-/-…./-…./-…./…–/–…/….-/-…./-…./–…/-…/…–/.—-/–…/…–/..—/–…/–…/….-/…../..-./–…/…–/…–/—–/…../..-./…–/…–/…–/….-/…–/…../–…/—-./–…/-..
题解
网站解码
2018 HEBTUCTF 社会主义接班人·1
题目
身为社会主义接班人的你,核心价值观你会背吗?
自由爱国自由平等自由文明平等自由平等平等自由和谐平等自由自由公正法治诚信民主公正平等公正友善自由法治公正公正友善敬业法治公正公正自由公正民主法治和谐公正公正公正诚信富强公正公正法治公正公正友善法治法治文明公正公正公正友善法治法治和谐公正自由公正平等公正诚信和谐法治爱国公正友善自由法治诚信和谐
题解
社会主义价值观在线解码
栅栏密码·1
题目
fa{660cb679d7866ffalg7d27e041cfbd18ed}
题解
1 | def enFence(string, space): # 解密 |
Ook·1
题解
Ook码在线解码
题目
题解
接下来,无脑点击结果优化!
结果放进栅栏, 解得:
我觉得flag是这个!你看呢?
flag{0939_F2A_BACD0}
easy_base·13
题目
“影分身之术*40”
下载后,打开看到巨多的base64
懒得写代码,厨师👨🍳烹饪40次
2018 HEBTUCTF Sudoku&Viginere·39
题目
下载附件,为一个doc文件,打开后发现是一个数独游戏,和一个密码。
题解
完成数独后:
维吉尼亚解码,得到:
HEBTUCTF{15_1t_3a5y}
看键盘·56
题目
ujn njkm ijnmhjk fgtrdcv tgvgy njkm hjuygbn ijnmhjk
提交:ctf{}
题解
常规又离谱。
根据古典密码大全(2),没找到
于是便仔细看键盘,发现每组连在一起,轨迹像字母
第一次尝试
i/j/l n ? e y/v n e ?
第二次尝试
jnteynet
第三次尝试
lnteynet
l为L小写
第四次尝试
我一眼就看出是你!互联网
ctf{internet}错了!
第五次尝试
ctf{Internet}
意料之外,情理之中
成了!
2018 AFCTF 可怜的RSA · 69
题目
flag.pem 和 public key.pem
题解
改公钥后缀,放入网站解析(其实python本身就可以做到
得到n,e 进而得到q、p、phi、d
flag改后缀能打开,看到base形式的东西,直接base解码没东西
GVd1d3viIXFfcHapEYuo5fAvIiUS83adrtMW/MgPwxVBSl46joFCQ1plcnlDGfL19K/3PvChV6n5QGohzfVyz2Z5GdTlaknxvHDUGf5HCukokyPwK/1EYU7NzrhGE7J5jPdi0Aj7xi/Odxy0hGMgpaBLd/nL3N8O6i9pc4Gg3O8soOlciBG/6/xdfN3SzSStMYIN8nfZZMSq3xDDvz4YB7TcTBh4ik4wYhuC77gmT+HWOv5gLTNQ3EkZs5N3EAopy11zHNYU80yv1jtFGcluNPyXYttU5qU33jcp0Wuznac+t+AZHeSQy5vk8DyWorSGMiS+J4KNqSVlDs12EqXEqqJ0uA==
Punchline
风二西的课程讲了,这里才看到实际的应用。
1 | text = 'GVd1d3viIXFfcHapEYuo5fAvIiUS83adrtMW/MgPwxVBSl46joFCQ1plcnlDGfL19K/3PvChV6n5QGohzfVyz2Z5GdTlaknxvHDUGf5HCukokyPwK/1EYU7NzrhGE7J5jPdi0Aj7xi/Odxy0hGMgpaBLd/nL3N8O6i9pc4Gg3O8soOlciBG/6/xdfN3SzSStMYIN8nfZZMSq3xDDvz4YB7TcTBh4ik4wYhuC77gmT+HWOv5gLTNQ3EkZs5N3EAopy11zHNYU80yv1jtFGcluNPyXYttU5qU33jcp0Wuznac+t+AZHeSQy5vk8DyWorSGMiS+J4KNqSVlDs12EqXEqqJ0uA==' |
代码
1 | # flag 文件 改txt后base码 |
small_rsa·72
题目
1 |
|
题解
我一眼就看出来,你的e才等于3.
了解到低加密指数攻击
代码
1 | import gmpy2 |
以上为凌晨时分的题解。
今天主要在打BMZCTF赛事,虽然没出什么成绩但收获不小。
1.2
中国剩余定理及部分裴蜀定理证明
原理证明
实际应用
1.3/1.4
RSA·N不素
特征是,生成多个N的时候,用了同一个素数p/q
对策
求两个的N之间的公约数p。
代码
1 | import libnum |
RSA·dp泄漏
什么是dp
$$ dp = d mod (p-1) $$
攻击原理
代码实现
1 | import gmpy2 as gp |
2018 AFCTF BASE · 100
题目
打开后真的好长的HEX,杂了base64、base32
题解
厨子👨🍳一把梭,啥都不说了,开烹!
点了大概十几下数据美化
CyberChef,YYDS!(稳定性与可处理的数据量都好完美
看的出来吗 · 82
题目
有一串神奇的字符串bE0veldtTDs7NzlTe3hzbSFYSj5Sa2U6eyQ4NyVrI3FvWFU6Qls7QlVK,还有一张纸条写着589164
看了后,完全没思绪。
长这个样子,又有key的加密方式确实是不知道…
题解
经过base64解码、base91解码、base58解码得到
https://base64.supfree.net/
http://ctf.ssleye.com/base91.html
http://ctf.ssleye.com/base58w.html
恐怖如斯,原来是base的58、91、64(说来好像遇到过,看来印象不够深刻
键盘之争 · 84
题目
你听说过键盘之争吗?提交你找到的字符串md5值。
ypau_kjg;”g;”ypau+
好的,👀看了半天,啥也没看出来
题解
键盘布局有qwerty、dvorak、colemak
此题考察的是将qwerty布局转为dvorak
代码实现
1 | import hashlib |
easy_CRC · 92
题目
1:C4E68E3A
2:08FF301C
3:F6FBA587
4:B85C2F9A
5:F1B73D20
6:C6F1D9D7flag=1+2+3+4+5+6
Each serial number consists of 4 characters
题解
已知明文长度的CRC爆破,具体学习可见:Python·CRC爆破学习
代码
1 | import binascii |
Crypto_xor · 95
2018 AFCTF MagicNum · 86
题目
72065910510177138000000000000000.000000
71863209670811371000000.000000
18489682625412760000000000000000.000000
72723257588050687000000.000000
4674659167469766200000000.000000
19061698837499292000000000000000000000.000000
看不明白!
题解
流加密,待续
1837 · 86
题目
MTEgMTExIDAwMCAwMCAwMTExMSAwMDAgMDAxMCAwMDEgMTA
题解
base64解码
11 111 000 00 01111 000 0010 001 10
这里觉得好熟悉,卡了一会儿,在想1837
摩斯电码解码
flag{MOSI1SFUN}
总结
- 01码与摩斯电码的配合
- 1837年摩斯电码诞生
目前
主要在看RSA与BMZCTF刷题。
排名: 52 / 1605
答题情况
🧻❤️㊙️🐎