PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Bezpieczna metoda przechowywania/odzyskiwania klucza prywatnego i hasła PGP?

(Uwaga:nie jestem ekspertem od bezpieczeństwa. Interesuję się tym obszarem, ale to wszystko. Miej to na uwadze.)

Jeśli to możliwe, w ogóle nie przechowuj haseł

Wiele zależy od Twoich potrzeb. Najlepszą opcją ze wszystkich jest nieużywanie w ogóle szyfrowania dwukierunkowego; jeśli możesz przechowywać tylko solone i hasowane jednokierunkowo skróty haseł, które są idealne. Nadal możesz je przetestować, aby sprawdzić, czy pasują do hasła dostarczonego przez użytkownika, ale nigdy go nie przechowujesz.

Co więcej, jeśli Twoi klienci używają jakiegoś rozsądnego protokołu (tj. nie HTTP, jak powszechnie implementowany), możesz użyć mechanizm uwierzytelniania odpowiedzi na wyzwanie oznacza to, że Twoja aplikacja nigdy nigdy musi widzieć hasło użytkownika, nawet podczas ich uwierzytelniania. Niestety rzadko jest to możliwe w sieci publicznej, która ma zabezpieczenia, które zawstydziłyby programistów lat 80.

Jeśli musisz zapisać hasło, odizoluj klucze od aplikacji

Jeśli musisz być w stanie odszyfrować hasła, najlepiej nie powinieneś mieć wszystkich szczegółów w jednym miejscu, a już na pewno nie w jednym łatwo dostępnym miejscu, które można skopiować.

Z tego powodu osobiście wolałbym nie używać do tego celu PgCrypto (jak to robisz), ponieważ zmusza cię to do ujawnienia klucza prywatnego i (jeśli takowe ma) hasła do serwera, gdzie może zostać ujawniony w PostgreSQL pliki dziennika lub w inny sposób potencjalnie sniffowane. Chciałbym zrobić moją kryptograficzną stronę klienta, gdzie mógłbym użyć PKCS#11, agenta klucza lub innych narzędzi, które pozwolą mi odszyfrować dane bez możliwości uzyskania dostępu do klucza przez mój kod.

Problem bezpiecznego przechowywania kluczy jest częścią tego, co PKCS#11 został wynaleziony dla. Zapewnia ogólny interfejs dla aplikacji i dostawców kryptowalut, aby komunikować się ze wszystkim, co może zapewnić określone usługi podpisywania i deszyfrowania bez ujawniania klucza . Zwykłe, ale nie tylko, zastosowanie dotyczy kryptografii sprzętowej, takiej jak karty inteligentne i sprzętowe moduły kryptograficzne. Takim urządzeniom można nakazać podpisanie lub odszyfrowanie przekazanych im danych i może to zrobić bez ujawniania klucza. Jeśli to możliwe, rozważ użycie karty inteligentnej lub HSM. O ile wiem, PgCrypto nie może używać PKCS#11 ani innych HSM/kart inteligentnych.

Jeśli nie możesz tego zrobić, prawdopodobnie nadal możesz użyć agenta zarządzania kluczami, w którym ręcznie ładujesz klucz do programu do zarządzania kluczami podczas uruchamiania serwera, a program do zarządzania kluczami zapewnia interfejs PKCS#11 (lub inny) do podpisywania i deszyfrowania przez gniazdo. W ten sposób Twoja aplikacja internetowa nigdy nie musi znać klucza. gpg-agent może kwalifikować się do tego celu. Ponownie, o ile wiem, PgCrypto nie może używać agenta zarządzania kluczami, chociaż byłaby to świetna funkcja do dodania.

Pomóc może nawet niewielka poprawa. Najlepiej, jeśli hasło do Twojego klucza nie jest przechowywane na dysku, więc możesz wymagać jego wprowadzenia podczas uruchamiania aplikacji, aby można było odszyfrować klucz. Nadal przechowujesz odszyfrowany klucz w pamięci, ale wszystkie szczegóły do ​​odszyfrowania nie znajdują się już na dysku i są łatwe do uzyskania. Atakującemu znacznie trudniej jest ukraść odszyfrowany klucz z pamięci niż pobrać plik „password.txt” z dysku.

To, co zdecydujesz się zrobić, zależy w dużej mierze od szczegółów Twoich potrzeb w zakresie bezpieczeństwa i danych, z którymi pracujesz. W twojej sytuacji po prostu nie przechowywałbym haseł, jeśli to w ogóle możliwe, a gdybym musiał, chciałbym użyć urządzenia sprzętowego zgodnego z PKCS#11.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw „BŁĄD:każde zapytanie INTERSECT musi mieć taką samą liczbę kolumn” w PostgreSQL

  2. Wyświetl wszystkie nazwy baz danych

  3. PostgreSQL, aby znaleźć punkt środkowy między dwoma znacznikami czasu

  4. Zainstaluj Postgres.app na komputerze Mac

  5. Błąd kodowania Postgres UTF8 podczas wstawiania obrazów przez Javę