0%

侧信道攻击学习笔记8-ChipWhisperer Analyzer 相关性能量分析攻击

简介

  • 本篇将继续跟随chipwhisperer-jupyter sca101的教程来学习使用ChipWhisperer Analyzer提供的API来进行相关性能量分析(CPA)攻击

    cpa2

开始

  • 最开始的代码,作用依旧是编译目标板固件并刷入,然后抓取能量迹

    image-20220828160903549

    image-20220828161019273

  • 直接进入正题,python中使用ChipWhisperer Analyzer需要先导入包

    1
    import chipwhisperer.analyzer as cwa

    image-20220828161222474

  • 然后,这个analyzer的方便之处在于,像之前分析AES时用到的SBox模型,analyzer都给封装好了,只需在analyzer的leakage_models模块下选择一个模型即可,一行代码搞定(非常方便)

    1
    leak_model = cwa.leakage_models.sbox_output

    image-20220828161449730

  • 同样地,进行CPA攻击,也只需一行代码初始化

    1
    attack = cwa.cpa(proj, leak_model)

    image-20220828161605590

  • 可以通过print(attack)来查看设置信息

    image-20220828161754626

  • 同样地,开始执行CPA攻击也是执行一行代码即可

    1
    results = attack.run()

    image-20220828161918862

  • 查看结果,如下图所示,可以看到,利用chipwhipserer analyzer提供的API,大大减少了代码量,非常地方便

    image-20220828162005247

  • 接着的提示信息是说,CPA攻击的返回结果可以调用find_maximums函数来获得全部信息

    image-20220828162240542

  • 可以利用pandas的dataframe来查看find_maximums的结果

    1
    2
    3
    4
    import pandas as pd
    stat_data = results.find_maximums()
    df = pd.DataFrame(stat_data).transpose()
    print(df.head())

    image-20220828162409967

  • 甚至可以dataframe的.style方法来自定义显示数据,如下图,可以将真实的Key用红色高亮显示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    key = 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)

    image-20220828162509523

  • 接着的提示信息是说,ChipWhisperer Analyzer使用上一篇中提到的“可以实时更新的”相关性计算,这意味着,我们可以从攻击过程获取反馈信息。可以通过定义一个callback函数,并将callback函数传递给attack.run函数,以及传递一个数(每隔多少能量迹反馈一次)来实现实时反馈信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from 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)

    image-20220828162828677

  • 运行后,可以看到整个cpa攻击过程中排在前5的相关系数最大的key的变化,非常地直观!

    cpa

  • 另外analyzer还提供了一个默认的jupyter的callback,只需要3行代码就可以实现跟上面一样的效果

    1
    2
    3
    import chipwhisperer as cw
    cb = cwa.get_jupyter_callback(attack)
    results = attack.run(cb, 10)

    cpa2

  • analyzer还提供了一个生成可以用于画图数据的函数analyzer_plots

    image-20220828170355213

总结

  • ChipWhisperer Analyzer是一个可用于侧信道攻击非常强大的python库,通过ChipWhisperer Analyzer可以极大方便我们完成侧信道攻击
  • ChipWhisperer Analyzer还有很多API需要去学习研究