归化IBuffer?

时间:2013-08-23 00:05:05

标签: c# memory encryption windows-runtime windows-store-apps

我目前正在构建一个使用加密技术的Windows应用商店应用。这意味着广泛使用CryptographicBuffer类。该应用程序对安全性非常敏感,因此我想确保在使用后立即将任何Buffer清零。我在使用byte[]时会做同样的事情。

要将它们归零,目前我们想:

  • 写下所有1个。
  • 写一个模式。目前使用0,1,2,...... 254,255,0,1 ......
  • 全部写0。

我提出的解决方案是为IBufferbyte[]创建一个扩展方法,它将为我执行此操作。对于byte[]我认为这很简单:

public static void Zeroize(this byte[] bytes)
{
    for (int i = 0; i < bytes.Length; i++)
    {
         bytes[i] = 255;
    }
    for (int i = 0; i < bytes.Length; i++)
    {
        bytes[i] = (byte)(i % 255);
    }

    for (int i = 0; i < bytes.Length; i++)
    {
        bytes[i] = 0;
    }
}

对于IBuffer,这有点困难,因为您似乎无法直接访问Buffer。通过System.Runtime.InteropServices.WindowsRuntime;,您似乎可以获得一些有用的方法,例如IBuffer.CopyToIBuffer.AsStream,这些方法可让您直接访问Buffer或基础Stream。我提出的解决方案是:

public static void Zeroize(this IBuffer buffer)
{
    var capacity = buffer.Capacity;
    byte[] toWrite = new byte[capacity];
    for (int i = 0; i < capacity; i++)
    {
        toWrite[i] = 255;
    }

    toWrite.AsBuffer().CopyTo(buffer);

    for (int i = 0; i < capacity; i++)
    {
        toWrite[i] = (byte)(i % 255);
    }

    toWrite.AsBuffer().CopyTo(buffer);

    for (int i = 0; i < capacity; i++)
    {
            toWrite[i] = 0;
    }

    toWrite.AsBuffer().CopyTo(buffer);
}

我的问题是:有没有更好的方法来做到这一点?是否有任何其他隐藏方法(InteropServices并未真正做广告宣传)会使这更方便/更有效/更安全?

注意:我意识到归零过程可能过度,但业主要求它。

0 个答案:

没有答案