Подтвердить что ты не робот

Есть ли какое-то безопасное локальное хранилище в Windows?

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

Я понимаю, что мне нужно зашифровать эту информацию. Но тогда, где я могу безопасно хранить пароль для шифрования? Это своего рода бесконечная рекурсия...

Итак, есть ли способ, чтобы зашифровать информацию о окнах и безопасно управлять паролями? Когда я говорю о Windows, я имею в виду Windows XP SP2 или более позднюю версию.

Следует также отметить, что пользователи одной и той же системы не должны иметь доступ к информации других пользователей (даже если они оба запускают мое приложение).

Я ищу как решения .NET 2.0 (С#), так и собственные (C/С++) решения этой проблемы.

4b9b3361

Ответ 1

Есть ли способ, чтобы зашифровать информацию о окнах и иметь надежное управление паролями?

CryptProtectData: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

Использование .NET: http://msdn.microsoft.com/en-us/library/aa302402.aspx

Исторически, защищенное хранилище (доступно в XP, доступно только для чтения в vista +): http://msdn.microsoft.com/en-us/library/bb432403%28VS.85%29.aspx

Ответ 2

Вы можете использовать собственный механизм шифрования. Установите атрибут шифрования в своей папке или файле (со страницы свойств, нажмите кнопку "продвинутый" ). Затем вы можете установить пользователей, которые могут получить доступ к файлу (по умолчанию это включает только создателя файла). Большим преимуществом этого решения является то, что он полностью прозрачен с точки зрения приложений и пользователей.

Чтобы сделать это программно: с помощью Win32 API вызовите EncryptFile() в каталог, в котором вы хотите хранить своего чувствительного пользователя данные. Теперь все вновь созданные файлы в этом каталоге будут зашифрованы и прочитаны только их создателем (это будет текущий пользователь вашего приложения). В качестве альтернативы вы можете использовать флаг FILE_ATTRIBUTE_ENCRYPTED для отдельных файлов во время создания. Вы можете проверить информацию о шифровании из проводника на странице свойств файла и увидеть, что созданные приложением файлы правильно зашифрованы и ограничены соответствующими пользователями. Нет пароля для хранения или использования, все прозрачно.

Если вы хотите скрыть данные от всех пользователей, тогда вы можете создать специального пользователя, зависящего от приложения, и выдать его из своего приложения. Это, наряду с ACL, является благословенной техникой Windows для системных служб.

Ответ 3

Вы должны использовать DPAPI для этой цели. Он будет шифровать ваши данные специальным (внутренним) симметричным ключом, который будет использоваться для каждого пользователя. В этом случае вам даже не нужно запрашивать пароли, потому что разные пользователи в системе будут иметь разные ключи, назначенные им.

Недостатком может быть то, что вы не сможете восстановить данные, если пользователь был удален/переустановлена ​​Windows (я считаю, что это так, но не совсем уверенно). В этом случае зашифруйте данные с помощью "самогенерируемого" ключа, полученного из пароля, и сохраните пароль в реестре/файле, зашифрованном с помощью DPAPI.

Ответ 4

Возможно, вам захочется взглянуть на изолированное хранилище, которое позволяет автоматически сохранять настройки и другие данные для данных каждого приложения. См. пример и MSDN.

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

Edit:

Из памяти, когда я в последний раз ее использовал, хороший подход - написать класс "Настройка", который обрабатывает все настройки и т.д. в вашем приложении. Этот класс имеет эквивалент методов Serialize и DeSerialize, которые позволяют ему записывать все свои данные в файл IsolStorage или загружать их снова.

Дополнительное преимущество реализации этого способа заключается в том, что вы можете использовать атрибуты для разметки битов источника и затем использовать свойство Grid, чтобы быстро дать вам пользовательский контроль параметров (свойство Grid управляет свойствами класса во время выполнения используя отражение).

Ответ 5

Я рекомендую вам ознакомиться с блоком приложений криптографической библиотеки предприятия. Проверьте это сообщение в блоге. Windows имеет встроенный API защиты данных для шифрования данных, но Crypto Application Block делает его более простым.

Ответ 6

Ум, чего вы пытаетесь достичь, именно то, что пытался достичь DRM. Зашифруйте что-то, затем дайте пользователю ключи (однако запутанные) и крипто. Они сделали это с DVD. Они сделали это с Blu-Ray. Они сделали это с iTunes.

То, что вы предлагаете сделать, никогда не будет безопасным. Ваш средний мирянин, вероятно, не выяснит этого, но любой достаточно мотивированный злоумышленник будет работать и обнаруживать ключи, алгоритм и расшифровывать данные.

Если все, что вы делаете, это шифрование пользовательских данных, попросите пользователя ввести пароль. Если вы пытаетесь защитить свои внутренние данные от пользователя, запускающего приложение, вы являетесь S.O.L.

Ответ 7

Erm hash пароль? Вам не нужно хранить реальную сделку в любом месте машины только как хешированный пароль (возможно, тоже соленый). Затем, когда пользователь вводит свой пароль, вы выполняете ту же операцию над этим и сравниваете его с хэшей, которую вы сохранили на диске.