SlideShare a Scribd company logo
1 of 38
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

More Related Content

Viewers also liked

Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
Sages
 

Viewers also liked (14)

Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 

Similar to Bezpieczne dane w aplikacjach java

Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
SecuRing
 
Od Patryka Błażejczyka
Od Patryka  BłażejczykaOd Patryka  Błażejczyka
Od Patryka Błażejczyka
Bpatryczek
 
Modul 1
Modul 1Modul 1
Modul 1
Jacek
 
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
Sektor 3.0
 
Co Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
Co Zrobić By PożąDnie Zabezpieczyć Serwer W SieciCo Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
Co Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
bystry
 

Similar to Bezpieczne dane w aplikacjach java (20)

Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
 
Od Patryka Błażejczyka
Od Patryka  BłażejczykaOd Patryka  Błażejczyka
Od Patryka Błażejczyka
 
OWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForceOWASP ASVS 3.1 EA PL - YetiForce
OWASP ASVS 3.1 EA PL - YetiForce
 
Bezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowychBezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowych
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych
 
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...
 
Kryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwaKryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwa
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych
 
Analiza i ocena jakości współczesnych systemów operacyjnych
Analiza i ocena jakości współczesnych systemów operacyjnych Analiza i ocena jakości współczesnych systemów operacyjnych
Analiza i ocena jakości współczesnych systemów operacyjnych
 
Analiza i ocena jakości współczesnych systemów operacyjnych
Analiza i  ocena jakości współczesnych systemów operacyjnychAnaliza i  ocena jakości współczesnych systemów operacyjnych
Analiza i ocena jakości współczesnych systemów operacyjnych
 
Modul 1
Modul 1Modul 1
Modul 1
 
Shadow of the network security (polish language)
Shadow of the network security (polish language)Shadow of the network security (polish language)
Shadow of the network security (polish language)
 
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDNPLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
 
Darmowe narzędzia wspomagające procesy zabezpieczania infrastruktury firmowej.
Darmowe narzędzia wspomagające procesy zabezpieczania infrastruktury firmowej.Darmowe narzędzia wspomagające procesy zabezpieczania infrastruktury firmowej.
Darmowe narzędzia wspomagające procesy zabezpieczania infrastruktury firmowej.
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
 
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
Tomasz Duma: "Zabezpiecz zasoby Twojej organizacji"
 
Co Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
Co Zrobić By PożąDnie Zabezpieczyć Serwer W SieciCo Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
Co Zrobić By PożąDnie Zabezpieczyć Serwer W Sieci
 
4
44
4
 

More from Sages (7)

Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 

Bezpieczne dane w aplikacjach java

  • 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