Używam kontenerów kryptograficznych Win32 dla poszczególnych użytkowników (za pośrednictwem klasy .Net RSACryptoServiceProvider
) do przechowywania klucza prywatnego używanego do odszyfrowywania przechowywanych haseł w menedżerze haseł.Jak bezpieczne są okna kontenerów kryptograficznych?
Jak bezpieczny jest przechowywanie tego klucza prywatnego? Oczywiście każdy program uruchomiony z tego samego konta użytkownika może uzyskać do niego dostęp. Ale czy klucz jest rzeczywiście zaszyfrowany w oparciu o hasło użytkownika?
Czy mogę założyć, że klucz prywatny jest dostępny tylko, gdy użytkownik jest zalogowany? Czy usługa (lub inne konto) może nadal wydobywać klucz? Czy administrator komputera nie znający hasła użytkownika może je wyodrębnić? Czy klucz może zostać wyodrębniony poprzez zresetowanie hasła użytkownika za pomocą konta administracyjnego? Jeśli komputer zostanie skradziony, a osoba atakująca może uzyskać dostęp do dysku twardego (ale nie zna hasła użytkownika), czy może wyodrębnić klucz prywatny? Jeśli użytkownik zablokował sesję, czy atakujący może wyodrębnić klucz z pamięci za pomocą konta administratora/sterownika jądra?
P.S. Wiem o wzorze klucza głównego, ale jest to niedopuszczalne w moim przypadku, więc muszę przechowywać hasła w możliwie najbezpieczniejszy sposób.
Trochę trudno jest zrozumieć, w jaki sposób szyfrujesz klucz, kiedy brzmi to tak, jakbyś chciał zaszyfrować hasło. Wywołanie RSA.ExportParameters (true) w dowolnym miejscu, aby odszyfrować hasło, wymaga fizycznego zabezpieczenia w celu ochrony klucza prywatnego. Zawsze implementuj tylko loginy, przechowując i porównując skrót hasła. –