2011-12-02 9 views
16

Mam obiekt właściwości Java z informacjami uwierzytelniającymi dla usługi sieci Web. Potrzebuję szyfrować te dane, ale nie wiem, gdzie muszę przechowywać klucz szyfrowania, aby zachować bezpieczeństwo.Jak bezpiecznie przechowywać klucze szyfrowania w języku Java?

Jakie są najlepsze praktyki dotyczące szyfrowania tych danych i pobierania ich w bezpieczny sposób?

Czy korzystanie z magazynu kluczy ma jakąkolwiek przewagę?

ws_user=username 
ws_password=password 
ws_url=https://www.whatever.com/myservice 
+0

Wygląda na to, że moja aplikacja musi mieć dostęp do klucza, nie ma sposobu, aby ją "zabezpieczyć". Jeśli przechowię go w magazynie kluczy, będzie to bardziej niejasne, ale nie wydaje się bezpieczniejsze. Mam nadzieję, że się mylę :) – ScArcher2

+0

Brzmi ostatecznie jak problem z bootowaniem. W pewnym momencie łańcucha musisz mieć klucz, którym chcesz coś zaszyfrować. Nawet jeśli korzystasz z magazynu kluczy, potrzebujesz hasła do tego magazynu kluczy. Czy nie ma możliwości zmiany schematu uwierzytelniania? Ponadto, możesz poprosić o bardzo dobrą wiedzę na http://security.stackexchange.com/. – mcfinnigan

+0

@mcfinnigan to jest to, co myślałem. Chciałem tylko sprawdzić, czy istnieją jakieś sposoby rozwiązania tego problemu. – ScArcher2

Odpowiedz

5

Twój problem jest bardzo powszechny. W systemie Linux hasła użytkownika są przechowywane w zwykłym pliku tekstowym. Chociaż przechowywane są tylko skróty hasła, jeśli atakujący uzyska dostęp do tego pliku, nie będzie długo szukał hasła przy użyciu ataku słownikowego offline. W tym przypadku system operacyjny opiera się na uprawnieniach do plików, aby odmówić dostępu nieuprawnionym użytkownikom. W twoim przypadku nie różni się to zbytnio. Należy odpowiednio skonfigurować uprawnienia do plików haseł i zapewnić fizyczne bezpieczeństwo serwera.

+0

Natrafiłem na sytuację, w której polityka bezpieczeństwa klienta wymagała szyfrowania nazwy użytkownika/haseł w plikach konfiguracyjnych. Wydało mi się to głupie, ale pomyślałem, że sprawdzę tutaj, czy czegoś brakuje. – ScArcher2

4

To jest problem jaj kurzych.
Następnie trzeba znaleźć gdzie przechowywać hasła do magazynu kluczy i tak dalej ..... i

W zależności od wymagań i potrzeb bezpieczeństwa, można enrypt danych za pomocą szyfrowania symetrycznego i odzyskać hasło za pośrednictwem zdalnego serwera (serwera) za pomocą uwierzytelniania po stronie klienta.

Albo możesz zaszyfrować dane za pomocą symetrycznego szyfrowania i mieć hasło zakodowane w twoim słoiku, co nie jest bezpieczne, ale wymaga trochę wysiłku, aby go znaleźć i możesz przekazać odpowiedzialność za uprawnienia do systemu plików, kto może uzyskać dostęp do twoich plików.

0

Odniosłem sukces, używając Jasypt 's StringEncrytor do szyfrowania poufnych informacji w plikach właściwości i niektórych wewnętrznych procedur generowania soli i pobierania hasła. Ponieważ korzystasz z usługi internetowej, możesz użyć Jasypt's Web PBE Configuration, aby ręcznie wprowadzić hasło podczas wdrażania, a nawet uruchomić własne, podobne rozwiązanie.

+0

Witaj Dan, użyłeś konfiguracji Web PBE? Myślę, że może rozwiązać problem kurczaków i jaj (zawsze potrzebuję klucza głównego do zaszyfrowania tekstu). Jak to musi być skonfigurowane? Jestem trochę zdziwiony. Dzięki za pomoc! V. – Viktor

4

Najważniejsze jest to, że gdzieś trzeba mieć hasło "root-of-the-chain" w niezaszyfrowanej formie. Plik lokalny chroniony przez OS, plik zdalny chroniony przez system operacyjny, zakodowany na stałe w źródle itp.

Jedynym sposobem na to, aby człowiek wpisał początkowe hasło podczas uruchamiania aplikacji, co oczywiście nie jest możliwe dla aplikacji, które wymagają autostartu.

Powiązane problemy