Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałJowita Cybulski Został zmieniony 11 lat temu
1
Zastosowanie bibliotek Java Cryptography Extension i Java Mail do szyfrowania poczty elektronicznej mgr inż. Piotr Kopniak Instytut Informatyki Wydział Elektrotechniki i Informatyki Politechnika Lubelska
2
mgr inż. Piotr Kopniak 20042 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
3
mgr inż. Piotr Kopniak 20043 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).
4
mgr inż. Piotr Kopniak 20044 Szyfrowanie symetryczne i asymetryczne
5
mgr inż. Piotr Kopniak 20045 Podpis elektroniczny
6
mgr inż. Piotr Kopniak 20046 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
7
mgr inż. Piotr Kopniak 20047 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.
8
mgr inż. Piotr Kopniak 20048 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
9
mgr inż. Piotr Kopniak 20049 Budowa zabezpieczonej wiadomości
10
mgr inż. Piotr Kopniak 200410 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();
11
mgr inż. Piotr Kopniak 200411 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());
12
mgr inż. Piotr Kopniak 200412 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();
13
mgr inż. Piotr Kopniak 200413 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);
14
mgr inż. Piotr Kopniak 200414 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)
15
mgr inż. Piotr Kopniak 200415 Java Mail - wysyłanie poczty String host = pluton.pol.lublin.pl; String from = jan.kowalski@pluton.pol.lublin.pl; String to = piotr.nowak@sthmail.prv; 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);
16
mgr inż. Piotr Kopniak 200416 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();
17
mgr inż. Piotr Kopniak 200417 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:72 057 594 037 927 936 –Czas połowy możliwych kluczy:102 129 511 935 508 480 ms 3 238 506 lat
18
mgr inż. Piotr Kopniak 200418 Szyfrowanie symetryczne i asymetryczne
19
mgr inż. Piotr Kopniak 200419 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 3 238 505 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.
20
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.