Before working too hard on your implementation of SecureString, consider where your codebase will run from and whether or not you find having the permission to run unmanaged code is acceptable.
To read what you've stored in a SecureString, you must ensure that the decrypted string is never brought into managed code as a String, this would immediately invalidate the whole point of using SecureString in the first place.
To safely acheive this, the decrypted string is accessed via a pointer into the unmanaged world, which I understand is a barron and fiery land where beasts run free and giant volcanoes spew sulphur into the upper atmosphere, or something.