Bezpieczne dane w aplikacjach java

38
Bezpieczne dane w aplikacjach Java warsztaty Piotr Nazimek Bezpieczne dane dlaczego chcemy chronić dane i po co to robić jeśli wszyscy dzialamy 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

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