C # безопасно удалить переменную из памяти

Я делаю программу, связанную с безопасностью, и я хочу быть уверенным, что я делаю это правильно. Когда кто-то входит в систему с паролем, секретный ключ дешифруется и сохраняется в переменной. Когда они выходят из системы, я хочу, чтобы данные в памяти для этого секретного ключа были полностью удалены, а не просто помечены как удаленные. В настоящее время я делаю следующее:

public void Logout()
{
    RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
    for (var i = 0; i < 3; i++)
    {
        byte[] data = new byte[(int) Math.Round((double) (_phraseHash.Count()))];
        rngCsp.GetBytes(data);
        int randomNum = BitConverter.ToInt32(data, 0);
        _phraseHash = randomNum.ToString();
    }
    LoggedIn = false;
    _phraseHash = null;
}

Я хочу знать, достаточно ли этого для полного удаления секретного ключа (_phraseHash) из системы.

Также это даже необходимо? На самом деле я мало что знаю о том, как данные в памяти удаляются, я просто предположил, что это будет несколько похоже на работу жестких дисков, где байты просто помечаются как удаленные и перезаписанные, когда кому-то еще нужно пространство.

Ответы на вопрос(1)

Ваш ответ на вопрос