Zastosowanie bibliotek Java Cryptography Extension i Java Mail do szyfrowania poczty elektronicznej mgr inż. Piotr Kopniak Instytut Informatyki Wydział

Slides:



Advertisements
Podobne prezentacje
Infrastruktura kluczy publicznych
Advertisements

Kryptografia oraz infrastruktura PKI w pasywnych zabezpieczeniach
IDENTYFIKACJA UŻYTKOWNIKA W SIECI INTERNET
Poczta Elektroniczna Marcin DOBROSZEK Sebastian DUDKIEWICZ.
20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
SIECI KOMPUTEROWE WYKŁAD 8. BEZPIECZEŃSTWO SIECI
KRYPTOLOGIA =KRYPTOGRAFIA+KRYPTOANALIZA
Autor Roman Jędras Prowadzący: dr inż. Antoni Izworski Przedmiot:
Bezpieczeństwo i podpis elektroniczny
SSL - założenia i realizacja Prezentacja na potrzeby projektu E-Bazar Grupa R&D.
Poj ę cia Sieciowe. IMAP-to internetowy protokół pocztowy zaprojektowany IMAP-to internetowy protokół pocztowy zaprojektowany POP3-to protokół internetowy.
Pojęcia sieciowe.
PHP vs. ASP PHP – lider wydajności wśród języków skryptowych.
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
SSL - protokół bezpiecznych transmisji internetowych
Kryptografia i kryptoanaliza
PKI, OPIE Auth Mateusz Jasiak.
PKI (Public Key Infrastructure) Hasła jednorazowe (OPIE, OTP, S\Key)
Korespondencja elektroniczna
Kryptografia – elementarz cześć I
PROTOKOŁY OBSŁUGI POCZTY ELEKTRONICZNEJ
Techniczne aspekty realizacji podpisu cyfrowego z zastosowaniem algorytmu RSA mgr inż. Wojciech Psik Zespół Szkół Elektronicznych i Ogólnokształcących.
Ochrona danych wykład 3.
Piotr Kasprzyk Instytut Informatyki Politechniki Śląskiej
Dążenie do odkrywania tajemnic tkwi głęboko w naturze człowieka, a nadzieja dotarcia tam, dokąd inni nie dotarli, pociąga umysły najmniej nawet skłonne.
Artur Spulnik, Aleksandra Otremba
Zagrożenia bezpieczeństwa można podzielić na następujące klasy:
Uwierzytelnianie i autoryzacja System Użytkowników Wirtualnych Michał Jankowski Paweł Wolniewicz
Komputery w finansach Wykład I
Galileo - Knowledge Testing Service e-MSoft Artur Majuch.
PKI – a bezpieczna poczta
Błażej Miśkiewicz Grupa domowa w Windows 7 Błażej Miśkiewicz MCT MCP MCSA MCTS MCITP.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Cecylia Szymanska - Ban | Education Lead Microsoft.
POJĘCIA ZWIĄZANE Z SIECIĄ.
Integracja aplikacji Wykład 2
Protokół Komunikacyjny
MODEL WARSTWOWY PROTOKOŁY TCP/IP
Wykonał: mgr inż. Maksymilian Szczygielski
Zastosowania kryptografii
Pojęcia związane z siecią
ZASTOSOWANIE KRYPTOGRAFII W SZYFROWANIU DANYCH
Programowanie obiektowe – zastosowanie języka Java SE
Podpis elektroniczny Między teorią a praktyką
Programowanie sieciowe w Javie
Szyfrowanie i deszyfrowanie
SZYFR BLOKOWY: Przetwarza bloki danych
Wymiana podstawy oraz sprawdzanie autentyczności partnera. Algorytm wymiany małego klucza używaniem metody Diffiego - Hellmana.
Poczta elektroniczna "electronic mail") A.Ś.
JĘZYKI ASSEMBLEROWE ..:: PROJEKT ::..
SZYFROWANIE Kacper Nowak.
Andrzej Majkowski 1 informatyka +. 2 Bezpieczeństwo protokołu HTTP Paweł Perekietka.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
1 Kryptografia-0 -zachowanie informacji dla osób wtajemniczonych -mimo że włamujący się ma dostęp do informacji zaszyfrowanej -mimo że włamujący się zna.
Aby do danych nie dostała się postronna osoba ( hacker ) stosuje się różne metody kryptograficzne.
 Kryptografia - dziedzina wiedzy obejmująca zagadnienia związane z ukrywaniem wiadomości (danych) przed nieupoważnionymi podmiotami przy pomocy ich przekształcania.
Kompresja i Szyfrowanie
INTERNET jako „ocean informacji”
7. PODSTAWY KRYPTOGRAFII
Projekt firmowej sieci Wi-Fi
Bartosz Pawlak Wiktor Paliwoda Bezpieczeństwo Systemów Operacyjnych IMAP vs POP.
Elementy przeglądarki internetowej Pasek menu Pasek kart Pasek adresowy Pasek wyszukiwania Okno z zawartością strony internetowej Zakładki (ulubione)
PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES
SIECI KOMPUTEROWE WYKŁAD 8. BEZPIECZEŃSTWO SIECI
SIECI KOMPUTEROWE WYKŁAD 8. BEZPIECZEŃSTWO SIECI
Linux ssh.
KRYPTOGRAFIA KLUCZA PUBLICZNEGO WIKTOR BOGUSZ. KRYPTOGRAFIA KLUCZA PUBLICZNEGO Stosując metody kryptograficzne można zapewnić pełną poufność danych przechowywanych.
Programowanie obiektowe – zastosowanie języka Java SE
Korespondencja elektroniczna
Poczta elektroniczna "electronic mail") A.Ś.
Zapis prezentacji:

Zastosowanie bibliotek Java Cryptography Extension i Java Mail do szyfrowania poczty elektronicznej mgr inż. Piotr Kopniak Instytut Informatyki Wydział Elektrotechniki i Informatyki Politechnika Lubelska

mgr inż. Piotr Kopniak Plan prezentacji Aspekty ochrony informacji Architektura kryptograficzna w Javie Budowa zabezpieczonej wiadomości pocztowej w Javie Przesyłanie poczty - Java Mail Wnioski i dalsze badania

mgr inż. Piotr Kopniak Aspekty ochrony informacji Ochrona informacji polega na zapewnieniu: Poufności – informacja powinna być tajna, nie możliwa do odczytania dla osób nie powołanych. Poufność zapewniana jest przez szyfrowanie (np.: symetryczne - DES, Blowfish, asymetryczne - RSA, ElGamal). Integralności – potwierdzenie, że przesyłane dane nie są zmodyfikowane podmienione lub uszkodzone przez intruza. Potwierdzanie, że dane są prawdziwe możliwe jest dzięki funkcjom skrótu (np.: MD5, SHA-1). Autentyczności - oznacza, że przesłane dane rzeczywiście pochodzą od nadawcy który podaje się za ich autora. Kryptografia daje możliwość udowodnienia tożsamości za pomocą certyfikatów (np.: X.509) i podpisów cyfrowych (np.: DSA).

mgr inż. Piotr Kopniak Szyfrowanie symetryczne i asymetryczne

mgr inż. Piotr Kopniak Podpis elektroniczny

mgr inż. Piotr Kopniak Architektura kryptograficzna w Javie Architektura kryptograficzna środowiska Javy opiera się na rozdziale projektu i implementacji. Całokształt tworzenia klas kryptograficznych, czyli projekt, określany jest przez strukturę Java Cryptography Architecture (JCA). Implementacja wymaga stworzenia własnych klas dziedziczących z klas konceptualnych i jest dołączana z wykorzystaniem koncepcji dostawców (ang. cryptographic providers). Java dystrybuowana jest z dwoma domyślnymi dostawcami o nazwach SUN i SunJCE (JCE). Oprogramowanie biblioteczne związane z autentykacją i silną kryptografią zawarte jest obecnie w standardowej dystrybucji języka Java (od wersji 1.3). Klasy służące do tworzenia bezpiecznych programów w Javie zawiarte są w pakietach: java.security, java.security.cert, java.security.interfaces, java.security.spec, javax.crypto, javax.crypto.interfaces i javax.crypto.spec

mgr inż. Piotr Kopniak Dodanie dostawcy kryptograficznego 1. Edycja ręczna pliku właściwości bezpieczeństwa java.security znajdujący się w katalogu (katalog domowy Javy)/JRE/lib/security. Dodanie dostawcy polega na dopisaniu linii: security.provider. =, np.: security.provider.6=cryptix.jce.provider.CryptixCrypto 2. Dodanie dostawcy z poziomu programu: java.security.Provider p = new cryptix.jce.provider.CryptixCrypto(); java.security.Security.addProvider(p); Architektura JCA jest oparta na klasach abstrakcyjnych i statycznych metodach fabrykujących. Taka budowa umożliwia używanie nowo dodanych algorytmów, po rejestracji dostawcy, identycznie jak algorytmów dostarczonych przez producenta.

mgr inż. Piotr Kopniak Algorytmy kryptograficzne Algorytmy dostawców SUN i JCE –Szyfry symetryczne: Blowfish, DES, DESede, PBEwithMD5andDES, PBEwithMD5andDESede –Funkcje skrótu: MD2, MD5, SHA-1, HMAC-MD5, HMAC-SHA1 –Algorytm uzgadniania klucza: Diffle-Hellman –Podpisy elektroniczne: DSA, SHA1withDSA, MD2withRSA, MD5withRSA, SHA1withRSA Dodatkowe algorytmy dostawcy Criptix JCE –Szyfry symetryczne: CAST5, IDEA, MARS, RC2, RC4, RC6, Rijndael, Serpent, SKIPJACK, Square, Twofish –Szyfry asymetryczne: RSAES-OAEP, RSA/PKCS#1, ElGamal/PKCS#1 –Funkcje skrótu: MD4, RIPEMD-128, RIPEMD-160, SHA-0, SHA- 256/384/512, Tiger, HMAC-MD2, HMAC-MD4, HMAC-RIPEMD-128, HMAC-RIPEMD-160, HMAC-SHA-0, HMAC-Tiger –Podpisy elektroniczne: RawDSA, RSASSA-PKCS1, RSASSA-PSS

mgr inż. Piotr Kopniak Budowa zabezpieczonej wiadomości

mgr inż. Piotr Kopniak Metoda szyfrująca (1) Nazwa nadawcy (X.500) KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("c:/windows/.keystore"),new String("StoreStore").toCharArray()); java.security.cert.Certificate cert = ks.getCertificate(ourKeyAlias); String ourDistName = ((X509Certificate)cert).getSubjectDN().toString(); Podpis elektroniczny (SHA-1 + RSA) byte[] plain_byte = plain_txt.getBytes(); PrivateKey privateKey = (PrivateKey)ks.getKey(ourKeyAlias,ourPassword); Signature sign = Signature.getInstance("SHA1withRSA"); sign.initSign(privateKey); sign.update(plain_byte); byte[] plainSign = sign.sign();

mgr inż. Piotr Kopniak Metoda szyfrująca (2) Szyfrowanie symetryczne treści (DESede) KeyGenerator kg = KeyGenerator.getInstance("DESede"); kg.init(new SecureRandom()); Key sessionKey = kg.generateKey(); Cipher cph = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cph.init(Cipher.ENCRYPT_MODE,sessionKey); byte[] cipher_byte = cph.doFinal(plain_byte); byte[] iv = cph.getIV(); Szyfrowanie asymetryczne klucza sesyjnego (RSA) java.security.cert.Certificate cert = ks.getCertificate(cert_alias); cph = Cipher.getInstance("RSA/ECB/PKCS#1"); cph.init(Cipher.ENCRYPT_MODE, cert); byte[] cipherKey = cph.doFinal(sessionKey.getEncoded());

mgr inż. Piotr Kopniak Całość wiadomości ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); DataOutputStream dataOutput = new DataOutputStream(byteOutput); dataOutput.writeUTF(ourDistName); dataOutput.writeInt(iv.length); dataOutput.write(iv); dataOutput.writeInt(cipherKey.length); dataOutput.write(cipherKey); dataOutput.writeInt(plainSign.length); dataOutput.write(plainSign); dataOutput.writeInt(cipher_byte.length); dataOutput.write(cipher_byte); byte[] cipher_byte = byteOutput.toByteArray();

mgr inż. Piotr Kopniak Metoda deszyfrująca Implementacja metody deszyfrującej polega na wykonaniu czynności podobnych jak przy szyfrowaniu tylko w odwrotnej kolejności, tzn.: –Odczytanie klucza prywatnego odbiorcy z jego magazynu kluczy –Deszyfrowanie klucza sesyjnego za pomocą klucza prywatnego odbiorcy –Deszyfrowanie wiadomości za pomocą klucza sesyjnego Deszyfrowanie polega na zainicjowaniu szyfru w trybie deszyfrowania DECRYPT_MODE kluczem publicznym nadawcy przy deszyfrowaniu klucza sesyjnego i kluczem sesyjnym przy deszyfrowaniu wiadomości. Metoda deszyfrująca dodatkowo weryfikuje tożsamość nadawcy PublicKey theirPublic = xCert.getPublicKey(); Signature sign = Signature.getInstance("SHA1withRSA"); sign.initVerify(theirPublic); sign.update(plain_byte); boolean isOk = sign.verify(plainSign);

mgr inż. Piotr Kopniak Biblioteka Java Mail JavaMail API jest to zbiór klas do budowy aplikacji przesyłających pocztę elektroniczną oraz inne wiadomości, który umożliwia tworzenie aplikacji niezależnych od platformy systemowej, dostawcy Internetu i protokołu komunikacyjnego. Biblioteka JavaMail dystrybuowana jest jako opcjonalny pakiet standardowej platformy Java 2 (J2SE) oraz jako integralna część platformy Java 2 Entrprise Edition (J2EE). Obsługiwane protokoły i standardy zaimplementowane przez firmę Sun: –SMTP (Simple Mail Transfer Protocol) –POP (Post Office Protocol) –IMAP (Internet Message Access Protocol) –MIME (Multipurpose Internet Mail Extension)

mgr inż. Piotr Kopniak Java Mail - wysyłanie poczty String host = pluton.pol.lublin.pl; String from = String to = Properties props = System.getProperties(); props.put("mail.smtp.host", host); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(Szyfrowana poczta"); message.setText((new BASE64Encoder()).encode(byteArr)); Transport.send(message);

mgr inż. Piotr Kopniak Java Mail - odbieranie poczty String host = pluton.pol.lublin.pl; String username = janek; String password = haslo; Properties prop = new Properties(); Session session = Session.getDefaultInstance(prop, null); Store store = session.getStore("pop3"); store.connect(host, username, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages(); for (int i=0, n=message.length; i<n; i++) { System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject() + \n + message[i].writeTo(System.out); ) folder.close(false); store.close();

mgr inż. Piotr Kopniak Przeprowadzone badania Badanie szybkości szyfrowania algorytmów symetrycznych i asymetrycznych Badanie czasu brutalnego łamania szyfru DES poprzez przeszukanie połowy przestrzeni kluczy –Ilość kombinacji 2^56: –Czas połowy możliwych kluczy: ms lat

mgr inż. Piotr Kopniak Szyfrowanie symetryczne i asymetryczne

mgr inż. Piotr Kopniak Wnioski i dalsze badania Wnioski Java jest językiem o bogatej funkcjonalności standardowej i językiem otwartym, który nadaje się do zabezpieczania danych z wykorzystywaniem szyfrowania, certyfikatów i podpisów elektronicznych. Ze względu na to, że Java jest językiem interpretowanym nie nadaje się do implementacji kryptoanalitycznych. Atak brutalny na szyfr DES zająłby lat na komputerze z procesorem 1 GHz. Algorytmy szyfrujące asymetryczne są ok. 10 razy wolniejsze od symetrycznych. Dalsze badania Poprawa łączenia szyfrowanych bloków przy szyfrowaniu algorytmem RSA Stworzenie implementacji znanych metod kryptoanalitycznych, które mogą posłużyć do efektywniejszych testów szyfrowania oraz budowy aplikacji kryptoanalitycznych.

Ocena efektywności zastosowania bibliotek Java Cryptography Extension i Java Mail do szyfrowania poczty elektronicznej Dziękuję za uwagę mgr inż. Piotr Kopniak Instytut Informatyki Wydział Elektrotechniki i Informatyki Politechnika Lubelska