CTF-Crypto 2021-10-4 记录

基础知识

CBC翻转攻击

简介:

当我们的一个值C是由A和B异或得到
C = A XOR B
那么
A XOR B XOR C很明显是=0的
当我们知道B和C之后,想要得到A的值也很容易
A = B XOR C
因此,A XOR B XOR C等于0。有了这个公式,我们可以在XOR运算的末尾处设置我们自己的值,即可改变。

CBC-AES:Encrypt(明文^IV)

例如,已知CBC第一块(16位)

  1. 明文
  2. 密文

想直接修改第11位字符 0->1

已知第11位字符为1,我们可以直接将加密后的
密文[10]=密文[10] xor ‘0’ xor ‘1’
即可修改

BASE64基本加密原理

A=>QQ==
a=>YQ==

97=110 0001=>右移2位 成6位=>1 1000==>查表(24)Y
上一个剩余的01二进制右移四位 010000=>查表(16)Q
填充(= =)
结果YQ==

  1. 在BASE64中,通常是以3个字符(ASCII)开始编码为一组
  2. 在转换为2进制中,又会以6位二进制分组(即一组:4*6=24)
  3. 在空数据,以=作为填充字符
a
1 1000 010000
Y Q = =

Pasted image 20210927104813.png
Pasted image 20210927105420.png
Pasted image 20210927105653.png

SpecialLCG

分析

MSSCTF 2021 初赛题学习
Pasted image 20210930172317.png
Pasted image 20210930175749.png

笔记
from Crypto.Util.number.inverse = gmpy2.invert 求逆元
bin(数值),可求出数值的二进制

  • 不要想着现学现用,长期来看,慢慢去理解 不执著

EXP


from Crypto.Util.number import *

n=18253588106473969889
data=[8331802587873314500,16970700310063771377,16378474859328460142,13073117282614811463,747433301416436433]

t=[]

for i in range(4):
    t.append(data[i+1]-data[i])

a1=(t[2]*inverse(t[0],n)-t[3]*inverse(t[1],n))*inverse((t[1]*inverse(t[0],n)-t[2]*inverse(t[1],n)),n)%n
b1=(t[3]-a1*t[2])*inverse(t[1],n)%n
c1=(data[2]-data[1]*a1-data[0]*b1)%n

print(long_to_bytes(a1)+long_to_bytes(b1)+long_to_bytes(c1))

babyLCG

分析

a、b、m已知,求seed就可解出LCG

线性递归表达式:
self._state = (self._key['a'] * self._state + self._key['b']) % self._key['m']


143893630627599013207723094044959571968=
(107763262682494809191803026213015101802*x1+153582801876235638173762045261195852087)%226649634126248141841388712969771891297

跟题目去理解(LCG算法==>欧几里得拓展算法)
https://blog.csdn.net/superprintf/article/details/108964563

根据公式,还原seed(求出a,n的逆元,再套公式算seed)

还原seed的公式:seed = (ani*(seed-b))%n

a=107763262682494809191803026213015101802

n=226649634126248141841388712969771891297

b = 153582801876235638173762045261195852087

c =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值