Как DPAPI и ProtectedData.Protect() обрабатывают образы дисков / клоны в.net 4?

Я проверяю идею использования методов.net v4 System.Security.Cryptography.ProtectedData() и UnprotectData() с областью действия DataProtectionScope.LocalMachine, чтобы обеспечить шифрование / дешифрование файла только на одном компьютере. Вот общее представление о том, что я делаю...

//Encrypt    
byte[] outBytes = ProtectedData.Protect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);
File.WriteAllBytes(fileOut, outBytes);

//Decrypt    
byte[] outBytes = ProtectedData.Unprotect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);            
File.WriteAllBytes(fileOut, outBytes);

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

Мой вопрос: что произойдет, если кто-то создаст образ диска или клон (используя Acronis, Ghost и т. Д.) Системы, которая содержит файл, зашифрованный с использованием этого механизма, а затем восстановит этот образ на другом компьютере? (Одним из примеров является то, что ИТ-отдел предварительно загружает одну систему, которая затем становится базовым образом для целого ряда компьютеров с идентичными конфигурациями оборудования). Сможет ли восстановленная ОС на другом оборудовании расшифровать файл, который был зашифрован в "исходной" системе? Я надеюсь, что из-за другого оборудования расшифровка не удастся, но может иметь смысл, что если вся необходимая информация для шифрования существует в реестре или в файловой системе, она будет работать.

Очевидно, я мог бы проверить это для себя, но у меня действительно нет ресурсов, чтобы сделать это прямо сейчас, и я без конца искал, чтобы узнать, может ли кто-нибудь еще знать ответ. Любой совет высоко ценится!

2 ответа

Мой ответ относится только к DataProtectionScope.LocalMachine потому что очевидно DataProtectionScope.CurrentUser использует ключи, хранящиеся в Active Directory или каком-либо другом роуминговом источнике, и явно задуман, не привязан к одному физическому ключу.

Так далеко как LocalMachine обеспокоен тем, что клон компьютера сможет открывать те же файлы, потому что ключ машины хранится на жестком диске компьютера и генерируется с использованием этапа установки Windows "sysprep" (вот почему корпоративный выпуск Windows может использовать тот же образ системы, но до тех пор, пока они запускают sysprep, каждая система будет иметь свой собственный ключ).

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

Источник: http://www.windows-server-answers.com/microsoft/Security-Cryptography/30350079/local-machine-masterkey-in-dpapi.aspx

Хороший вопрос - охота вокруг, кажется, что мастер-ключ автоматически восстанавливается каждый раз. 90 дней На Passcape.com есть очень хороший анализ - сердце безопасности DPAPI связано с системным SYSKEY, который хранится в реестре под кустом SYSTEM.

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

Я полагаю, что хотя DPAPI отлично подходит для обеспечения безопасности на локальном компьютере (но см. Этот пост в Epyx Forensics о восстановлении пароля), вам, вероятно, придется применять дополнительные меры безопасности при клонировании, особенно если вы не можете контролировать как системы будут клонированы.

Этот вопрос, скорее всего, получит лучший ответ на https://security.stackexchange.com/ поэтому вы можете задать его и там.

Другие вопросы по тегам