首页
社区
课程
招聘
[讨论]大家知道CPU的分支预测能力到底是怎么回事吗?
2009-9-2 14:51 8651

[讨论]大家知道CPU的分支预测能力到底是怎么回事吗?

2009-9-2 14:51
8651
branch prediction capability ?

BPU:(Branch Processing Unit,分支处理单元)CPU中用来做分支处理的那一个区域。
  
Brach Pediction: (分支预测)从P5时代开始的一种先进的数据处理方法,由CPU来判断程序分支的进行方向,能够更快运算速度。
但是不知道如何,通过代码写程序进行追踪呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (14)
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhiji 2009-9-2 19:49
2
0
不知道具体是怎么回事, 我的理解就是:   

     每个比较跳转指令, 跳转后的地址,  "分支处理单元"会预先把其位置读到CPU缓存中.  这是我猜的....

还是找 IC 设计的人回答你的问题吧.
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-3 14:18
3
0
这篇论文好像是说新的CPU上的BPU的不安全性。

A branch instruction is a point in the instruction stream of a program where the next instruction is not necessarily the next sequential one.
There are two types of branch instructions: unconditional branches (e.g. jump instructions, goto statements, etc.) and conditional branches (e.g. if-then-else clauses, for and while loops, etc.).

就像这段说的,分支指令大概就是提前预测后面分支指令会到达的地方,然后做一些前期处理。
它分为无条件分支(jump、goto..)和条件分支(if-then-else或while loop...)

然后作者提出四种攻击RSA的方法,不过完全没提及如何编程实现(好吧,确实目前论文都是这个样子,根本就不会出现代码...)。他的参考文献都是些 Modern Processor Design: Fundamentals of Superscalar Processors 之类的,也许根本不是用软件,而是直接片上设计...
另外,你没新的CPU,一样没法去写程序验证
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-3 22:40
4
0
BPU即分支预测单元,由预测缓冲区和预测器组成,文中所描述的第一种攻击方式,针对的是RSA简单实现的方法,即采用平方乘法算法和蒙哥马利乘法,里头提到如果是采用CRT(中国剩余定理)的话,则该攻击方式失效。

攻击的原理是通过构造M1,M2,M3,M4,造成BPU的预测失效,通过失效的时间差异来推算di,然后我就不清楚,这4个M是怎样构造的,其中的区别是什么?构造完是不是接着构造密文,然后执行RSA解密程序,进行时间测量,通过测量的结果推算di?其中还引入了Oracl,这是什么含义呢?还有获取目标分支?初始化预测单元的状态?里头涉及的东西都很让人抽象?

欢迎大家接着讨论。
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-3 22:41
5
0
基本符合。但是这里指的不是cpu的cache.而是另外的一个部件。
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-4 09:46
6
0
算法我就不是很懂了,作者只说了原理,完全没涉及是如何编程、做实验验证的。
我到更想知道这个技术是否能够通过软件编程来控制,CPU的分支预测模块应该不是简单的操作能访问得到的。
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-5 00:53
7
0
技术理论上是可以实现的,只不过类似于基于cache的攻击方式,通过制造一序列的垃圾数据,驱逐原有cache的值,从而造成cache访问失效和命中,以访问时间差异表现出来。
这里BPU应该也属于类似的实现方式吧,只不过是通过条件分支的指令,因此这里也需要制造造成BPU预测失效的指令,问题是如何构造这些指令呢?
文中还指出此类攻击方式能够运用于运算依赖于密钥的算法。
多多交流指导!
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leftup 2009-9-5 08:49
8
0
AMD的BPU 貌似是 一组Bit,每个Bit记录上次某个地址是跳转还是没跳,如果跳了,就预测下次还要跳,没跳就预测下次也不跳,intel的应该也类似
我记得这个攻击的原理好像是 CPU用简单的哈希算法(貌似就是取物理地址中的几位拼起来,所以很多地址对应同一个Slot) 算出 对应于某个地址的跳转的BPU的那个Slot,于是可以在自己的程序中找一个地址,让它和我们想观察的跳转对应同一个Slot,然后在自己的地址上写上一个条件跳转,执行自己的跳转,使得那个跳转的预测记录被抛弃,导致执行所需时间改变。至于这会导致别人跳转的预测记录无效还是会使用我们的那个跳转的预测信息,我不是特别清楚,请了解的指点一下
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-5 10:14
9
0
于是可以在自己的程序中找一个地址,让它和我们想观察的跳转对应同一个Slot,然后在自己的地址上写上一个条件跳转,执行自己的跳转。
————————————————
地址不知道如何查找呢?
————————————————
至于这会导致别人跳转的预测记录无效还是会使用我们的那个跳转的预测信息
————————————————
哪个执行都会先失效的。因为这样的情况是占用同样的slot,因此再次执行的话,在这里就会发生预测失效。
雪    币: 255
活跃值: (49)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
ppanger 4 2009-9-5 11:01
10
0
《软件调试》一书中有这方面知识的介绍 可以参考一下
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leftup 2009-9-5 12:34
11
0
有么?软件调试 介绍BTS还可以理解,它为什么会介绍BPU
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-7 15:27
12
0
有谁能明白,在第一种攻击方式中是如何构造CS和RS集合的呢?并且测量的分支预测的执行时间,指的是测量所有的还是关键部位呢?
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-7 15:30
13
0
大家注意Mtemp的构造方式。
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-7 16:49
14
0
看完之后原理基本能明白,但是不知道怎么实施呢?测量的目标到底是什么呢?是整体的解密时间还是某一分支执行的时间呢?如果是某一分支的话,那又是如何测量的呢?
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2009-9-10 21:49
15
0
本人理解,构造M1和M2两个集合,在蒙哥马利乘法中,一个会发生约减,另一个不会发生约减。
那么在采用平方乘法运算中,
如果di==1,由于执行了蒙哥马利乘法,因此两个集合的解密执行时间的差异就会比较大;
反过来说,如果两个集合的解密执行时间差异较小的话,则反推di==0.
问题是如何构造M1和M2,保证一个会发生约减,另一个不会发生约减呢?
游客
登录 | 注册 方可回帖
返回