1. Bezpieczne dane
w aplikacjach Java
warsztaty
Piotr Nazimek
Bezpieczne dane
dlaczego chcemy chronić dane
i po co to robić jeśli wszyscy działamy zgodnie
z prawem i nie mamy nic do ukrycia :)
czy zawsze ochrona to szyfrowanie
czym jest bezpieczeństwo
warsztaty Bezpieczne dane w aplikacjach Java 2
2. Integralność
Usługa integralności
usługa realizuje funkcję, która polega na
zapewnieniu, że przetwarzana informacja nie została
zmieniona w żaden sposób
usługa ma na celu ochronę danych przed
przypadkową lub celową zmianą
do zapewnienia integralności danych w kryptografii
stosuje się funkcje skrótu
jest to podstawowa usługa ochrony informacji
warsztaty Bezpieczne dane w aplikacjach Java 3
Uwierzytelnienie
Usługa uwierzytelnienia
jest to proces, którego celem jest stwierdzenie, że
zadeklarowana cecha danego podmiotu jest
prawdziwa
uwierzytelnianiu podlegają osoby, systemy, źródła
danych, dokumenty
do realizacji usługi uwierzytelniania stosuje się
w kryptografii między innymi hasła, kody
uwierzytelniające wiadomość, podpis cyfrowy
warsztaty Bezpieczne dane w aplikacjach Java 4
3. Niezaprzeczalność
Usługa niezaprzeczalności
brak możliwości wyparcia się uczestnictwa podmiotu
w procesie wymiany danych
usługa kosztowna w realizacji
do realizacji usługi niezaprzeczalności stosuje się
w kryptografii między innymi podpis cyfrowy oraz
znaczniki czasu, niezbędna jest również zaufana
strona
warsztaty Bezpieczne dane w aplikacjach Java 5
Poufność
Usługa poufności
usługa mająca na celu takie zabezpieczenie danych,
aby nie były ujawnione nieuprawnionym jednostkom
do realizacji usługi poufności stosuje się
w kryptografii algorytmy szyfrujące
usługa poufności może być również realizowana
proceduralnie poprzez ustalenie zasad obiegu
i dostępu do informacji
warsztaty Bezpieczne dane w aplikacjach Java 6
4. Kryptologia
Kryptologia
Kryptologia (ang. cryptology) to nauka o zabezpieczaniu
informacji.
Zajmuje się nią kryptolog (ang. cryptologist).
Kryptografia
Kryptografia (ang.
cryptography) to nauka o
konstruowaniu systemów
kryptograficznych.
Zajmuje się nią krypograf
(ang. cryptographer).
Kryptoanaliza
Kryptoanaliza (ang.
cryptoanalysis) to nauka
o łamaniu systemów
kryptograficznych.
Zajmuje się nią
kryptoanalityk (ang.
cryptoanalyst).
warsztaty Bezpieczne dane w aplikacjach Java 7
Kryptografia klasyczna
Szyfry przestawieniowe
transpozycja tekstu jawnego
zachowują statystykę języka
szyfr kolumnowy
Szyfry podstawieniowe
szyfr Cezara, szyfr ROT13
szyfry monoalfabetyczne – przekształcenie znaku
alfabetu na inny znak z tego alfabetu
szyfry polialfabetyczne – złożenie kilku szyfrów
monoalfabetycznych
szyfry poligramowe – szyfrowanie grup liter
warsztaty Bezpieczne dane w aplikacjach Java 8
5. Podstawowe zasady w kryptografii
Zasady Augusta Kerckhoffsa
System będzie praktycznie nie
do złamania jeśli:
budowa maszyny jest
jawna, tajny jest klucz
klucz jest łatwy do
zapamiętania
kryptogram jest łatwy do
przekazania
maszyna szyfrująca jest
podręczna
system jest prosty w użyciu
1883, La Cryptographie Militarie
za David Kahn, Łamacze kodów
warsztaty Bezpieczne dane w aplikacjach Java 9
Ataki
atakujący zazwyczaj nie atakuje bezpośrednio
zastosowanych metod kryptograficznych, raczej
stara się je obejść
poszukiwany jest opłacalny (tani) sposób ataku
większość ataku nie jest przeprowadzana
bezpośrednio na system, ale na ludzi i organizację
zapewnienie dostatecznego bezpieczeństwa systemu
polega na takiej jego implementacji aby dla
atakującego nieopłacalne było jego atakowanie
warsztaty Bezpieczne dane w aplikacjach Java 10
6. Bezpieczeństwo w Java
zaufanie w Java
na poziomie języka - dostęp do klas/metod
public, protected, private
względem aplikacji jako całości – mechanizm
uprawnień narzucony w piaskownicy (sandbox)
ochrona użytkownika przed aplikacją
względem użytkownika - Java Authentication and
Authorization Service (JAAS)
ochrona aplikacji przed użytkownikiem
warsztaty Bezpieczne dane w aplikacjach Java 11
Piaskownica
zestaw uprawnień kodu określa polityka
bezpieczeństwa (security policy)
autoryzacja - kryterium decydującym są własności
kodu
Security Manager (SM)
sprawdza czy żądana operacja nie narusza polityki
bezpieczeństwa
Access Controller (AC)
dostawca usług dla SM
Class Loader (CL)
odpowiada za ładowanie klas, określa ich codebase
korzysta z SM w celu sprawdzenia czy kod żądający
załadowania klasy ma do tego prawa
warsztaty Bezpieczne dane w aplikacjach Java 12
7. Security Manager
wykorzystywany w implementacji klas podczas
realizacji potencjalnie niebezpiecznych operacji
operacja sprawdzane są każdorazowo
nieefektywne
bezpieczne
zmiana polityki bezpieczeństwa
zmiana kontekstu wykonania aplikacji
pozwala wykonać operację lub zgłasza
SecurityException
dla aplikacji Java Web Start, apletów oraz RMI
domyślnie uruchamiany, brak dla aplikacji
-Djava.security.manager
ustawienia w Java Control Panel
warsztaty Bezpieczne dane w aplikacjach Java 13
Polityka bezpieczeństwa
domyślna implementacja PolicyFile
zmiana poprzez policy.provider
wskazanie domyślnych plików w
JAVA_HOME/lib/security/java.security
JAVA_HOME/lib/security/java.policy
USER_HOME/.java.policy
-Djava.security.policy=plik
narzędzie policytool
warsztaty Bezpieczne dane w aplikacjach Java 14
8. Kod uprzywilejowany
uwzględnia kontekst bezpieczeństwa bezpośrednio
wołającego a nie cały stos
oznaczenie kodu jako uprzywilejowanego umożliwia
dostęp do większej ilości zasobów niż jest dostępna
dla kodu, który z niego skorzystał
wykorzystywany jest przez klasy Java API np.
podczas dostępu do plików typu czcionki czy
biblioteki systemowe
ochrona dostępu do obiektów
GuardedObject pozwala na sprawdzenie
dodatkowych uprawnień dla obiektu
warsztaty Bezpieczne dane w aplikacjach Java 15
Kryptografia w Java
obsługiwane przez JCA (ang. Java Cryptography
Architecture) i JCE (ang. Java Cryptography
Extension)
interfejsy i ich implementacje przez dostawców CSP
(ang. Cryptographic Service Provider)
dynamiczna i statyczna konfiguracja dostawców
plik JAVA_HOME/lib/security/java.security
katalog JAVA_HOME/lib/ext
biblioteka Bouncy Castle
pliki polityki (ang. policy files) – ograniczenia
dostępnych algorytmów i ich siły
katalog JAVA_HOME/lib/security
warsztaty Bezpieczne dane w aplikacjach Java 16
9. Kryptografia w Java
obiekty zazwyczaj nie są tworzone za pośrednictwem
konstruktora, ale za pomocą fabryk
niezbędne jest podanie identyfikatora algorytmu jaki
chcemy użyć
Standard Algorithm Name Documentation
częste wyjątki
NoSuchProviderException
SecurityException, Unsupported keysize or
algorithm parameters
warsztaty Bezpieczne dane w aplikacjach Java 17
Szyfrowanie i deszyfrowanie
tekst jawny, tekst otwarty (ang. plaintext, cleartext)
szyfrowanie, kryptaż (ang. encipher, encryption)
deszyfrowanie, dekryptaż (ang. decipher,
decryption)
szyfrogram (ang. ciphertext)
warsztaty Bezpieczne dane w aplikacjach Java 18
10. Notacja
EK(M) = C
DK(C) = M
DK(EK(M)) = M
gdzie:
M – tekst jawny, wiadomość (ang. message)
C – szyfrogram
E – funkcja szyfrująca
D – funkcja deszyfrująca
K – klucz (ang. key)
warsztaty Bezpieczne dane w aplikacjach Java 19
Szyfr z kluczem jednorazowym
ang. one-time pad
1917, Mauborgne i Vername
klucz jest używany tylko raz do zaszyfrowania jednej
wiadomości
klucz ma długość co najmniej długości wiadomości
klucz jest losowy
jedyny szyfr nie do złamania
niepraktyczny
warsztaty Bezpieczne dane w aplikacjach Java 20
11. Algorytmy symetryczne
ten sam klucz jest przypisywany stronom biorącym
udział w wykonaniu algorytmu
jest używany do szyfrowania i deszyfrowania
szyfry blokowe i strumieniowe
warsztaty Bezpieczne dane w aplikacjach Java 21
Szyfry blokowe
własności szyfrów blokowych
pojęcie dopełnienia (ang. padding)
rodzaje dopełnienia: bitowe i bajtowe, zera, liczba
bajtów (PKCS #5, PKCS #7, RFC 5652), ISO/IEC
9797-1, ISO/IEC 7816-4. . .
przykłady szyfrów blokowych DES, AES (Rijndael),
Blowfish, IDEA, Mars, Serpent, TwoFish ...
warsztaty Bezpieczne dane w aplikacjach Java 22
12. Algorytm DES
Data Encryption Standard
DEA (Data Encryption Algorithm)
uznany w 1977 roku przez NBS (National Buerau of
Standards) jako amerykańska norma szyfrowania
danych
FIPS 46 (obecnie FIPS 46-3)
weryfikowany i przedłużany co 5 lat (do 1998, termin
upłynął w 2005 roku)
nigdy nie został złamany
klucz o długości 64 bity (efektywnie 56 bitów)
blok o długości 64 bity
warsztaty Bezpieczne dane w aplikacjach Java 23
3DES (TDEA)
potrójny DES
wydłużenie klucza do 192 bitów, ale często K1 = K3
(128 bitów)
3DESK1|K2|K3(M) = DESK3(DES−1
K2(DESK1(M)))
warsztaty Bezpieczne dane w aplikacjach Java 24
13. Zalecenia
NIST Special Publication 800-67, Recommendation
for the TDEA Block Cipher
NIST Special Publication 800-131A,
Recommendation for Transitioning the Use of
Cryptographic Algorithms and Key Lengths
nie używać w nowych systemach do szyfrowania
(poza TDES z kluczem 192 bit)
od 2010 roku nie powinno używać się TDES z
kluczem 128 bit
do 2015 roku należy wycofać TDES z kluczem 128 bit
nie szyfrować więcej niż 232
bloków jednym kluczem
192 bit
nie szyfrować więcej niż 220
bloków jednym kluczem
128 bit
warsztaty Bezpieczne dane w aplikacjach Java 25
Algorytm AES
Advanced Encryption Standard
Vincent Rijmen, Joan Daemen, 1997
konkurs: Rijndael, RC6, Mars, Serpent, Twofish
FIPS-197
klucz: 128, 192, 256 bit
blok: 128 bit (również 192 i 256 bit)
http://www.hanewin.net/encrypt/aes/aes-test.htm
warsztaty Bezpieczne dane w aplikacjach Java 26
14. Tryby pracy szyfrów blokowych
stosowane przy szyfrowaniu więcej niż jednego bloku
ECB (Electronic Code Book), CBC (Cipher Block Chaining)
określają zależności pomiędzy kolejnymi blokami
szyfrowanych danych
mają duże znaczenie dla bezpieczeństwa
dla algorytmu DES zdefiniowane w FIPS 81
podstawowe opisano w NIST Special Publication 800-38A,
Recommendation for Block Cipher Modes of Operation
inne tryby jako odrębne publikacje i analizy
http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html
warsztaty Bezpieczne dane w aplikacjach Java 27
Tryb ECB – szyfrowanie
Tryb elektronicznej książki kodowej
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 28
15. Tryb ECB – deszyfrowanie
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 29
Tryb ECB – właściwości
charakterystyczne fragmenty tekstu jawnego tworzą
ten sam szyfrogram
łatwa manipulacja tekstem jawnym (np. usuwanie
fragmentów)
szyfrowanie może być zrównoleglone
szyfrogram jest co najwyżej dłuższy o wielkość
dopełnienia
błąd w szyfrogramie wpływa na jeden cały blok
warsztaty Bezpieczne dane w aplikacjach Java 30
16. Tryb CBC – szyfrowanie
Tryb wiązania bloków szyfrogramu
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 31
Tryb CBC – deszyfrowanie
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 32
17. Tryb CBC – właściwości
charakterystyczne fragmenty tekstu jawnego są
ukrywane
możliwa manipulacja tekstem jawnym (początek i
koniec wiadomości)
szyfrowanie nie może być zrównoleglone
(deszyfrowanie - tak)
szyfrogram jest co najwyżej dłuższy o wielkość
dopełnienia (oraz o blok IV)
błąd w szyfrogramie wpływa na jeden cały blok i bit
na tej samej pozycji w bloku następnym
warsztaty Bezpieczne dane w aplikacjach Java 33
Tryb CTR – szyfrowanie
Tryb licznikowy
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 34
18. Tryb CTR – deszyfrowanie
za Wikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 35
Tryb CTR – właściwości
możliwe zrównoleglenie operacji algorytmu
możliwe szyfrowanie strumieni danych
pozwala odszyfrować lub zmodyfikować dowolny
fragment danych, bez konieczności odszyfrowywania
wszystkich bloków poprzedzających
zapewnia większe bezpieczeństwo transmisji niż CBC
warsztaty Bezpieczne dane w aplikacjach Java 36
19. Algorytmy symetryczne w Java
w opisie algorytmu dla fabryki klasy
javax.crypto.Cipher podajemy:
nazwę algorytmu np. AES
tryb szyfrowania np. ECB
rodzaj dopełnienia np. NoPadding, PKCS5Padding,
PKCS7Padding
klucz opisuje klasa
javax.crypto.spec.SecretKeySpec
klucze generowane są przez
javax.crypto.KeyGenerator
klucze przechowywane są za pomocą
javax.crypto.SecretKey
wektor inicjalizacyjny jest zarządzany przez
javax.crypto.spec.IvParameterSpec
warsztaty Bezpieczne dane w aplikacjach Java 37
Szyfrowanie w Java
zapewnienie poufności obiektów
SealedObject służy do przechowywania
zaszyfrowaniego obiektu
obiekt musi być serializowalny
programista decyduje o algorytmie szyfrującym i
jego parametrach
warsztaty Bezpieczne dane w aplikacjach Java 38
20. Generatory liczb losowych
liczby losowe i pseudolosowe
generatory bazujące na zjawisku fizycznym
losowość informacji (entropia) i ziarno
rand i srand Random
funkcja liniowa - wartości równomiernie rozłożone,
długi cykl, ale przewidywalne
atak na generację kluczy – srand(time(NULL))
SecureRandom i inne bezpieczne kryptograficznie
generatory liczb (pseudo)losowych
testy generatorów liczb
warsztaty Bezpieczne dane w aplikacjach Java 39
Przekazywanie kluczy
klucze szyfrowane kluczem transportowym
problem pobrania danych klucza tajnego
klasa Cipher pracuje również w trybach WRAP_MODE
i UNWRAP_MODE
umożliwia to szyfrowanie i deszyfrowanie kluczy bez
ich ujawniania
ale jak uzgodnić pierwszy klucz?
uzgadnianie klucza – algorytm Diffiego-Hellmana
(-Merkla)
problem operacji w grupie n osób – potrzeba n(n−1)
2
kluczy
warsztaty Bezpieczne dane w aplikacjach Java 40
21. Uzgadnianie klucza
Algorytm Diffiego-Hellmana (-Merkla)
warsztaty Bezpieczne dane w aplikacjach Java 41
Algorytmy asymetryczne
każda strona posiada parę kluczy
klucz jawny (publiczny)
klucz tajny (prywatny)
klucz publiczny służy do szyfrowania (weryfikacji)
klucz prywatny służy do deszyfrowania (podpisu)
DKpriv(EKpub(M)) = M
warsztaty Bezpieczne dane w aplikacjach Java 42
22. RSA
Generowanie kluczy
wybranie p i q – duże liczby pierwsze
testy pierwszości
n = p ∗ q – moduł
najczęściej wybieramy e = 65537
znalezienie d takiego, że ed = 1mod ϕ(n)
ϕ(n) = (p − 1)(q − 1) – funkcja Eulera
e – wykładnik publiczny
Kpub – (n, e)
d - wykładnik prywatny
Kpriv – (n, d)
warsztaty Bezpieczne dane w aplikacjach Java 43
RSA
Szyfrowanie i deszyfrowanie
C = Me
mod n
M = Cd
mod n
warsztaty Bezpieczne dane w aplikacjach Java 44
23. RSA
nie wolno podpisywać przypadkowych informacji
nie wolno stosować tej samej pary kluczy do
podpisywania i deszyfrowania
w grupie użytkowników nie należy używać
wspólnego n
częściowa znajomość d może umożliwić atak
od 2014 roku zaleca się użycie klucza o długości co
najmniej 2048 bit
nie powinno się szyfrować dużej ilości danych,
kluczem RSA szyfrujemy klucz sesyjny algorytmu
symetrycznego
warsztaty Bezpieczne dane w aplikacjach Java 45
Równoważne długości kluczy
za http://www.keylength.com
warsztaty Bezpieczne dane w aplikacjach Java 46
24. Algorytmy symetryczne/asymetryczne
Zalety algorytmów symetrycznych
krótkie klucze szyfrujące
duża szybkość działania
możliwość wykorzystania z innymi algorytmami (np.
MAC)
możliwość łączenia algorytmów (np. 3DES)
Wady algorytmów symetrycznych
konieczność utrzymywania klucza w sekrecie i jego
współdzielenia
konieczność częstej zmiany kluczy
warsztaty Bezpieczne dane w aplikacjach Java 47
Algorytmy symetryczne/asymetryczne
Zalety algorytmów asymetrycznych
w sekrecie utrzymujemy klucz prywatny
odpowiednio silna para kluczy nie musi być często
zmieniana
w systemach dla wielu użytkowników - prostota w
zarządzaniu i współdzieleniu kluczy
Wady algorytmów asymetrycznych
konieczność zapewnienia autentyczności dla klucza
publicznego
konieczność częstej zmiany kluczy
niska szybkość działania
długie klucze
warsztaty Bezpieczne dane w aplikacjach Java 48
25. Zarządzanie kluczami
rodzaje kluczy
klucze sesyjne (efemeryczne)
klucze długookresowe
generowanie kluczy
dystrybucja kluczy
przechowywanie kluczy
uwierzytelnienie kluczy
unieważnienie kluczy
warsztaty Bezpieczne dane w aplikacjach Java 49
Funkcja skrótu
usługa integralności
H(M) – funkcja skrótu dla danej wiadomości M
dla dowolnego M wartością funkcji jest ciąg bitów o
określonej długości
pojęcie kolizji – dwie wiadomości o tym samym
skrócie
funkcja haszująca a funkcja skrótu – celem funkcji
haszującej jest jedynie znalezienie skrótu dla
wiadomości, taka funkcja w kryptografii jest
bezużyteczna
klasa java.security.MessageDigest
warsztaty Bezpieczne dane w aplikacjach Java 50
26. SHA
Secure Hash Algorithm
NIST i NSA
FIPS PUB 180-4 (SHA-1, SHA-224, SHA-256, SHA-384,
SHA-512, SHA-512/224 i SHA-512/256)
RFC 3174 (SHA-1)
rodzina SHA:
SHA-0 (160 bitów)
SHA-1 (160 bitów)
SHA-2: SHA-224, -256, -384, -512
SHA-3: SHA3-224, -256, -384, -512
FIPS 202, algorytm Keccak
warsztaty Bezpieczne dane w aplikacjach Java 51
Atak słownikowy
przechowywanie bazy danych wiadomości i skrótów
wykorzystanie funkcji skrótu do przechowywania
haseł użytkowników
łamanie haseł z użyciem baz danych skrótów
sól (ang. salt)
warsztaty Bezpieczne dane w aplikacjach Java 52
27. HMAC
kod uwierzytelniający wiadomość (MAC)
Keyed-Hash Message Authentication Code
oparty na kryptograficznej funkcji skrótu
FIPS PUB 198-1
RFC 2104, 2202
wykorzystywane funkcje skrótu z rodziny SHA-2
należy używać klucza o długości co najmniej 112
bitów
klasa javax.crypto.Mac
warsztaty Bezpieczne dane w aplikacjach Java 53
HMAC
ipad – powtórzenia 0x36, opad – 0x5C.
za FIPS 198-1
warsztaty Bezpieczne dane w aplikacjach Java 54
28. CBC-MAC
warsztaty Bezpieczne dane w aplikacjach Java 55
Tryby szyfrowania z uwierzytelnieniem
zapewniają poufność i uwierzytelnienie danych
Authenticated Encryption (AE)
Authenticated Encryption with Associated Data
(AEAD)
połączenie trybów szyfrowania z kodami
uwierzytelniającymi wiadomość
CCM, EAX, GCM
trzy podejścia:
Encrypt-then-Mac (EtM)
Encrypt-and-Mac (E&M)
Mac-then-Encrypt (MtE)
warsztaty Bezpieczne dane w aplikacjach Java 56
29. Uwierzytelnienie
jedna z podstawowych usług ochrony informacji
w normie ISO/IEC 9594-8 wyróżniono dwa rodzaje
uwierzytelnienia
proste uwierzytelnienie wykorzystujące identyfikator
użytkownika i hasło
silne uwierzytelnienie wykorzystujące techniki
kryptograficzne
składniki uwierzytelnienia: wiem, mam, jestem
biometria
Trust Score, wykorzystanie wielu różnych metod
uwierzytelnienie a identyfikacja
warsztaty Bezpieczne dane w aplikacjach Java 57
Fraza hasłowa
Ogólna definicja
Fraza hasłowa (ang. passphrase) - jest to ciąg znaków
inny niż akceptowane hasło. Jest on przekształcany w
wirtualne hasło o akceptowalnej budowie.
Przykład
Aby wykorzystać hasło do szyfrowania algorytmem DES
musi być ono frazą hasłową, która z użyciem
odpowiedniego algorytmu zostanie przekształcona w
klucz odpowiedni dla DES.
PKCS #5 - Password Based Encryption (PBE)
pbeWithSHA1AndDES-CBC
pbeWithSHA1AndRC2-CBC
warsztaty Bezpieczne dane w aplikacjach Java 58
30. PBE
hasło + sól → funkcja skrótu → klucz + wektor
inicjalizacyjny
w PKCS #5 określono funkcje do generacji klucza
oraz wektora inicjalizacyjnego na podstawie wartości
funkcji skrótu
klasa javax.crypto.spec.PBEKeySpec
warsztaty Bezpieczne dane w aplikacjach Java 59
Podpis cyfrowy
bazuje na algorytmach asymetrycznych i może być
użyty do:
uwierzytelnienia źródła danych
uwierzytelnienia osoby (jednostki)
realizacji usługi niezaprzeczalność
algorytm spełnia następujące warunki:
dla danego klucza do weryfikacji jest operacją trudną
obliczeniowo wygenerowanie podpisu dla dowolnej
wiadomości
z podpisu nie da się uzyskać klucza do podpisu
jest operacją trudną obliczeniowo (również dla
właściciela klucza do podpisu) znalezienie dwóch
wiadomości z tą samą wartością podpisu
warsztaty Bezpieczne dane w aplikacjach Java 60
31. Podpis cyfrowy w Java
klasa java.security.Signature
ochrona integralności obiektów
SignedObject służy do przechowywania
podpisanego obiektu
w razie zmiany nie uda się weryfikacja obiektu
obiekt musi być serializowalny
warsztaty Bezpieczne dane w aplikacjach Java 61
Infrastruktura Klucza Publicznego
PKI (ang. Public Key Infrastructure)
CA (ang. Certificate Authority)
zaufana trzecia strona
podpisuje klucz
gwarantuje autentyczność klucza
warsztaty Bezpieczne dane w aplikacjach Java 62
32. Certyfikacja
wygenerowanie pary kluczy
stworzenie zgłoszenia certyfikacyjnego (ang.
certificate request)
podpisany klucz publiczny wraz z informacjami
identyfikującymi podmiot
przesłanie zgłoszenia do punktu rejestracji
weryfikacja danych podmiotu przez punkt rejestracji
CA wystawia certyfikat
weryfikacja stworzonego certyfikatu przez podmiot
publikacja certyfikatów podmiotu i CA
warsztaty Bezpieczne dane w aplikacjach Java 63
Dane wrażliwe
czy konieczne jest ich przechowywanie
czy konieczne jest ich ciągłe przechowywanie
jak przechowywać dane wrażliwe
pojęcie tokenizacji
szyfrowanie danych
usuwanie zbędnych danych
wykorzystanie typów prostych
przechowywanie i używanie kluczy kryptograficznych
warsztaty Bezpieczne dane w aplikacjach Java 64
33. Dane kryptograficzne
najlepiej nie trzymać kluczy tajnych w
oprogramowaniu i w pamięci
klucze publiczne trzeba odpowiednio zabezpieczyć
nie należy dopuszczać do zrzutów pamięci na dysk
bezpieczniej jest przechowywać klucze w jednym
miejscu niż je przekazywać między
modułami/obszarami pamięci
używając wątków nie należy szyfrować i deszyfrować
na tym samym buforze (na wypadek wyścigu)
uruchamianie aplikacji z przywilejami nie większymi
niż jej potrzebne – sama aplikacja też powinna je
sprawdzać
stosowanie nośników kluczy, sprzętowe moduły
bezpieczeństwa
szyfrowanie kluczy innymi kluczami (wrap/unwrap)
wymiana kluczy sesyjnych
warsztaty Bezpieczne dane w aplikacjach Java 65
Przechowywanie kluczy w pliku
pliki z kluczami powinny być zawsze zaszyfrowane
klucz (hasło) szyfrujące może być wbudowane w
aplikację
możliwy automatyczny restart aplikacji
klucz szyfrujący można wydobyć z aplikacji
lub użytkownik musi je podać podczas uruchomienia
aplikacji
utrudniony automatyczny restart aplikacji
większe bezpieczeństwo
klucze będą jawnie używane w pamięci
warsztaty Bezpieczne dane w aplikacjach Java 66
34. Repozytoria
JCEKS – składowanie kluczy prywatnych, certyfikatów
oraz kluczy symetrycznych; klucze prywatne
szyfrowane 3DES
JKS – składowanie kluczy prywatnych oraz
certyfikatów; klucze prywatne są szyfrowane
słabszym algorytmem niż w JCEKS
PKCS12 – zdefiniowany w standardzie PKCS #12, jego
możliwości są zależne od konkretnej implementacji
narzędzie keytool – umożliwia wykonywanie
operacji na repozytoriach
klasa java.security.KeyStore
warsztaty Bezpieczne dane w aplikacjach Java 67
Tworzenie repozytorium
https://github.com/use-sparingly/keyutil
http://www.keystore-explorer.org/
keytool -genseckey
-alias hmackey
-keyalg HmacSHA256
-keysize 512
-storetype JCEKS
-storepass 123456
-keystore hmac.keystore
warsztaty Bezpieczne dane w aplikacjach Java 68
35. Tworzenie repozytorium
keytool -genkey
-alias sages
-keyalg EC
-keysize 256
-keystore sign.keystore
keytool -list -keystore sign.keystore
warsztaty Bezpieczne dane w aplikacjach Java 69
Podpisywanie plików JAR
jar cf hw.jar HelloWorld.class
jarsigner hw.jar sages
-signedjar hws.jar
-keystore sign.keystore
warsztaty Bezpieczne dane w aplikacjach Java 70
36. Weryfikacja plików JAR
keytool -export
-keystore sign.keystore
-alias sages -file sages.crt
keytool -import
-keystore verify.keystore
-alias sages -file sages.crt
jarsigner -verify hws.jar
-keystore verify.keystore
-verbose -certs
warsztaty Bezpieczne dane w aplikacjach Java 71
SSL i TLS
TLS (ang. Transport Layer Security)
SSL (ang. Secure Sockets Layer)
TLS 1.0 ≈ SSL 3.0
wersje TLS 1.1 i TLS 1.2 są bezpieczniejsze
zaimplementowane w warstwie aplikacji w ramach
protokołu TCP
zabezpiecza komunikację poprzez szyfrowanie i
uwierzytelnienie w trybie MAC-then-Encrypt
tradycyjnie uwierzytelnienie oparte na certyfikatach
X.509
nie ukierunkowany na konkretną usługę
algorytm uwierzytelnienia, wymiany kluczy,
szyfrowania oraz zapewniania integralności
warsztaty Bezpieczne dane w aplikacjach Java 72
37. Certyfikaty dla serwerów SSL
Wyróżnia się trzy klasy certyfikatów:
DV (ang. Domain Validation, pol. walidacja domeny)
weryfikacja prawa do domeny
często wystawiane automatycznie
OV (ang. Organization Validation, pol. walidacja
organizacji)
weryfikacja prawa do domeny
sprawdzenie tożsamości kupującego
EV (ang. Extended Validation, pol. rozszerzona
walidacja)
szczegółowa weryfikacja wiarygodności kupującego
witryny wyróżnione w przeglądarkach
warsztaty Bezpieczne dane w aplikacjach Java 73
Chcesz wiedzieć więcej?
Szkolenia pozwalają na indywidualną pracę z każdym
uczestnikiem
pracujemy w grupach 4-8 osobowych
program może być dostosowany do oczekiwań grupy
rozwiązujemy i odpowiadamy na indywidualne
pytania uczestników
mamy dużo więcej czasu :)
warsztaty Bezpieczne dane w aplikacjach Java 74
38. Chcesz wiedzieć więcej?
http://www.sages.com.pl
Infrastruktura Klucza Publicznego (PKI)
Praktyczne aspekty stosowania kryptografii w
systemach komputerowych
Kryptografia na platformie Java w praktyce
Programowanie kart Java Card
Protokół SSL/TLS
Bezpieczny kod Java w praktyce w oparciu o
wytyczne CERT i Oracle
warsztaty Bezpieczne dane w aplikacjach Java 75
Do zobaczenia!
warsztaty Bezpieczne dane w aplikacjach Java 76