在 Rust 中构建 Bleichenbacher RSA 攻击的演示

主要观点:作者在阅读《Real-World Cryptography》时被提及的 Bleichenbacher 对 RSA 的攻击吸引,于是从 scratch 实现了 RSA,编写攻击代码解密消息并制作了网页演示,详细介绍了整个过程,包括实现 RSA 所面临的问题及选择、攻击的实施过程及遇到的困难与解决方法、制作演示的过程及技术细节等,最后强调这是一个有趣的学习项目,虽不会在生产中使用相关代码,但达到了学习和娱乐的目的。

关键信息:

  • RSA 是仍被广泛使用但存在问题的加密系统,Bleichenbacher 攻击可在没有私钥的情况下解密 RSA 加密消息,需结合特定编码方案 PKCS #1 v1.5 实施。
  • 实现 RSA 时选择 Rust 语言和 cryptoy 库,因可使用 WASM 工具链用于网页演示,后因 bigint 库问题迁移到 num-bigint-dig 库。
  • 攻击实施过程中部分工作较易,调试困难,曾因 rounding 问题出错,后发现迭代计数器为 8 位整数导致大密钥失败,改为较大类型后解决,还将攻击代码转换为迭代器以展示攻击进度。
  • 制作演示使用 Yew 框架,通过状态钩子和表单管理数据,在 update 函数中调用攻击代码,根据不同消息进行相应操作,同时注意测试时使用 release 版本避免电脑过热。

重要细节:

  • 作者阅读相关论文理解攻击原理,为快速验证攻击效果使用小密钥和小消息实现 RSA。
  • 不同版本的攻击使用不同的 oracle,实际中很多情况提供特定的 oracle 假设。
  • 演示代码中通过 AttackDemo 结构体管理攻击状态和相关统计信息,实现 Yew 的 Component trait 处理不同消息。
  • 作者提到一些术语如“nerd sniped”的来源,以及实现过程中遇到的各种库相关的具体问题及解决思路等。
阅读 10
0 条评论