1
0
Files
cryptopal_rs/cryptopal_book/src/challenge_31.md
2025-08-31 16:03:40 +08:00

1.6 KiB
Raw Blame History

挑战三十一实现并破解带有人工时序泄露的HMAC-SHA1

题目描述

Wikipedia上的伪代码应该就足够了。HMAC非常简单。

使用你选择的Web框架Sinatra、web.py等编写一个小应用程序它有一个URL接受"file"参数和"signature"参数,如下所示:

http://localhost:9000/test?file=foo&signature=46b4ec586117154dacd49d664e5d63fdc88efb51

让服务器生成HMAC密钥然后验证传入请求的"signature"对"file"是否有效,使用"=="运算符比较文件的有效MAC与"signature"参数换句话说按任何普通程序员验证HMAC的方式验证它

实现要求

编写一个函数,称之为"insecure_compare",通过逐字节比较和早期退出来实现==操作在第一个不匹配的字节处返回false

在"insecure_compare"的循环中添加50ms睡眠每个字节后睡眠50ms

使用你的"insecure_compare"函数验证传入请求的HMAC并测试整个装置是否工作。如果MAC无效则返回500如果正常则返回200。

攻击任务

使用此应用程序中的时序泄露编写一个程序来发现任何文件的有效MAC。

为什么使用人工延迟?

为什么是人工延迟?

早期退出字符串比较可能是密码学时序泄露最常见的来源但它们并不特别容易利用。事实上许多时序泄露例如C、C++、Ruby或Python中的任何泄露可能根本无法在广域网上利用。要玩攻击现实世界的时序泄露你必须开始编写低级时序代码。我们在这些挑战中保持密码学性。