2015-01-05 14 views
5

Szukam przechowywania niektórych poufnych danych w aplikacji, nad którą pracuję. Przeglądam klasę ProtectedData dostarczoną przez firmę Microsoft i wygląda to całkiem prosto. Mam jednak kilka pytań dotyczących tego, jak to działa.Czy ProtectedData działa na wielu komputerach?

Po pierwsze, widzę, że używa "danych logowania użytkownika" do wygenerowania klucza szyfrowania. Widziałem w dokumentacji, że tylko bieżący użytkownik będzie mógł odszyfrować dane. To nie jest problem, chcę tylko wiedzieć, czy ten sam użytkownik jest zalogowany na innej maszynie, czy będzie w stanie odszyfrować dane? Planuję udostępnianie zapisanych informacji w usłudze OneDrive, więc mam nadzieję, że będzie dostępna na każdym urządzeniu, z którego korzysta ten sam użytkownik.

ex:

User A logs in on desktop computer, saves encrypted file abc.txt 
User A then logs in on tablet, loads file abc.txt 

Czy abc.txt dostępne użytkownikowi na tablecie?

Po drugie, co się stanie, gdy użytkownik zmieni swoje hasło? Wydaje mi się, że klucz szyfrowania byłby wtedy inny i czyżby to nie uniemożliwiło odszyfrowania danych, które wykorzystywały poprzedni klucz szyfrowania?

ex:

User A logs in on desktop computer, saves encrypted file abc.txt 
User A changes password 
User A logs in on desktop computer, loads file abc.txt 

Czy abc.txt dostępne użytkownikowi już ??

+0

myślę może to więcej sensu dla moich celów użyć czegoś podobnego 'RijndaelManaged zamiast tego. Przynajmniej coś, co nie jest bezpośrednio związane z konkretnym użytkownikiem. Pytanie pozostaje jednak nadal, czy 'ProtectedData' działa na wielu stacjach roboczych z tym samym zalogowanym użytkownikiem? –

+0

Powiedziałbym, że 'ProtectedData' naprawdę nie jest przeznaczony do używania na wielu komputerach. to bardziej dotyczy ochrony danych "w pamięci". Musisz użyć dobrej usługi Crypto dla szyfrowania, które chcesz wysłać przez przewód. i wątpię, czy zadziała nad wieloma. maszyny, ponieważ to nie jest .NET - używa DPAPI. –

Odpowiedz

4

Czy abc.txt jest dostępny dla użytkownika A na tablecie?

„Dla DPAPI pracować prawidłowo, gdy używa profilów mobilnych, użytkownik domeny musi być zalogowany tylko na jednym komputerze w domenie. Jeśli użytkownik chce zalogować się na innym komputerze, który jest w domena, użytkownik musi się wylogować z pierwszego komputera przed zalogowaniem użytkownika na drugim komputerze .Jeśli użytkownik jest zalogowany na wielu komputerach w tym samym czasie, prawdopodobnie DPAPI nie będzie w stanie odszyfrować istniejącego zaszyfrowanego dane poprawnie. " - http://support.microsoft.com/kb/309408

Czy abc.txt jest już dostępny dla użytkownika A? Na jednym komputerze, po zmianie hasła użytkownik nadal powinien mieć dostęp do wcześniej zaszyfrowanych plików. Moje zrozumienie jest wcześniej generowane klucze są nadal przechowywane na liście, aby na to pozwolić. (Byłoby kosztowne, gdyby trzeba było odszyfrować i ponownie zaszyfrować wszystkie wcześniej zapisane dane za każdym razem, gdy użytkownik zmieni swoje hasło, więc zamiast tego zachowają stare klucze.)

Istnieją jednak narzędzia administracyjne, które umożliwią zmienić hasło w sposób, który może to złamać.

Nie wiem, jaki wpływ miałaby zmiana hasła na maszynę A na maszynie B. Założę się, że profil mobilny poradziłby sobie z tym poprawnie, ale może to być nieprawidłowe założenie.

Nie będę przechowywać danych w DPAPI, który jest krytyczny bez tworzenia kopii zapasowej gdzieś. Oczywiście wprowadza to inne komplikacje związane z bezpieczeństwem w zależności od tego, jaka jest wrażliwość danych.

+0

Sądzę, że to wzmacnia moje przypuszczenie, że używanie innej metody szyfrowania jest prawdopodobnie drogą do mojej sytuacji. Dziękuję za dokładną odpowiedź na obie części pytania. –

3

Interfejs Data Protection API (DPAPI) działa poprawnie z roaming profiles. Obejmowałoby to fakt, że użytkownik może odszyfrować dane przez sieć. Korzystanie z IsolationStorage jest używane do przechowywania danych, które dotyczą wielu aplikacji i nie są powiązane z żadną konkretną aplikacją, taką jak nazwa użytkownika lub informacje o licencji.

Przykład stworzyć samodzielnie sklep Roaming:

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, null, null)) 
    { 
     isoStore.CreateDirectory("TopLevelDirectory"); 
     isoStore.CreateFile("abc.txt"); 
    } 

przykład, aby uzyskać pojedyncze sklep Roaming:

IsolatedStorageFile isoFile = 
IsolatedStorageFile.GetStore(IsolatedStorageScope.User | 
    IsolatedStorageScope.Assembly | 
    IsolatedStorageScope.Roaming, null, null); 
+0

Dziękuję za te informacje. Czy w celu zwiększenia bezpieczeństwa szyfrowanie będzie używane oprócz pojedynczego miejsca na dysku? A może odizolowana pamięć zapewnia również szyfrowanie? –

+0

Dostęp do odizolowanej pamięci jest również ograniczony w zależności od tożsamości związanej z domeną i zespołem aplikacji lub samym zestawem. Czytaj dokumenty MSDN. Wszystko to jest bardzo dobrze wyjaśnione – Sievajet