简介
本篇将继续跟随chipwhisperer-jupyter sca101的教程来学习使用ChipWhisperer Analyzer提供的API来进行相关性能量分析(CPA)攻击
开始
最开始的代码,作用依旧是编译目标板固件并刷入,然后抓取能量迹
直接进入正题,python中使用ChipWhisperer Analyzer需要先导入包
1
import chipwhisperer.analyzer as cwa
然后,这个analyzer的方便之处在于,像之前分析AES时用到的SBox模型,analyzer都给封装好了,只需在analyzer的leakage_models模块下选择一个模型即可,一行代码搞定(非常方便)
1
leak_model = cwa.leakage_models.sbox_output
同样地,进行CPA攻击,也只需一行代码初始化
1
attack = cwa.cpa(proj, leak_model)
可以通过print(attack)来查看设置信息
同样地,开始执行CPA攻击也是执行一行代码即可
1
results = attack.run()
查看结果,如下图所示,可以看到,利用chipwhipserer analyzer提供的API,大大减少了代码量,非常地方便
接着的提示信息是说,CPA攻击的返回结果可以调用find_maximums函数来获得全部信息
可以利用pandas的dataframe来查看find_maximums的结果
1
2
3
4import pandas as pd
stat_data = results.find_maximums()
df = pd.DataFrame(stat_data).transpose()
print(df.head())甚至可以dataframe的.style方法来自定义显示数据,如下图,可以将真实的Key用红色高亮显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15key = proj.keys[0]
def format_stat(stat):
return str("{:02X}<br>{:.3f}".format(stat[0], stat[2]))
def color_corr_key(row):
global key
ret = [""] * 16
for i,bnum in enumerate(row):
if bnum[0] == key[i]:
ret[i] = "color: red"
else:
ret[i] = ""
return ret
df.head().style.format(format_stat).apply(color_corr_key, axis=1)接着的提示信息是说,ChipWhisperer Analyzer使用上一篇中提到的“可以实时更新的”相关性计算,这意味着,我们可以从攻击过程获取反馈信息。可以通过定义一个callback函数,并将callback函数传递给attack.run函数,以及传递一个数(每隔多少能量迹反馈一次)来实现实时反馈信息。
1
2
3
4
5
6
7
8
9
10
11
12from IPython.display import clear_output
import numpy as np
def stats_callback():
results = attack.results
results.set_known_key(key)
stat_data = results.find_maximums()
df = pd.DataFrame(stat_data).transpose()
clear_output(wait=True)
display(df.head().style.format(format_stat).apply(color_corr_key,axis=1))
results = attack.run(stats_callback, 10)运行后,可以看到整个cpa攻击过程中排在前5的相关系数最大的key的变化,非常地直观!
另外analyzer还提供了一个默认的jupyter的callback,只需要3行代码就可以实现跟上面一样的效果
1
2
3import chipwhisperer as cw
cb = cwa.get_jupyter_callback(attack)
results = attack.run(cb, 10)analyzer还提供了一个生成可以用于画图数据的函数analyzer_plots
总结
- ChipWhisperer Analyzer是一个可用于侧信道攻击非常强大的python库,通过ChipWhisperer Analyzer可以极大方便我们完成侧信道攻击
- ChipWhisperer Analyzer还有很多API需要去学习研究