Wprowadzenie do platformy Java i programowanie w języku Java
Bezpieczne dane w aplikacjach java
-
Upload
sages -
Category
Technology
-
view
131 -
download
1
Transcript of Bezpieczne dane w aplikacjach java
Bezpieczne danew aplikacjach JavawarsztatyPiotr Nazimek
Bezpieczne dane
dlaczego chcemy chronić danei po co to robić jeśli wszyscy działamy zgodniez prawem i nie mamy nic do ukrycia :)czy zawsze ochrona to szyfrowanieczym jest bezpieczeństwo
warsztaty Bezpieczne dane w aplikacjach Java 2
IntegralnośćUsługa integralności
usługa realizuje funkcję, która polega nazapewnieniu, że przetwarzana informacja nie zostałazmieniona w żaden sposóbusługa ma na celu ochronę danych przedprzypadkową lub celową zmianądo zapewnienia integralności danych w kryptografiistosuje się funkcje skrótujest to podstawowa usługa ochrony informacji
warsztaty Bezpieczne dane w aplikacjach Java 3
UwierzytelnienieUsługa uwierzytelnienia
jest to proces, którego celem jest stwierdzenie, żezadeklarowana cecha danego podmiotu jestprawdziwauwierzytelnianiu podlegają osoby, systemy, źródładanych, dokumentydo realizacji usługi uwierzytelniania stosuje sięw kryptografii między innymi hasła, kodyuwierzytelniające wiadomość, podpis cyfrowy
warsztaty Bezpieczne dane w aplikacjach Java 4
NiezaprzeczalnośćUsługa niezaprzeczalności
brak możliwości wyparcia się uczestnictwa podmiotuw procesie wymiany danychusługa kosztowna w realizacjido realizacji usługi niezaprzeczalności stosuje sięw kryptografii między innymi podpis cyfrowy orazznaczniki czasu, niezbędna jest również zaufanastrona
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 jednostkomdo realizacji usługi poufności stosuje sięw kryptografii algorytmy szyfrująceusługa poufności może być również realizowanaproceduralnie poprzez ustalenie zasad obiegui dostępu do informacji
warsztaty Bezpieczne dane w aplikacjach Java 6
KryptologiaKryptologiaKryptologia (ang. cryptology) to nauka o zabezpieczaniuinformacji.Zajmuje się nią kryptolog (ang. cryptologist).
KryptografiaKryptografia (ang.cryptography) to nauka okonstruowaniu systemówkryptograficznych.Zajmuje się nią krypograf(ang. cryptographer).
KryptoanalizaKryptoanaliza (ang.cryptoanalysis) to naukao łamaniu systemówkryptograficznych.Zajmuje się niąkryptoanalityk (ang.cryptoanalyst).
warsztaty Bezpieczne dane w aplikacjach Java 7
Kryptografia klasycznaSzyfry przestawieniowe
transpozycja tekstu jawnegozachowują statystykę językaszyfr kolumnowy
Szyfry podstawienioweszyfr Cezara, szyfr ROT13szyfry monoalfabetyczne – przekształcenie znakualfabetu na inny znak z tego alfabetuszyfry polialfabetyczne – złożenie kilku szyfrówmonoalfabetycznychszyfry poligramowe – szyfrowanie grup liter
warsztaty Bezpieczne dane w aplikacjach Java 8
Podstawowe zasady w kryptografiiZasady Augusta KerckhoffsaSystem będzie praktycznie niedo złamania jeśli:
budowa maszyny jestjawna, tajny jest kluczklucz jest łatwy dozapamiętaniakryptogram jest łatwy doprzekazaniamaszyna szyfrująca jestpodręcznasystem jest prosty w użyciu1883, La Cryptographie Militarie
za David Kahn, Łamacze kodów
warsztaty Bezpieczne dane w aplikacjach Java 9
Atakiatakujący zazwyczaj nie atakuje bezpośredniozastosowanych metod kryptograficznych, raczejstara się je obejśćposzukiwany jest opłacalny (tani) sposób atakuwiększość ataku nie jest przeprowadzanabezpośrednio na system, ale na ludzi i organizacjęzapewnienie dostatecznego bezpieczeństwa systemupolega na takiej jego implementacji aby dlaatakującego nieopłacalne było jego atakowanie
warsztaty Bezpieczne dane w aplikacjach Java 10
Bezpieczeństwo w Javazaufanie w Javana poziomie języka - dostęp do klas/metod
public, protected, privatewzględem aplikacji jako całości –mechanizmuprawnień narzucony w piaskownicy (sandbox)ochrona użytkownika przed aplikacjąwzględem użytkownika - Java Authentication andAuthorization Service (JAAS)ochrona aplikacji przed użytkownikiem
warsztaty Bezpieczne dane w aplikacjach Java 11
Piaskownicazestaw uprawnień kodu określa politykabezpieczeństwa (security policy)autoryzacja - kryterium decydującym są własnościkoduSecurity Manager (SM)
sprawdza czy żądana operacja nie narusza politykibezpieczeństwaAccess Controller (AC)
dostawca usług dla SMClass Loader (CL)
odpowiada za ładowanie klas, określa ich codebasekorzysta z SM w celu sprawdzenia czy kod żądającyzaładowania klasy ma do tego prawawarsztaty Bezpieczne dane w aplikacjach Java 12
Security Managerwykorzystywany w implementacji klas podczasrealizacji potencjalnie niebezpiecznych operacjioperacja sprawdzane są każdorazowo
nieefektywnebezpiecznezmiana polityki bezpieczeństwazmiana kontekstu wykonania aplikacji
pozwala wykonać operację lub zgłaszaSecurityExceptiondla aplikacji Java Web Start, apletów oraz RMIdomyślnie uruchamiany, brak dla aplikacji-Djava.security.manager
ustawienia w Java Control Panelwarsztaty Bezpieczne dane w aplikacjach Java 13
Polityka bezpieczeństwa
domyślna implementacja PolicyFilezmiana poprzez policy.providerwskazanie domyślnych plików wJAVA_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 uprzywilejowanyuwzględnia kontekst bezpieczeństwa bezpośredniowołającego a nie cały stosoznaczenie kodu jako uprzywilejowanego umożliwiadostęp do większej ilości zasobów niż jest dostępnadla kodu, który z niego skorzystałwykorzystywany jest przez klasy Java API np.podczas dostępu do plików typu czcionki czybiblioteki systemoweochrona dostępu do obiektów
GuardedObject pozwala na sprawdzeniedodatkowych uprawnień dla obiektu
warsztaty Bezpieczne dane w aplikacjach Java 15
Kryptografia w Javaobsługiwane przez JCA (ang. Java CryptographyArchitecture) i JCE (ang. Java CryptographyExtension)interfejsy i ich implementacje przez dostawców CSP(ang. Cryptographic Service Provider)dynamiczna i statyczna konfiguracja dostawców
plik JAVA_HOME/lib/security/java.securitykatalog JAVA_HOME/lib/extbiblioteka Bouncy Castlepliki polityki (ang. policy files) – ograniczeniadostępnych algorytmów i ich siły
katalog JAVA_HOME/lib/security
warsztaty Bezpieczne dane w aplikacjach Java 16
Kryptografia w Javaobiekty zazwyczaj nie są tworzone za pośrednictwemkonstruktora, ale za pomocą fabrykniezbędne jest podanie identyfikatora algorytmu jakichcemy użyć
Standard Algorithm Name Documentationczęste wyjątki
NoSuchProviderException
SecurityException, Unsupported keysize oralgorithm 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
NotacjaEK(M) = C
DK(C) = M
DK(EK(M)) = M
gdzie:M – tekst jawny, wiadomość (ang. message)C – szyfrogramE – funkcja szyfrującaD – funkcja deszyfrującaK – klucz (ang. key)
warsztaty Bezpieczne dane w aplikacjach Java 19
Szyfr z kluczem jednorazowymang. one-time pad1917, Mauborgne i Vernameklucz jest używany tylko raz do zaszyfrowania jednejwiadomościklucz ma długość co najmniej długości wiadomościklucz jest losowyjedyny szyfr nie do złamanianiepraktyczny
warsztaty Bezpieczne dane w aplikacjach Java 20
Algorytmy symetryczne
ten sam klucz jest przypisywany stronom biorącymudział w wykonaniu algorytmujest używany do szyfrowania i deszyfrowaniaszyfry blokowe i strumieniowe
warsztaty Bezpieczne dane w aplikacjach Java 21
Szyfry blokowe
własności szyfrów blokowychpojęcie dopełnienia (ang. padding)rodzaje dopełnienia: bitowe i bajtowe, zera, liczbabajtów (PKCS #5, PKCS #7, RFC 5652), ISO/IEC9797-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 DESData Encryption StandardDEA (Data Encryption Algorithm)uznany w 1977 roku przez NBS (National Buerau ofStandards) jako amerykańska norma szyfrowaniadanychFIPS 46 (obecnie FIPS 46-3)weryfikowany i przedłużany co 5 lat (do 1998, terminupłynął w 2005 roku)nigdy nie został złamanyklucz 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 DESwydłużenie klucza do 192 bitów, ale często K1 = K3(128 bitów)3DESK1|K2|K3(M) = DESK3(DES−1K2(DESK1(M)))
warsztaty Bezpieczne dane w aplikacjach Java 24
ZaleceniaNIST Special Publication 800-67, Recommendationfor the TDEA Block CipherNIST Special Publication 800-131A,Recommendation for Transitioning the Use ofCryptographic Algorithms and Key Lengthsnie używać w nowych systemach do szyfrowania(poza TDES z kluczem 192 bit)od 2010 roku nie powinno używać się TDES zkluczem 128 bitdo 2015 roku należy wycofać TDES z kluczem 128 bitnie szyfrować więcej niż 232 bloków jednym kluczem192 bitnie szyfrować więcej niż 220 bloków jednym kluczem128 bit
warsztaty Bezpieczne dane w aplikacjach Java 25
Algorytm AES
Advanced Encryption StandardVincent Rijmen, Joan Daemen, 1997konkurs: Rijndael, RC6, Mars, Serpent, TwofishFIPS-197klucz: 128, 192, 256 bitblok: 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 blokowychstosowane przy szyfrowaniu więcej niż jednego blokuECB (Electronic Code Book), CBC (Cipher Block Chaining)określają zależności pomiędzy kolejnymi blokamiszyfrowanych danychmają duże znaczenie dla bezpieczeństwadla algorytmu DES zdefiniowane w FIPS 81podstawowe opisano w NIST Special Publication 800-38A,Recommendation for Block Cipher Modes of Operationinne tryby jako odrębne publikacje i analizy
http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.htmlwarsztaty Bezpieczne dane w aplikacjach Java 27
Tryb ECB – szyfrowanieTryb elektronicznej książki kodowej
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 28
Tryb ECB – deszyfrowanie
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 29
Tryb ECB – właściwościcharakterystyczne fragmenty tekstu jawnego tworząten sam szyfrogramłatwa manipulacja tekstem jawnym (np. usuwaniefragmentów)szyfrowanie może być zrównolegloneszyfrogram jest co najwyżej dłuższy o wielkośćdopełnieniabłąd w szyfrogramie wpływa na jeden cały blok
warsztaty Bezpieczne dane w aplikacjach Java 30
Tryb CBC – szyfrowanieTryb wiązania bloków szyfrogramu
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 31
Tryb CBC – deszyfrowanie
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 32
Tryb CBC – właściwościcharakterystyczne fragmenty tekstu jawnego sąukrywanemożliwa manipulacja tekstem jawnym (początek ikoniec 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 bitna tej samej pozycji w bloku następnym
warsztaty Bezpieczne dane w aplikacjach Java 33
Tryb CTR – szyfrowanieTryb licznikowy
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 34
Tryb CTR – deszyfrowanie
zaWikimedia Commons
warsztaty Bezpieczne dane w aplikacjach Java 35
Tryb CTR – właściwości
możliwe zrównoleglenie operacji algorytmumożliwe szyfrowanie strumieni danychpozwala odszyfrować lub zmodyfikować dowolnyfragment danych, bez konieczności odszyfrowywaniawszystkich bloków poprzedzającychzapewnia większe bezpieczeństwo transmisji niż CBC
warsztaty Bezpieczne dane w aplikacjach Java 36
Algorytmy symetryczne w Javaw opisie algorytmu dla fabryki klasyjavax.crypto.Cipher podajemy:
nazwę algorytmu np. AEStryb szyfrowania np. ECBrodzaj dopełnienia np. NoPadding, PKCS5Padding,
PKCS7Padding
klucz opisuje klasajavax.crypto.spec.SecretKeySpec
klucze generowane są przezjavax.crypto.KeyGenerator
klucze przechowywane są za pomocąjavax.crypto.SecretKey
wektor inicjalizacyjny jest zarządzany przezjavax.crypto.spec.IvParameterSpec
warsztaty Bezpieczne dane w aplikacjach Java 37
Szyfrowanie w Java
zapewnienie poufności obiektówSealedObject służy do przechowywaniazaszyfrowaniego obiektuobiekt musi być serializowalnyprogramista decyduje o algorytmie szyfrującym ijego parametrach
warsztaty Bezpieczne dane w aplikacjach Java 38
Generatory liczb losowychliczby losowe i pseudolosowe
generatory bazujące na zjawisku fizycznymlosowość informacji (entropia) i ziarnorand i srand Random
funkcja liniowa - wartości równomiernie rozłożone,długi cykl, ale przewidywalneatak na generację kluczy – srand(time(NULL))SecureRandom i inne bezpieczne kryptograficzniegeneratory liczb (pseudo)losowychtesty generatorów liczb
warsztaty Bezpieczne dane w aplikacjach Java 39
Przekazywanie kluczyklucze szyfrowane kluczem transportowymproblem pobrania danych klucza tajnegoklasa Cipher pracuje również w trybach WRAP_MODEi UNWRAP_MODEumożliwia to szyfrowanie i deszyfrowanie kluczy bezich ujawnianiaale jak uzgodnić pierwszy klucz?uzgadnianie klucza – algorytm Diffiego-Hellmana(-Merkla)problem operacji w grupie n osób – potrzeba n(n−1)
2kluczy
warsztaty Bezpieczne dane w aplikacjach Java 40
Uzgadnianie kluczaAlgorytm Diffiego-Hellmana (-Merkla)
warsztaty Bezpieczne dane w aplikacjach Java 41
Algorytmy asymetryczne
każda strona posiada parę kluczyklucz 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
RSAGenerowanie kluczy
wybranie p i q – duże liczby pierwszetesty pierwszościn = p ∗ q –modułnajczęściej wybieramy e = 65537
znalezienie d takiego, że ed = 1mod ϕ(n)
ϕ(n) = (p− 1)(q − 1) – funkcja Eulerae – wykładnik publicznyKpub – (n, e)
d - wykładnik prywatnyKpriv – (n, d)
warsztaty Bezpieczne dane w aplikacjach Java 43
RSASzyfrowanie i deszyfrowanie
C = M emod n
M = Cdmod n
warsztaty Bezpieczne dane w aplikacjach Java 44
RSAnie wolno podpisywać przypadkowych informacjinie wolno stosować tej samej pary kluczy dopodpisywania i deszyfrowaniaw grupie użytkowników nie należy używaćwspólnego nczęściowa znajomość dmoże umożliwić atakod 2014 roku zaleca się użycie klucza o długości conajmniej 2048 bitnie powinno się szyfrować dużej ilości danych,kluczem RSA szyfrujemy klucz sesyjny algorytmusymetrycznego
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/asymetryczneZalety algorytmów symetrycznych
krótkie klucze szyfrująceduża szybkość działaniamożliwość wykorzystania z innymi algorytmami (np.MAC)możliwość łączenia algorytmów (np. 3DES)
Wady algorytmów symetrycznychkonieczność utrzymywania klucza w sekrecie i jegowspółdzieleniakonieczność częstej zmiany kluczy
warsztaty Bezpieczne dane w aplikacjach Java 47
Algorytmy symetryczne/asymetryczneZalety algorytmów asymetrycznych
w sekrecie utrzymujemy klucz prywatnyodpowiednio silna para kluczy nie musi być częstozmienianaw systemach dla wielu użytkowników - prostota wzarządzaniu i współdzieleniu kluczy
Wady algorytmów asymetrycznychkonieczność zapewnienia autentyczności dla kluczapublicznegokonieczność częstej zmiany kluczyniska szybkość działaniadługie klucze
warsztaty Bezpieczne dane w aplikacjach Java 48
Zarządzanie kluczamirodzaje kluczy
klucze sesyjne (efemeryczne)klucze długookresowegenerowanie kluczydystrybucja kluczyprzechowywanie kluczyuwierzytelnienie kluczyunieważnienie kluczy
warsztaty Bezpieczne dane w aplikacjach Java 49
Funkcja skrótuusługa integralnościH(M) – funkcja skrótu dla danej wiadomościMdla dowolnegoM wartością funkcji jest ciąg bitów ookreślonej długościpojęcie kolizji – dwie wiadomości o tym samymskróciefunkcja haszująca a funkcja skrótu – celem funkcjihaszującej jest jedynie znalezienie skrótu dlawiadomości, taka funkcja w kryptografii jestbezużytecznaklasa java.security.MessageDigest
warsztaty Bezpieczne dane w aplikacjach Java 50
SHASecure Hash AlgorithmNIST i NSAFIPS 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, -512SHA-3: SHA3-224, -256, -384, -512FIPS 202, algorytm Keccak
warsztaty Bezpieczne dane w aplikacjach Java 51
Atak słownikowy
przechowywanie bazy danych wiadomości i skrótówwykorzystanie funkcji skrótu do przechowywaniahaseł użytkownikówłamanie haseł z użyciem baz danych skrótówsól (ang. salt)
warsztaty Bezpieczne dane w aplikacjach Java 52
HMACkod uwierzytelniający wiadomość (MAC)Keyed-Hash Message Authentication Codeoparty na kryptograficznej funkcji skrótuFIPS PUB 198-1RFC 2104, 2202wykorzystywane funkcje skrótu z rodziny SHA-2należy używać klucza o długości co najmniej 112bitówklasa javax.crypto.Mac
warsztaty Bezpieczne dane w aplikacjach Java 53
HMACipad – 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 uwierzytelnieniemzapewniają poufność i uwierzytelnienie danychAuthenticated Encryption (AE)Authenticated Encryption with Associated Data(AEAD)połączenie trybów szyfrowania z kodamiuwierzytelniającymi wiadomośćCCM, EAX, GCMtrzy podejścia:
Encrypt-then-Mac (EtM)Encrypt-and-Mac (E&M)Mac-then-Encrypt (MtE)
warsztaty Bezpieczne dane w aplikacjach Java 56
Uwierzytelnieniejedna z podstawowych usług ochrony informacjiw normie ISO/IEC 9594-8 wyróżniono dwa rodzajeuwierzytelnienia
proste uwierzytelnienie wykorzystujące identyfikatorużytkownika i hasłosilne uwierzytelnienie wykorzystujące technikikryptograficzneskładniki uwierzytelnienia: wiem, mam, jestembiometriaTrust Score, wykorzystanie wielu różnych metoduwierzytelnienie a identyfikacja
warsztaty Bezpieczne dane w aplikacjach Java 57
Fraza hasłowaOgólna definicjaFraza hasłowa (ang. passphrase) - jest to ciąg znakówinny niż akceptowane hasło. Jest on przekształcany wwirtualne hasło o akceptowalnej budowie.PrzykładAby wykorzystać hasło do szyfrowania algorytmem DESmusi być ono frazą hasłową, która z użyciemodpowiedniego algorytmu zostanie przekształcona wklucz odpowiedni dla DES.PKCS #5 - Password Based Encryption (PBE)
pbeWithSHA1AndDES-CBCpbeWithSHA1AndRC2-CBC
warsztaty Bezpieczne dane w aplikacjach Java 58
PBE
hasło + sól→ funkcja skrótu→ klucz + wektorinicjalizacyjnyw PKCS #5 określono funkcje do generacji kluczaoraz wektora inicjalizacyjnego na podstawie wartościfunkcji skrótuklasa javax.crypto.spec.PBEKeySpec
warsztaty Bezpieczne dane w aplikacjach Java 59
Podpis cyfrowybazuje na algorytmach asymetrycznych i może byćużyty do:
uwierzytelnienia źródła danychuwierzytelnienia 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 dowolnejwiadomościz podpisu nie da się uzyskać klucza do podpisujest operacją trudną obliczeniowo (również dlawłaściciela klucza do podpisu) znalezienie dwóchwiadomości z tą samą wartością podpisu
warsztaty Bezpieczne dane w aplikacjach Java 60
Podpis cyfrowy w Java
klasa java.security.Signatureochrona integralności obiektów
SignedObject służy do przechowywaniapodpisanego obiektuw razie zmiany nie uda się weryfikacja obiektuobiekt 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 kluczgwarantuje autentyczność klucza
warsztaty Bezpieczne dane w aplikacjach Java 62
Certyfikacjawygenerowanie pary kluczystworzenie zgłoszenia certyfikacyjnego (ang.certificate request)
podpisany klucz publiczny wraz z informacjamiidentyfikującymi podmiotprzesłanie zgłoszenia do punktu rejestracjiweryfikacja danych podmiotu przez punkt rejestracjiCA wystawia certyfikatweryfikacja stworzonego certyfikatu przez podmiotpublikacja certyfikatów podmiotu i CA
warsztaty Bezpieczne dane w aplikacjach Java 63
Dane wrażliweczy konieczne jest ich przechowywanieczy konieczne jest ich ciągłe przechowywaniejak przechowywać dane wrażliwe
pojęcie tokenizacjiszyfrowanie danychusuwanie zbędnych danychwykorzystanie typów prostychprzechowywanie i używanie kluczy kryptograficznych
warsztaty Bezpieczne dane w aplikacjach Java 64
Dane kryptograficznenajlepiej nie trzymać kluczy tajnych woprogramowaniu i w pamięciklucze publiczne trzeba odpowiednio zabezpieczyćnie należy dopuszczać do zrzutów pamięci na dyskbezpieczniej jest przechowywać klucze w jednymmiejscu niż je przekazywać międzymodułami/obszarami pamięciuż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ększyminiż jej potrzebne – sama aplikacja też powinna jesprawdzaćstosowanie nośników kluczy, sprzętowe modułybezpieczeństwaszyfrowanie kluczy innymi kluczami (wrap/unwrap)wymiana kluczy sesyjnychwarsztaty Bezpieczne dane w aplikacjach Java 65
Przechowywanie kluczy w plikupliki z kluczami powinny być zawsze zaszyfrowaneklucz (hasło) szyfrujące może być wbudowane waplikację
możliwy automatyczny restart aplikacjiklucz szyfrujący można wydobyć z aplikacjilub użytkownik musi je podać podczas uruchomieniaaplikacji
utrudniony automatyczny restart aplikacjiwiększe bezpieczeństwoklucze będą jawnie używane w pamięci
warsztaty Bezpieczne dane w aplikacjach Java 66
RepozytoriaJCEKS – składowanie kluczy prywatnych, certyfikatóworaz kluczy symetrycznych; klucze prywatneszyfrowane 3DESJKS – składowanie kluczy prywatnych orazcertyfikatów; klucze prywatne są szyfrowanesłabszym algorytmem niż w JCEKSPKCS12 – zdefiniowany w standardzie PKCS #12, jegomożliwości są zależne od konkretnej implementacjinarzędzie keytool – umożliwia wykonywanieoperacji na repozytoriachklasa java.security.KeyStore
warsztaty Bezpieczne dane w aplikacjach Java 67
Tworzenie repozytoriumhttps://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 JARkeytool -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 TLSTLS (ang. Transport Layer Security)SSL (ang. Secure Sockets Layer)TLS 1.0 ≈ SSL 3.0wersje TLS 1.1 i TLS 1.2 są bezpieczniejszezaimplementowane w warstwie aplikacji w ramachprotokołu TCPzabezpiecza komunikację poprzez szyfrowanie iuwierzytelnienie w trybie MAC-then-Encrypttradycyjnie uwierzytelnienie oparte na certyfikatachX.509nie 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 SSLWyróżnia się trzy klasy certyfikatów:
DV (ang. Domain Validation, pol. walidacja domeny)weryfikacja prawa do domenyczęsto wystawiane automatycznie
OV (ang. Organization Validation, pol. walidacjaorganizacji)weryfikacja prawa do domenysprawdzenie tożsamości kupującego
EV (ang. Extended Validation, pol. rozszerzonawalidacja)szczegółowa weryfikacja wiarygodności kupującegowitryny wyróżnione w przeglądarkach
warsztaty Bezpieczne dane w aplikacjach Java 73
Chcesz wiedzieć więcej?
Szkolenia pozwalają na indywidualną pracę z każdymuczestnikiempracujemy w grupach 4-8 osobowychprogram może być dostosowany do oczekiwań grupyrozwiązujemy i odpowiadamy na indywidualnepytania uczestnikówmamy 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 wsystemach komputerowychKryptografia na platformie Java w praktyceProgramowanie kart Java CardProtokół SSL/TLSBezpieczny kod Java w praktyce w oparciu owytyczne CERT i Oracle
warsztaty Bezpieczne dane w aplikacjach Java 75
Do zobaczenia!
warsztaty Bezpieczne dane w aplikacjach Java 76