i building windows store app uses cryptography. means extensive use of cryptographicbuffer class. app security-sensitive, make sure zeroize buffer's after use. doing same thing byte[]'s when use them.
to zeroize them, we'd to:
- write 1's.
- write pattern. using 0,1,2,...254,255,0,1...
- write 0's.
the solution have come create extension method each of ibuffer , byte[] me. byte[] believe it's pretty straightforward:
public static void zeroize(this byte[] bytes) { (int = 0; < bytes.length; i++) { bytes[i] = 255; } (int = 0; < bytes.length; i++) { bytes[i] = (byte)(i % 255); } (int = 0; < bytes.length; i++) { bytes[i] = 0; } } for ibuffer, it's little bit more difficult, in don't seem direct access buffer. through system.runtime.interopservices.windowsruntime; seem few useful methods, such ibuffer.copyto , ibuffer.asstream, give direct access buffer or underlying stream. solution have come this:
public static void zeroize(this ibuffer buffer) { var capacity = buffer.capacity; byte[] towrite = new byte[capacity]; (int = 0; < capacity; i++) { towrite[i] = 255; } towrite.asbuffer().copyto(buffer); (int = 0; < capacity; i++) { towrite[i] = (byte)(i % 255); } towrite.asbuffer().copyto(buffer); (int = 0; < capacity; i++) { towrite[i] = 0; } towrite.asbuffer().copyto(buffer); } my questions thus: there better way doing this? there other hidden methods (interopservices isn't advertised well) make bit easier/more efficient/more secure?
note: realize zeroization process may overkill, requested owner.