Защитите конфиденциальные данные в памяти с помощью C#C#

Место общения программистов C#
Ответить
Anonymous
 Защитите конфиденциальные данные в памяти с помощью C#

Сообщение Anonymous »

У меня есть приложение C#, которое инициализирует некоторые переменные с конфиденциальными данными. Они не являются паролями, но мы считаем их конфиденциальными. Все значения переменных, которые я хочу защитить, имеют строковый тип.
Я пытаюсь найти механизм (я знаю, что не существует 100%-ного механизма), который позволит мне защитить значения переменных в памяти или, по крайней мере, чтобы злоумышленникам было немного сложнее их прочитать. Таким образом, я могу защитить конфиденциальные данные в памяти моего приложения и сделать их более «нечитаемыми» для любого другого приложения, которое может отслеживать, выгружать или читать мое приложение во время выполнения.
Я вижу, что такое существует. API защиты данных Microsoft (DPAPI), у которого есть класс ProtectedMemory, который предлагает два метода: защитить и снять защиту, вот пример.
В любом случае, похоже, что MS перестала использовать ProtectedMemory, как какой-то парень говорит здесь, поскольку это бесполезно.
Другие люди вместо этого предлагают хэшировать их с помощью хорошей функции (например, SHA1/2) и сохранять дайджест.
Я бы мне нравится использовать частные свойства (поскольку они используются только внутри моего класса) вместо простой переменной, свойство set которой шифрует ее в памяти, а свойство get расшифровывает ее. Как показано ниже:

Код: Выделить всё

public static MyClass
{
private string MyVariable
{
get
{
return Encoding.UTF8.GetString(ProtectedMemory.Unprotect(_myVariable, MemoryProtectionScope.SameLogon));
}
set
{
_myVariable =  Encoding.UTF8.GetBytes(value);
ProtectedMemory.Protect(_myVariable, MemoryProtectionScope.SameLogon);
}
}

private byte[] _myVariable;
}
И то же самое с остальными моими строковыми переменными.
Я хотел сделать то же самое, что и этот парень в его сообщении, но некоторые люди говорят: перемещение защищенной памяти из частного резервного поля в свойство не поможет (я не уверен, о чем он говорит, если использование свойства не защищено¿?). Не могли бы вы также подтвердить мне, будет ли использование частного свойства для моих переменных защищено в памяти или нет?
Итак, как мне это сделать? может ли кто-нибудь предоставить простой фрагмент кода? Процесс шифрования/дешифрования должен быть относительно быстрым.
Я не хочу использовать какие-либо сторонние средства, только помощь ОС и .NET Framework.

Подробнее здесь: https://stackoverflow.com/questions/759 ... ng-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»