2012-11-30 9 views
7

Testuję pomysł wykorzystania metod System.Security.Cryptography.ProtectedData() i. UnprotectData() z zakresu DataProtectionScope.LocalMachine, aby zapewnić, że plik może być zaszyfrowany/odszyfrowany tylko na jednym komputerze. Oto ogólny pomysł co robię ...W jaki sposób DPAPI i ProtectedData.Protect() obsługują obrazy dysków/klony w .net 4?

//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); 

Zrobiłem mnóstwo badań, aby uzyskać oczekiwane zachowanie, gdy robi to i wydaje się doskonale pracować, że każdy użytkownik na tym samym maszyna może szyfrować/odszyfrowywać plik, korzystając z połączeń metod wymienionych powyżej.

Moje pytanie brzmi, co się stanie, jeśli ktoś zrobi obraz dysku lub sklonuje (używając Acronis, Ghost, itp.) System, który zawiera plik zaszyfrowany za pomocą tego mechanizmu, a następnie przywróci ten obraz do innego komputera? (Jeden przykład to istota i dział IT wstępne ładowanie pojedynczego systemu, który staje się podstawowym obrazem dla armii maszyn z identycznymi konfiguracjami sprzętowymi). Czy przywrócony system operacyjny na innym urządzeniu może odszyfrować plik zaszyfrowany w "oryginalnym" systemie? Mam nadzieję, że ze względu na inny sprzęt odszyfrowywanie się nie powiedzie, ale może mieć sens, jeśli wszystkie niezbędne informacje do wykonania kryptografii w rejestrze lub w systemie plików zadziałają.

Oczywiście, mógłbym przetestować to dla siebie, ale tak naprawdę nie mam środków, aby to zrobić w tej chwili i nieustannie szukam, czy ktoś inny na zewnątrz może już znać odpowiedź. Wszelkie porady są mile widziane!

Odpowiedz

4

Moja odpowiedź dotyczy tylko DataProtectionScope.LocalMachine, ponieważ oczywiście DataProtectionScope.CurrentUser używa kluczy przechowywanych w Active Directory lub innym źródle roamingu i jest jawnie, w toku projektu, nie związana z pojedynczym kluczem fizycznym.

Jeśli chodzi o numer LocalMachine, klon komputera będzie mógł otworzyć te same pliki, ponieważ klucz maszynowy jest przechowywany na dysku twardym urządzenia i jest generowany przy użyciu etapu "sysprep" podczas instalacji systemu Windows (jest to dlaczego firmowe wdrożenie systemu Windows może korzystać z tego samego obrazu systemu, ale dopóki będą działać z sysprep, każdy system będzie miał swój własny klucz).

Komputer może ponownie utworzyć swój klucz maszynowy (i może również zachować stare klucze, aby starsze dane mogły być odszyfrowane). Nie wiem, jak go zdobyć, aby odtworzyć klucz, a następnie usunąć stare.

Źródło: http://www.windows-server-answers.com/microsoft/Security-Cryptography/30350079/local-machine-masterkey-in-dpapi.aspx

0

Dobre pytanie - polowania wokół wydaje się, że klucz główny jest automatycznie regenerować każdy ca. 90 dni. Na Passcape.com jest bardzo dobry analysis - serce bezpieczeństwa DPAPI jest połączone z SYSKEY systemu, który jest przechowywany w rejestrze w gałęzi SYSTEM.

Ponieważ można apparently użyć CryptProtectData() zadzwonić z flagą CRYPT_PROTECT_REGENERATE odświeżyć klucz główny DPAPI na sklonowanego systemu wydaje się, że korzystanie-case dla ochrony DPAPI stanowi zagrożenie bezpieczeństwa.

Podejrzewam, że podczas gdy DPAPI świetnie nadaje się do ochrony na lokalnym komputerze (ale patrz: post na Epyx Forensics na temat odzyskiwania hasła), prawdopodobnie będziesz musiał wprowadzić dodatkowe środki bezpieczeństwa podczas klonowania, szczególnie jeśli nie może kontrolować, w jaki sposób zostaną sklonowane systemy.

To pytanie najprawdopodobniej uzyska lepszą odpowiedź na temat https://security.stackexchange.com/, więc możesz również tam poprosić.

Powiązane problemy