前前言
- 这个也是老早之前发在看雪上的帖子,原帖地址: https://bbs.kanxue.com/thread-274828.htm
- 以下开始为原贴内容
最近入手了ChipWhisperer的CW308 的底板,方便进一步学习侧信道攻击,详见官网介绍:https://rtfm.newae.com/Targets/CW308 UFO/
有了底板之后就可以自从官方的github仓库中 https://github.com/newaetech/chipwhisperer-target-cw308t 获取pcb源码,自己打板制作更多的目标板了,打板pcb可以白嫖嘉立创,每月两次免费打板机会(规则貌似是:如果上月消费<20,那么两次免费打板仅限于立创EDA的工程文件,上月消费>=20,那么免费打板没有这个限制,具体以官方说明为准)
虽然嘉立创免费打板可能要受限于要立创EDA设计,但是基于ChipWhisperer开源的Altium Designer的工程文件和原理图,还是可以自己将AD工程移植为立创EDA工程
最近实际逆向过程中,经常会遇到AES算法,而且有时也会遇到一些非标准AES或者魔改的AES
本着进一步了解AES算法的态度,决定结合网上各种资料,自己动手实现一次AES加解密,加深自己对AES的了解
当然网上有很多优秀的AES实现了,其中最著名的当属:openssl,openssl包含非常多的密码学算法的实现,而且很多都是性能优化后的实现。一个比较小巧的c语言实现是:https://github.com/kokke/tiny-AES-c
python的一些AES实现:
这里再介绍一下python的:pycryptodome库,这个虽然是python库,但底层算法是c写的,所以性能上是非常不错的,可以安装这个库替换python的Crypto库,也可以与Crypto共存。这个库可以作为python中各种加密算法的标准库来使用。
因为这里是以学习为目的,所以本文不考虑任何性能上的问题
switch 硬破后,一般都把任天堂相关的域名IP屏蔽了,所以就不能自动联网校准时间
时间久了,switch的时间就会与标准时间偏差很大,使用Tinfoil下载就有可能会出现下面的错误,这种情况手动设置时间一般与无济于事
1 | SSL Connection failed. |
这时候就可以使用一个插件来同步时间:https://github.com/nedex/QuickNTP.git
但QuickNTP默认的几个服务器,有时候也会出现连不上情况
接下来介绍,如何将QuickNTP默认的NTP服务器替换为国内NTP服务器并重新编译.ovl文件
使用前面学习了那么多侧信道攻击的内容,是时候实战一波了
本文这道题来自https://github.com/Riscure/Rhme-2016的piece_of_scake,下图为这题的提示信息
本文大部分内容基于这个视频中对这道题的解法,很不错的视频,值得一看:https://www.youtube.com/watch?v=FktI4qSjzaE&list=PLhixgUqwRTjwNaT40TqIIagv3b4_bfB7M&index=14
与上面提到的视频不同,这里为了方便起见使用的硬件为用面包板构造的Arduino最小系统,这样做的好处在于接电阻、接线和拆器件方便
最近更新了关于这道CTF题的另一篇文章,可供参考:CW308T-AVR使用笔记
本篇将继续跟随chipwhisperer-jupyter sca101的教程来学习比差分能量分析(Differential Power Analysis, DPA)更强大的相关性能量分析(Correlation Power Analysis, CPA)
在之前的DPA学习中为了恢复完整的AES密钥,需要抓取了大量的能量迹(几千条),而这里使用CPA只需要50条能量迹即可恢复完整的AES密钥,如此足矣可见这个方法的强大之处