Windows.Security.Cryptography生成的IBuffer对象应该如何安全管理?

How should IBuffer objects generated through Windows.Security.Cryptography be managed securely?

继我之前的问题之后:

IBuffer 对象由 WinRT 中的加密例程返回和使用。正如我之前的问题得到了回答,这些缓冲区的任何安全管理都必须由用户维护——例如覆盖内存,在不需要时加密等。但是,与 IBuffers 底层数据交互的方法在 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。你当然可以使用不同的您选择的价值 :-).