С Безопасное хранение дополнительной энтропии при использовании DPAPI
Все, что вы храните локально, может быть взломано. Но есть шаги, которые вы можете предпринять, чтобы сделать это более сложным. На Обработка паролей есть документ, который вы можете рассмотреть. Вы считаете свой Entropy Key паролем, специфичным для вашего приложения.
Я буду называть вашу энтропию вашей клавишей , поскольку она функционально является дополнительной клавишей.
То, что вы не хотите делать, это хранить ваш ключ локально в незашифрованном формате. Вместо этого вы хотите либо зашифровать свой ключ, либо получить его из другого, неочевидного источника. Конечно, если вы шифруете ключ, то вам необходимо сохранить ключ, который использовался для его шифрования, но часто этого единственного уровня косвенности достаточно, чтобы отговорить большинства противников.
Это было бы преимуществом получения вашего ключа. Вы можете получить его как хэш некоторого другого фрагмента константных данных (должен быть чем-то, что не меняется с ревизиями вашего приложения). Одна из хитростей при получении хэша состоит в том, чтобы объединить хеш с некоторым другим постоянным значением (например, GUID или большим случайным числом), чтобы кто-то другой не мог просто объединить известный алгоритм хеширования и получить ваш ключ. Это гораздо лучшая альтернатива созданию собственного алгоритма хэширования (чего вы никогда не должны делать, если у вас нет степени доктора математических наук).
В какой-то момент вам понадобится какой-то ключ, жестко запрограммированный в вашем приложении. Этот ключ либо объединяется с некоторыми другими данными в хэше для создания вашего ключа энтропии, либо используется для расшифровки ключа энтропии. На самом деле вы можете изменить ключ с новой версией вашего приложения, если вы сохраните старый ключ для расшифровки существующего ключа. Затем вы можете повторно зашифровать его новым ключом или методом.
Если вы хотите наилучшую защиту, вы можете хранить ключ Entropy на компьютере. Для этого потребуется подключение к Интернету и сертификат SSL, но тогда их ключ никогда не будет сохранен где-либо локально, чтобы быть обнаруженным. Для этого вы можете настроить более надежную систему ответа на вызовы, чтобы аутентификация запроса каждый раз отличалась, а ключ доставлялся через шифрование SSL, поэтому его нельзя было перехватить. Как только ключ используется, он сбрасывается. Конечно, этот вид поражает цель многих сценариев, в которых вы используете DPAPI для локального безопасного хранения.
Что бы вы ни делали, имейте в виду, что оно будет скомпрометировано - это всегда происходит, когда кто-то имеет полный доступ к локальному компьютеру и данным, хранящимся на нем. Решение этой проблемы состоит в том, чтобы выпускать обновления, которые меняют метод настолько, что старый взлом больше не работает. Это сделает распространение крэка менее ценным, так как будет трудно найти подходящий вариант.