微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

相当于CryptProtectMemory的Linux

当我的进程内存被分页时,我正在尝试保护我的内存中数据以防止交换文件读取.

我知道Windows SDK中的CryptProtectMemory()可以用来加密内存缓冲区.

我在Linux上找不到任何这样的功能,如果有人知道,请告诉我.

我们可以使用mlock()以便内存不会被分页,但这是否意味着我的秘密是安全的?

解决方法

Linux中与CryptProtectMemory()最接近的等价物是libgcrypt中的 gcry_malloc_secure().分配的安全内存将被锁定在内存中; gcry_free()将归零并解除分配.其他加密库也有类似的调用,例如Botan中的模板 secure_vector.

另一种方法确实是在整个缓冲区上使用较低级别的POSIX调用mlock().尽管如此,将缓冲区归零的负担仍然存在.当缓冲区不再使用或程序终止时,您必须手动调用memset()).

CryptProtectMemory()似乎与上述两种方法中的任何一种略有不同:它创建一个小的随机会话密钥并使用它来加密缓冲区.好处是您只需要锁定并最终仅将密钥所在的非常小的页面归零,而不是整个缓冲区.如果缓冲区非常大,那可能会有所不同.但是,我们将无法在缓冲区中操作或处理数据.秘密数据可交换时还有一个小时间窗口.

原文地址:https://www.jb51.cc/linux/393328.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐