【密码学基础】时间—储存权衡攻击TMTO

该文介绍了一种适用于各种算法的通用攻击方法,涉及离线预计算和在线攻击两个阶段。核心是通过压缩函数R和连接函数g处理密文,寻找可能的密钥。在线阶段,通过不断对比和调整,逐步逼近正确密钥。即使在多次比较未找到匹配时,也能通过递归方式更新候选密钥。

最近在研究这个方法,有一些感悟选择发上来,希望自己的拙见能够帮到大家

本方法属于强力攻击的一种,是可针对各个不同算法的通用攻击方法,因其同时考虑了需付出的时间及空间代价,故得此名。适用范围是选择明文攻击。

本方法的核心公式:k_{i,j+1}=R(Ek_{i,j}(P))=g(k_{i,j}).

R为压缩函数,将密文压缩成key所占比特长度。(共S个)

g:为连接函数,表示由k{_{i,j}}得到k_{i,j+1}  (如何得到?其实就是通过公式中的先E后R得到的。兜了一个圈子,表达了同一个意思。猜测创造这个符号可能就是为了方便书写吧...)

本方法分为两个阶段:离线阶段(预计算)和在线阶段

离线阶段:随机选择m个倒霉的key,对其按公式进行运算。如图所示。

但注意,只需要存方块所示部分,即只存每条链表的头和尾。以实现节省储存空间。

 在线阶段:开始攻击,核心思想就是永远和链表的尾部比!

敌手选择明文得到(P,C)

C1和离线阶段中存的表的尾列比:每一个比t次,共S张表,故比较st次。若有一致的,则说明找到了可能的key,这个key就是k_{i,t-1}.原理是什么呢?就是公式!

由公式可得,因为对C进行完R操作之后,C就变成了一个K,而这个K又是用上一个K加密P,再压缩得到的,故上一个K就是可能正确的密钥值。

那么问题来了,如果st次比较都没有一样的怎么办?对C1继续做手脚!把C1当作K求得C2,继续和尾列比,如果此时相等,则说明真正的K进行了两次g函数才得到了结果,那么让我们来看K链,发现k{_{i,t-2}}经过两次g函数得到了尾列,故可能正确的密钥就变成了k{_{i,t-2}}.

以此类推

是不是很容易?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值