您当前的位置: 首页 >  ar

mutourend

暂无认证

  • 1浏览

    0关注

    661博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

rust clear_on_drop库

mutourend 发布时间:2019-07-16 16:01:17 ,浏览量:1

https://github.com/cesarb/clear_on_drop 可用于清理不再需要使用的密码学key和中间值。 用于清理栈空间和堆空间的敏感数据,但是无法排除程序外部工具依然能获得这些数据(如通过debugger,或者通过对硬件的物理访问等)。对于长期活跃的进程,key信息仍然可能通过内存获取。

本文为对 https://lib.rs/crates/clear_on_drop 内容的翻译。

1. clear_on_drop清理敏感数据机制

主要有两个机制来处理残余数据: 1)ClearOnDrop通过对敏感数据(如密码状态)的mutable引用,来保证当数据drop时也被清理。可通过使用Boxmlock来将数据保持在heap堆中。 2)clear_stack_on_return函数调用闭包,然后返回,会往stack栈空间中重写几千字节的数据。通过该方法,可重写覆盖掉密码学算法中的临时变量值,对于短期生存的线程尤其有价值,因为当线程结束时,线程栈空间所使用的内存不容易被重刷。

2. clear_on_drop防止编译器优化机制

编译器在编译时,会判断数据在cleared后是否有使用,若无使用,编译器会忽略相应的clearing代码。同时,便以及可能会被调用的函数和相应的栈空间clearing代码,分别对应使用栈空间的不同区域。为了避免这些不必要的优化,clear_on_drop主要有3个机制: 1)通过使用内敛的汇编代码,需要用nightly版本Rust,启用nightly feature,不需要额外的C编译器。 2)默认的是本机制。调用一个dummy C函数。运行在stable Rust版本,但是需要C编译器。 3)第三种机制位采用fallback,通过使用原子指令,用于迷惑编译器。本机制使用时需启用no_cc feature,可运行在stable Rust版本且不需要C编译器,但是目前不太稳定。使用时需慎重。

参考资料: [1] https://github.com/cesarb/clear_on_drop [2] https://lib.rs/crates/clear_on_drop

关注
打赏
1664532908
查看更多评论
立即登录/注册

微信扫码登录

0.0395s