应该如何安全地管理通过Windows.Security.Cryptography生成的IBuffer对象
本文关键字:Cryptography Security Windows 对象 IBuffer 管理 何安全 安全 | 更新日期: 2023-09-27 18:20:07
继我之前的问题之后:Windows.Security.Cryptographic.CryptographicBuffer中的方法生成的IBuffer对象是否具有安全功能?
IBuffer对象由WinRT中的加密例程返回和使用。正如我之前的问题所回答的那样,这些缓冲区的任何安全管理都必须由用户维护——例如,覆盖内存,在不需要的时候进行加密等。然而,与IBuffer底层数据交互的方法仅限于C#级别。
那么,C#开发人员如何正确地管理这些IBuffer中的敏感数据呢?
如果您喜欢,即使使用C#,也可以在使用后擦除缓冲区。这里有一个方便的助手:
public static class BufferExtensions
{
public async static Task ClearContentsAsync(this IBuffer buff)
{
var writer = new DataWriter(buff.AsStream().AsOutputStream());
for (var i = 0; i < buff.Capacity; i++)
writer.WriteByte(42);
await writer.StoreAsync();
}
}
这样使用:
var buff = CryptographicBuffer.GenerateRandom(20);
var before = buff.ToArray();
await buff.ClearContentsAsync();
var after = buff.ToArray();
Debug.WriteLine("{0},{1},{2} - {3},{4},{5}",
before[0], before[1], before[2], after[0], after[1], after[2]);
注意,before
(清除前的副本)中的值是随机的,但after
(清除后的副本)的值都是42。当然,您可以使用自己选择的不同值:-)。