Klawisz jest po prostu ciągiem znaków, dowolny ciąg będzie działał, po prostu chcesz trzymać go z dala od ludzi, którzy nie mogą zobaczyć danych tekstowych. Możesz po prostu wygenerować klucz za pomocą SecureRandom.base64
. To sprawi, że będzie to praktycznie niemożliwe do zniesienia przez brutalną siłę, przy niewielkim wysiłku ze strony ciebie.
Interesującą rzeczą jest tutaj kluczowe zarządzanie. Twoje opcje z tym klejnotem wydają się być następujące:
Twardy kod klucza do aplikacji. Zapobiega to "przypadkowemu" odczytowi danych wrażliwych, np. DBA lub inżynier wsparcia, ale nie jest bezpieczny od nikogo, kto wie, jak działa klejnot, jeśli ma dostęp do kodu źródłowego i bazy danych.
Odsyłacz do nazwanej metody, która określi klucz. Jest to bardziej interesujące, ale uwaga: umieszczenie klucza w bazie danych nie zwiększa bezpieczeństwa. Ktoś, kto może uzyskać dostęp do bazy danych i kodu, może zrobić to samo, jeśli wartość jest zakodowana na stałe.
Można poprawić rzeczy lekko, a przynajmniej uzyskać deweloperami oddzielony od zaszyfrowanych danych, poprzez zastosowanie przeczytać przynajmniej część klucza z lokalizacji, która programiści (a może po prostu większość deweloperów) nie ma dostępu do produkcji. Wykraczanie poza to jest trudniejsze, przynajmniej z tym klejnotem, ponieważ aplikacja będzie musiała działać z dostępem do kluczy szyfrujących/odszyfrowujących.
To, czy jest wystarczająco dobre, zależy od przyczyny szyfrowania danych.
Próbowałem odpowiedzieć, ale mam pytanie: kto (lub jakiego rodzaju scenariusz) próbujesz ukryć dane w postaci zwykłego tekstu? –
Pewne pola w bazie danych muszą być zaszyfrowane w spoczynku, głównie w celu tworzenia kopii zapasowych poza siedzibą (gdzie system kopii zapasowych poza siedzibą firmy nie ma dostępu do klucza szyfrowania). –
W takim przypadku, zgaduję, że system poza siedzibą ma dostęp do danych, ale nie do konfiguracji czy kodu źródłowego? Prawdopodobnie nadal bym się przestawił w kierunku konfiguracji, aby zachować przynajmniej część klucza, i wykorzystał zdolność klejnotu do wywołania metody, aby pobrać właściwy klucz jako sposób podawania. Ale jeśli kod źródłowy jest zabezpieczony niezależnie od danych kopii zapasowej , kodowanie kluczy szyfrowania na pole również jest możliwe. –