#memory #allocator #sodium #alloc #libsodium #global-allocator #api-bindings

nightly sodium-alloc

使用Sodium的加密内存工具分配内存的分配器类型

2个版本

0.1.1 2021年11月29日
0.1.0 2021年6月4日

#396 in 内存管理

MIT/Apache

14KB
89

钠分配器

crates.io docs.rs

Rust Allocator 类型,使用 Sodium 的加密内存工具分配内存。

需要nightly Rust,因为 Allocator API 尚未稳定。

此库实现了 SodiumAllocator,这是一个 Allocator,它使用 sodium_malloc 和相应的 sodium_free 函数来管理内存。在内存中管理敏感数据时,我们可以采取一些步骤来帮助加强我们的软件以防止泄露这些秘密。

Sodium的 sodium_malloc 实现将许多这些加固步骤引入内存管理过程:分配的内存放置在页面边界末尾,紧跟着是一个保护页(标记为不可访问的内存区域,任何尝试访问它都将导致程序终止)。在分配的内存之前放置一个哨兵,任何对哨兵的修改在释放时都会被检测到,这同样会导致程序终止,并在其前面放置一个保护页。使用 sodium_mlock 指示操作系统不要将内存交换到磁盘或将其包含在核心转储中。

当使用 SodiumAllocator 释放内存时,将调用 sodium_free 函数,该函数会在标记内存为空闲之前安全地将内存清零。这意味着对于使用 SodiumAllocator 分配的类型,无需实现 Zeroize 或类似的 Drop 实现来在不再使用时清零内存:它在释放时将自动清零。

此库不适用于用作通用分配器或全局分配器:此API的开销比Rust的标准分配器大得多,且实现中更可能遇到错误。它仅用于分配敏感数据类型,例如需要存储在内存中的密钥或密码。

安全/漏洞披露

如果您在sodium-alloc中找到漏洞,请立即联系@tom25519.pm@me并提供详细信息。

我的age公钥(首选)是

age1gglesedq4m2z9kc7urjhq3zlpc6qewcwpcna7s0lwh8k2c4e6fxqf3kdvq

我的PGP公钥指纹为0x4712EC7C9F404B14,可在keyserver.ubuntu.compgp.mit.eduGithub找到。

许可证

根据以下任一许可证授权

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的任何贡献,旨在包含在作品中,将按上述方式双授权,不附加任何额外条款或条件。

依赖项

~2–3.5MB
~27K SLoC