Wszystko, co przechowujesz na miejscu, może zostać naruszone. Ale są kroki, które możesz podjąć, aby to utrudnić. Istnieje dokument o numerze Handling Passwords, który możesz rozważyć przeglądając. Uważasz swój klucz Entropy za hasło specyficzne dla twojej aplikacji.
Mam zamiar odnieść się do Entropy jako klucz Klucz, ponieważ jest funkcjonalnie dodatkowym kluczem.
To, czego nie chcesz robić, to przechowywać swój klucz lokalnie w nieszyfrowanym formacie. Zamiast tego chcesz albo zaszyfrować klucz, albo wyprowadzić go z innego, nieoczywistego źródła. Oczywiście jeśli zaszyfrujesz klucz, musisz przechowywać klucz używany do jego zaszyfrowania - ale często ta pojedyncza warstwa pośrednia wystarcza, aby zniechęcić większość rywali.
To byłaby korzyść z wyprowadzenia klucza. Możesz wyprowadzić go jako mieszankę jakiegoś innego stałego zbioru danych (musi to być coś, co nie zmienia się wraz z wersjami twojej aplikacji). Jedną lewą, gdy wyprowadzamy mieszankę, jest połączenie wartości mieszania z inną stałą wartością (np. GUID lub duża liczba losowa), aby ktoś inny nie mógł po prostu połączyć znanego algorytmu i uzyskać klucz. Jest to znacznie lepsza alternatywa dla tworzenia własnego algorytmu mieszania (którego nigdy nie powinieneś robić, chyba że masz matematykę z zakresu PHD).
W pewnym momencie będziesz potrzebować jakiegoś klucza zakodowanego w aplikacji. Ten klucz jest połączony z niektórymi innymi danymi w haszach, aby utworzyć klucz Entropy lub użyć go do odszyfrowania klucza entropii. W rzeczywistości możesz zmienić klucz za pomocą nowej wersji aplikacji, o ile zachowasz stary klucz do odszyfrowania istniejącego klucza. Następnie możesz ponownie zaszyfrować go za pomocą nowego klucza lub metody.
Jeśli chcesz uzyskać najlepsze zabezpieczenie, możesz przechowywać klucz Entropy z komputera. Wymagałoby to połączenia internetowego i certyfikatu SSL, ale wtedy klucz nie jest nigdzie nigdzie utrwalany na miejscu. Aby to zrobić, możesz skonfigurować bardziej odporny system odpowiedzi na wezwania, aby uwierzytelnianie było inne za każdym razem, a klucz jest dostarczany za pomocą szyfrowania SSL, więc nie można go przechwycić. Po użyciu klucza zostaje on odrzucony. Oczywiście ten rodzaj pokonuje cel wielu scenariuszy, w których używasz DPAPI do lokalnego bezpiecznego przechowywania.
Niezależnie od tego, co robisz, pamiętaj, że zostanie naruszona - to zawsze dzieje się, gdy ktoś ma pełny dostęp do lokalnej maszyny i przechowywanych na niej danych. Rozwiązaniem tego problemu jest publikowanie aktualizacji, które zmieniają metodę na tyle, że stare pęknięcie już nie działa. To spowoduje, że dystrybucja pęknięcia stanie się mniej wartościowa, ponieważ trudno będzie ją znaleźć dla odpowiedniej wersji.
Byłoby pomocne, gdybyś opisał swoją aplikację bardziej szczegółowo. Jaka to aplikacja: usługa Windows, interaktywna aplikacja (Windows Forms/WPF), itp? Ponadto, w jaki sposób zapisać i pobrać klucz symetryczny? Mam na myśli to, że jeśli korzystasz z DPAPI z magazynu użytkownika i sam przechowujesz klucz, to tylko Ty (lub ktoś, kto może logować się przy użyciu twoich danych uwierzytelniających) może odzyskać wartość, w takim przypadku nie jestem pewien, które zagrożenie próbujesz złagodzić ochronę dodatkowej entropii (powinieneś się martwić o ochronę swoich danych uwierzytelniających). –
Gdy chronisz go za pomocą LocalUser, każda aplikacja działająca pod lokalnym użytkownikiem może uzyskać dostęp do magazynu kluczy. Jest to aplikacja formularzy okien. W przeciwieństwie do LocalMachine, którą każda aplikacja uruchomiona na komputerze może uzyskać dostęp do sklepu, aby uzyskać klucz, który jest w zasadzie podobny do braku jakiegokolwiek szyfrowania. –
Twoje oświadczenie nie jest w 100% dokładne. Tylko aplikacje działające pod kontem użytkownika SAME z załadowanym profilem (może to być użytkownik domeny, niekoniecznie użytkownik lokalny) mają dostęp do magazynu kluczy SAME. Jeśli więc użytkownik X uruchomi formularz Win i zaszyfruje klucz tajny z kluczem DPAP użytkownika X, to tylko aplikacje uruchomione przez tego samego użytkownika X będą mogły go odszyfrować. Zasadniczo ten sekret jest chroniony przez dane uwierzytelniające użytkownika X, więc dopóki użytkownik X nie udostępnia hasła, nie mogę myśleć o zagrożeniu, które łagodzisz. Czy możesz opisać przypadek użycia (scenariusz), którego próbujesz uniknąć? –