New*_*ode 1 memory struct rust btreemap
我想使用 Rust 的Zeroize箱来将 BTreeMap 条目归零。但 Zeroize 似乎没有为 BTreeMap 提供开箱即用的实现。
目前,我正在诉诸清除来删除地图的条目。
Q1. 只需清除存储在地图中的秘密而不将其归零有多安全?
Q2。我如何使用 Zeroize std::collection::BTreeMap?我想我必须迭代每个元素以将其归零。这种方法的另一个复杂性是我的地图包含“复杂”的通用结构。那么我必须将海龟一直归零吗?
Q2.a) 还有其他板条箱可以帮助我像我一样将 BTreeMap 归零吗?
我的结构例如:
let my_map1: BTreeMap<usize, MyStruct1<G1Projective>> = BTreeMap::new();
#[derive(Clone, Debug, Serialize, Deserialize)]
struct MyStruct1<G: MyTrait1 + MyTrait2> {
#[serde(serialize_with: .., deserialize_with: ..)]
field1: G,
#[serde(serialize_with: .., deserialize_with: ..)]
field2: Vec<G>,
}
Run Code Online (Sandbox Code Playgroud)
您不需要将包含秘密字段的结构的整个层次结构归零。您只需要Zeroize在现场本身实施即可。最简单的方法就是使用包装Zeroizing器,例如:
use zeroize::Zeroizing;
struct User {
username: String,
password: Zeroizing<String>,
};
Run Code Online (Sandbox Code Playgroud)
User然后,每当 a被销毁时(包括当您cleara BTreeMap,甚至只是让它超出范围时),密码都会被清除。
但请注意,简单地在 a 中存储任何类型的秘密BTreeMap本质上是不安全的,因为在映射中添加(或删除)项目可能会导致其他项目被重新分配或移动,并且在这种情况下原始内存位置不会被清除,只有最终的内存位置才会被清除。地图被清除或删除时的位置。
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |