Download - Fejlett Programoz ási Technikák 2
![Page 1: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/1.jpg)
1
Fejlett Programozási Technikák 2.
15/8
![Page 2: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/2.jpg)
2
Fejlett Programozási Technológiák 2.
Az előző előadás tartalma: Java Applet
Felépítése Tulajdonságai Paraméterátadás
JDBC Típusai Kapcsolat típusok Statement objektumok RecordSet Tranzakciók
![Page 3: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/3.jpg)
3
Fejlett Programozási Technológiák 2.
Források
http://www.javaworld.com/javaworld/jw-04-2000/jw-0428-security.html http://www.cacr.math.uwaterloo.ca/hac/ http://java.sun.com/security/ http://www.javaworld.com/javaworld/jw-09-2002/jw-0913-jaas.html http://java.sun.com/sfaq/verifier.html http://ei.cs.vt.edu/~wwwbtb/book/chap14/index.html http://www.cab.u-szeged.hu/WWW/java/kiss/security.html#ch3.1 http://www2.tw.ibm.com/developerWorks/tutorial/pdf/j-sec1-a4.pdf http://www2.tw.ibm.com/developerWorks/tutorial/pdf/j-sec2-a4.pdf
![Page 4: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/4.jpg)
4
Fejlett Programozási Technológiák 2.
A mai előadás tartalma: Számítógépes biztonság Jáva és a biztonság
Biztonsági architektúra
Titkosító architektúra JCE JAAS JSSE GSSE
![Page 5: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/5.jpg)
5
Fejlett Programozási Technológiák 2.
Számítógépes biztonság Mit jelent a számítógépes biztonság? Korlátlan erőforrással bármely rendszer feltörhető. Cél: Olyan rendszer kiépítése melynek feltörése
sokkal nagyobb energia mint a benne fellelhető információ értéke
A bonyolult rendszer nem biztos, hogy biztonságosabb.
A biztonsági szempontok a rendszer tervezésének alapvető paraméterei közé tartoznak.
![Page 6: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/6.jpg)
6
Fejlett Programozási Technológiák 2.
Támadás típusok Kategóriák:
Titkosság elleni támadás Integritás elleni támadásRendelkezésre állás elleni támadás
Gyakori támadás fajták:Nyers erő (brute force)Trójai (trojan horse)Ember középen (man-in-the-middle)
![Page 7: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/7.jpg)
7
Fejlett Programozási Technológiák 2.
Feltörhetőség 1977: Diffie and Hellman, 20 millió gép, 10 óra
alatt 1987: Diffie and Hellman, 200,000 gép, 10 óra
alatt 1993: Diffie and Hellman, M. Wiener, kulcs kereső
IC, 5760 IC, $10.50/IC, 1.5 nap alatt 1997: DES challenges I, DESCHALL, 96 nap 1998: DES challenges II-1, distributed.net, 41 nap 1998: DES challenges II-2, Electronic Frontier
Foundation, 56 nap 1999: DES challenges III, distributed.net, 22 nap
![Page 8: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/8.jpg)
8
Fejlett Programozási Technológiák 2.
Jáva támadások1. Trükkös kód2. Régi, hack-elt javac3. Class fájlok átírása (CGI
jogosultságok)4. Programok válogatása5. Kapcsolat eltérítése
(spoofing) (aláírt applet)6. JVM bug
![Page 9: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/9.jpg)
9
Fejlett Programozási Technológiák 2.
Áttekintés
![Page 10: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/10.jpg)
10
Fejlett Programozási Technológiák 2.
Jáva és a biztonság/1 Nyílt:
A fordító és a virtuális gép forrása is hozzáférhető, megvizsgálható Jáva nyelv:
Nincsenek mutatók Minden primitív típus adott méretű Hozzáférési szintek Final Hibakezelés
Fordító: Az utasítások sorrendje fordító független Bájtkód Erősen típusos, fordításkor szigorú ellenőrzés
Objektum típusátformázás ellenőrzött (casting) Minden metódus, tagváltozó hivatkozás ellenőrzésre kerül (pl.: private) Primitív adattípusok nem keverhetőek a referencia típusokkal (1.5 auto
boxing)
![Page 11: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/11.jpg)
11
Fejlett Programozási Technológiák 2.
Jáva és a biztonság/2 Futtató környezet:
Osztály betöltő Bájt kód ellenőrző
Verzió problémák, Bináris kompatibilitás
Gonosz másik oldal (trükkös fordító, …)
Biztonsági Menedzser: Az erőforrások elérésének ellenőrzése Kód alapú Felhasználó alapú
Szemét gyűjtő Keretrendszerek, API-k
![Page 12: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/12.jpg)
12
Fejlett Programozási Technológiák 2.
Osztály betöltő Típusai:
Ősi (primordial) Java osztálybetöltő Saját osztály betöltőt is írhatunk (pl.: címtárból történő betöltésre…)
Feladatai: Az osztály fájlok megtalálása (megfelelő sorrendben, biztonsági okokból)
Böngésző értelmezi a html kódot Indít egy JVM-et A JVM meghívja az Applet osztály betöltőt A betöltő megpróbálja a helyi lemezről betölteni (java., …) (ősi) Végigkeresi a classpath-ot (URLClassLoader) Megpróbálja letölteni a webszerverről (Bönégsző specifikus class loader,
vagy URLClassLoader) A biztonsági beállítások lekérdezése Egy osztály objektum definiálása megfelelő jogosultságokkal A névterek kezelése
![Page 13: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/13.jpg)
13
Fejlett Programozási Technológiák 2.
Bájt kód ellenőrző Class file verifier Az alap Java osztályokat nem bántja (esetenként a helyi lemezen lévő
fájlokat sem) Problémák:
Illegális mutató (egy objektumot más objektumként használunk) Illegális bájtkód utasítások Illegális paraméterek kiszűrése Verem túlcsordulás Illegális cast Láthatóság megsértése
A fentieket megoldhatná a JVM csak lassabb lenne a végrehajtás Folyamat:
Osztályállomány szintaktikus ellenőrzése Osztályállomány összefüggéseinek ellenőrzése Az utasításfolyam ellenőrzése Külső hivatkozások ellenőrzése
![Page 14: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/14.jpg)
14
Fejlett Programozási Technológiák 2.
Példa
import java.awt.*;import java.applet.*;public class TestVerify extends Applet{public static void main(String[] args){System.out.println("3 + 4 = " + add());}static int add(){int a,b,c;a = 3;b = 4; return (a+b);}public void paint(Graphics g){g.drawString("3 + 4 = " + add(), 10, 20);}}
Compiled from TestVerify.javapublic class TestVerify extends java.applet.Applet {public TestVerify();static int add();public static void main(java.lang.String[]);public void paint(java.awt.Graphics);}Method TestVerify()0 aload_01 invokespecial #9 <Method java.applet.Applet()>4 returnMethod int add()0 iconst_31 istore_02 iconst_43 istore_14 iload_05 iload_16 iadd7 ireturn
Exception in thread "main" java.lang.VerifyError: (class: TestVerify,method: add signature: ()I) Accessing value from uninitialized register 1
![Page 15: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/15.jpg)
15
Fejlett Programozási Technológiák 2.
Osztályállomány szintaktikus ellenőrzése
ClassFile { u4 magic; (0xCAFEBABE) u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; }
Aláírás ellenőrzés A struktúrák hosszának ellenőrzése Constant pool ellenőrzése
![Page 16: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/16.jpg)
16
Fejlett Programozási Technológiák 2.
Osztályállomány összefüggéseinek ellenőrzése
Olyan ellenőrizések melyeket a kód értelmezése nélkül meg lehet tenni
Final Superclass Konstans Tároló
![Page 17: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/17.jpg)
17
Fejlett Programozási Technológiák 2.
Az utasításfolyam ellenőrzése Adatfolyam ellenőrzés minden metóduson, a program
egy-egy pontban az elérési útvonaltól függetlenül: A stack ugyanolyan méretű és ugyanazokat az
objektumokat tartalmazza A regiszterek csak akkor használtak, ha megfelelő típust
tartalmaznak A metódusok megfelelő paraméterekkel hívódnak meg A mezők megfelelő típusú értékkel módosulnak
A kódot statikusan ellenőrzi (nem futtatja) Eredménye:
Futásidejű viselkedés bizonyíthatóan biztonságos Futásidejű viselkedés bizonyíthatóan nem biztonságos Futásidejű viselkedés sem nem bizonyíthatóan biztonságos
sem nem bizonyíthatóan nem biztonságos
![Page 18: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/18.jpg)
18
Fejlett Programozási Technológiák 2.
Külső hivatkozások ellenőrzése Az előző menetekben nem ellenőrizte a külső
osztályok és azok mezőinek valódiságát Futás közben ellenőrzi a fentieket amikor
betöltődnek az osztályok
![Page 19: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/19.jpg)
19
Fejlett Programozási Technológiák 2.
Biztonsági Menedzser
Futás idejű biztonsági ellenőrzés Java2 előtt egy absztrakt osztály volt
(főleg a böngészők implementálták)Homokozó
java.lang.SecurityManagerBiztonsági rendszabály alapú (policy based)
Természetesen ez is bővíthető
![Page 20: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/20.jpg)
20
Fejlett Programozási Technológiák 2.
Hely függő (homokozó modell) Java 1.0 Nagyon szigorú
a távoli kódokkal Nincs kivétel
![Page 21: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/21.jpg)
21
Fejlett Programozási Technológiák 2.
Kód alapú (digitálisan aláírt)
Java 1.1 A digitálisan aláírt kód
alapján eldönthetjük, hogy milyen jogosult-sággal akarjuk futtatni
Probléma: Érdekes játék, háttérben a bankkártya adatokat
![Page 22: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/22.jpg)
22
Fejlett Programozási Technológiák 2.
Finomhangolás
Java2 Aláírás/URL alapú Távoli és helyi kódra is
vonatkozhat Policy fájl Adott jogosultság adott
kódrésznek adott erő-forráshoz
![Page 23: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/23.jpg)
23
Fejlett Programozási Technológiák 2.
Védelmi tartomány
Rendszer Tartomány Alkalmazás tartományok
PrincipalPolicy fájlgrant signedBy "sysadmin", codeBase "file:/home/sysadmin/*" {
permission java.security.SecurityPermission "Security.insertProvider.*";
permission java.security.SecurityPermission "Security.removeProvider.*";
permission java.security.SecurityPermission "Security.setProperty.*";
};
![Page 24: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/24.jpg)
24
Fejlett Programozási Technológiák 2.
Lexikális szűkítés Csak az adott kódrésznek adunk jogosultságot Minden érzékeny kód egy helyre gyűjthető java.security.AccessControler.doPrivileged()
![Page 25: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/25.jpg)
25
Fejlett Programozási Technológiák 2.
Futás idejű hozzáférés vezérlés I/O, … SecurityManager.checkPermission() A szál jogosultságát ellenőrzi
A hívási veremben minden metódust ellenőriz (az általuk használt objektumokat)
A legkisebb közös jogosultság Használata:
java -Djava.security.manager HelloWorld java.lang.System
![Page 26: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/26.jpg)
26
Fejlett Programozási Technológiák 2.
Áttekintés
![Page 27: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/27.jpg)
27
Fejlett Programozási Technológiák 2.
Eszközök Jar Jarsigner Keytool
Keystore policytool
![Page 28: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/28.jpg)
28
Fejlett Programozási Technológiák 2.
Kód biztonság Bájt kód
Sok információt tartalmaz Könnyű visszafejteni
Eszköz: Mocha, …
Algoritmus másolás Érzékeny információ (passwd, …) Biztonsági rendszer megismerése …
![Page 29: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/29.jpg)
29
Fejlett Programozási Technológiák 2.
Megoldás Obfuscator
A változó, metódus neveket lecseréli a constant pool-ban Védett nevek használata (if, for, …)
Hosing Értelmetel kódokat szúr be (pl.: pop, push) Nagyban rontja a JVM JIT hatékonyságát
Írjunk olyan kódot melynél nem baj ha más is elolvassa
![Page 30: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/30.jpg)
30
Fejlett Programozási Technológiák 2.
J2SE 1.5 biztonsági eszközök JCA/JCE JSSE Java CertPath JAAS/JGSS
![Page 31: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/31.jpg)
31
Fejlett Programozási Technológiák 2.
JCA/JCE
JCA Titkosító
architektúra Alap titkosítás Export korlátozás
mentes Aláírások,
kivonat, ..
JCE Titkosító
architektúra bővítmény
Fejlett titkosítás Export korlátozás Titkosítók
![Page 32: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/32.jpg)
32
Fejlett Programozási Technológiák 2.
Titkosító architektúra Titkosító eljárások:
Szimmetrikus kulcsú titkosítás (bulk encripiton) DES DEA RC4 AES
Aszimmetrikus kulcsú titkosítás (public key encripition) RSA
Kivonatolás MD5
![Page 33: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/33.jpg)
33
Fejlett Programozási Technológiák 2.
Kivonatolás Kulcs nélkül
Algoritmusok: MD2, MD5 (128 bit) SHA-1 (160 bit) SHA-256,SHA-382, SHA-512
Használata:
MessageDigest.getInstance("MD5")
.update(plaintext)
.digest()
Kulcs használatával (MAC) Algoritmusok:
HMAC/SHA-1 HMAC/MD5
Használata:KeyGenerator.getInstance("HmacMD5"
).generateKey()Mac.getInstance("HmacMD5").init(MD5key).update(plaintext).doFinal()
![Page 34: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/34.jpg)
34
Fejlett Programozási Technológiák 2.
Példa kivonatolóimport java.security.*;import javax.crypto.*;public class MessageDigestExample {public static void main (String[] args) throws Exception {if (args.length !=1) {System.err.println("Usage: java MessageDigestExample text");System.exit(1);}byte[] plainText = args[0].getBytes("UTF8");MessageDigest messageDigest = MessageDigest.getInstance("MD5");messageDigest.update( plainText);System.out.println( "\nDigest: " );System.out.println( new String( messageDigest.digest(), "UTF8") );}}
![Page 35: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/35.jpg)
35
Fejlett Programozási Technológiák 2.
Példa MACimport java.security.*;import javax.crypto.*;public class MessageAuthenticationCodeExample {public static void main (String[] args) throws Exception {if (args.length !=1) {System.err.println("Usage: java MessageAuthenticationCodeExample
text");System.exit(1);}byte[] plainText = args[0].getBytes("UTF8");System.out.println( "\nStart generating key" );KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");SecretKey MD5key = keyGen.generateKey();System.out.println( "Finish generating key" );Mac mac = Mac.getInstance("HmacMD5");mac.init(MD5key);mac.update(plainText);System.out.println( "\n" + mac.getProvider().getInfo() );System.out.println( "\nMAC: " );System.out.println( new String( mac.doFinal(), "UTF8") );}}
![Page 36: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/36.jpg)
36
Fejlett Programozási Technológiák 2.
Titkosítás Típusai:
Adatkezelés Blokk titkosító (block cipher)
64 bit Padding (No padding,PKCS5,OAEP, SSL3)
Bit titkosító (stream cipher)
Algoritmus: Nyilvános kulcsú Titkos kulcsú
Működési módok ECB (Electronic Code Book) CBC (Cipher Block Chaining) CFB (Cipher Feedback Mode) OFB (Output Feedback Mode) PCBC (Propagating Cipher Block Chaining)
![Page 37: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/37.jpg)
37
Fejlett Programozási Technológiák 2.
Szimmetrikus titkosítás Algoritmusok:
DES (Data Encription Standard) – 54 bit TriplDES – 112 bit AES (Advanced Encription Standard) – 128,192,256 bit RC2,RC4,RC5 Blowfish – 32 - 448 bit PBE (Password Based Encryption)
Használatuk: KeyGenerator.getInstance("DES"), .init(56), .generateKey() Cipher.getInstance("DES/ECB/PKCS5Padding") .init(Cipher.ENCRYPT_MODE, key) .doFinal(plainText) .init(Cipher.DECRYPT_MODE, key): .doFinal(cipherText)
![Page 38: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/38.jpg)
38
Fejlett Programozási Technológiák 2. import java.security.*;import javax.crypto.*;public class PrivateExample {public static void main (String[] args) throws Exception {if (args.length !=1) {System.err.println("Usage: java PrivateExample text");System.exit(1);}byte[] plainText = args[0].getBytes("UTF8");System.out.println( "\nStart generating DES key" );KeyGenerator keyGen = KeyGenerator.getInstance("DES");keyGen.init(56);Key key = keyGen.generateKey();System.out.println( "Finish generating DES key" );Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");System.out.println( "\n" + cipher.getProvider().getInfo() );System.out.println( "\nStart encryption" );cipher.init(Cipher.ENCRYPT_MODE, key);byte[] cipherText = cipher.doFinal(plainText);System.out.println( "Finish encryption: " );System.out.println( new String(cipherText, "UTF8") );System.out.println( "\nStart decryption" );cipher.init(Cipher.DECRYPT_MODE, key);byte[] newPlainText = cipher.doFinal(cipherText);System.out.println( "Finish decryption: " );System.out.println( new String(newPlainText, "UTF8") );}}
![Page 39: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/39.jpg)
39
Fejlett Programozási Technológiák 2.
Aszimmetrikus titkosítás Tipikus kulcs hosszúság 1024 bit 100, 1000 –szer lassabb mint a szimmetrikus Algoritmusok:
RSA Diffie-Hellman (kulcs csere)
Használata: KeyPairGenerator.getInstance("RSA")
.initialize(1024) .generateKeyPair():
Cipher.getInstance("RSA/ECB/PKCS1Padding") .init(Cipher.ENCRYPT_MODE, key.getPublic()) .doFinal(plainText) .init(Cipher.DECRYPT_MODE, key.getPrivate()) .doFinal(cipherText)
![Page 40: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/40.jpg)
40
Fejlett Programozási Technológiák 2. import java.security.*;import javax.crypto.*;public class PublicExample {public static void main (String[] args) throws Exception {if (args.length !=1) {System.err.println("Usage: java PublicExample text");System.exit(1);}byte[] plainText = args[0].getBytes("UTF8");System.out.println( "\nStart generating RSA key" );KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");keyGen.initialize(1024);KeyPair key = keyGen.generateKeyPair();System.out.println( "Finish generating RSA key" );Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");System.out.println( "\n" + cipher.getProvider().getInfo() );System.out.println( "\nStart encryption" );cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());byte[] cipherText = cipher.doFinal(plainText);System.out.println( "Finish encryption: " );System.out.println( new String(cipherText, "UTF8") );System.out.println( "\nStart decryption" );cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());byte[] newPlainText = cipher.doFinal(cipherText);System.out.println( "Finish decryption: " );System.out.println( new String(newPlainText, "UTF8") );}}
![Page 41: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/41.jpg)
41
Fejlett Programozási Technológiák 2.
Digitális aláírások Tipikusan hash+asszimmetrikus titkosítás Módszerek:
Barkácsolós Egyszerű
Algoritmusok: MD2/RSA MD5/RSA SHA1/DSA SHA1/RSA
Használatuk: KeyPairGenerator.getInstance("RSA")
.initialize(1024) .generateKeyPair()
Cipher.getInstance("MD5WithRSA") .initSign(key.getPrivate()) .update(plainText) .sign() .initVerify(key.getPublic()) and .verify(signature):
![Page 42: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/42.jpg)
42
Fejlett Programozási Technológiák 2.
Példaimport java.security.*;import javax.crypto.*;public class DigitalSignature2Example {public static void main (String[] args) throws Exception {if (args.length !=1) {System.err.println("Usage: java DigitalSignature1Example text");System.exit(1);}byte[] plainText = args[0].getBytes("UTF8");System.out.println( "\nStart generating RSA key" );KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");keyGen.initialize(1024);KeyPair key = keyGen.generateKeyPair();System.out.println( "Finish generating RSA key" );Signature sig = Signature.getInstance("MD5WithRSA");sig.initSign(key.getPrivate());sig.update(plainText);byte[] signature = sig.sign();System.out.println( sig.getProvider().getInfo() );System.out.println( "\nSignature:" );System.out.println( new String(signature, "UTF8") );System.out.println( "\nStart signature verification" );sig.initVerify(key.getPublic());sig.update(plainText);try {if (sig.verify(signature)) {System.out.println( "Signature verified" );} else
System.out.println( "Signature failed" );} catch (SignatureException se) {System.out.println( "Signature failed" );}}}
![Page 43: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/43.jpg)
43
Fejlett Programozási Technológiák 2.
Digitális igazolványok Hitelesító Hatóság - certificate authority (CA)
Certificate Revocation Lists (CRL)
Típusok:X.509
Tárolás:Keystore
![Page 44: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/44.jpg)
44
Fejlett Programozási Technológiák 2.
Kulcstároló (Keystore) java.secutity keytool -> .keystore A privát kulcsokat és a megfelelő bizonyítványokat
tároljuk benne Jelszóval van titkosítva (Java Key Store) Minden kulcs külön jelszóval titkosítható Hash-el van védve a változtatástól Természetesen ez is bővíthető (pl.: adatbázist
akarunk használni fájl helyett)
![Page 45: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/45.jpg)
45
Fejlett Programozási Technológiák 2.
HasználataC:\Documents and Settings\bilickiv.INFORM>keytool -genkey -v -alias Vili -keyalg RSAEnter keystore password: jelszóWhat is your first and last name? [Unknown]: Vilmos BilickiWhat is the name of your organizational unit? [Unknown]: SZTEWhat is the name of your organization? [Unknown]: InfTSZCSWhat is the name of your City or Locality? [Unknown]: SzegedWhat is the name of your State or Province? [Unknown]: CsongrádWhat is the two-letter country code for this unit? [Unknown]: HUIs CN=Vilmos Bilicki, OU=SZTE, O=InfTSZCS, L=Szeged, ST=Csongrád, C=HU
correct? [no]: yes
Generating 1á024 bit RSA key pair and self-signed certificate (MD5WithRSA) for: CN=Vilmos Bilicki, OU=SZTE, O=InfTSZCS, L=Szeged, ST=Csongrád, C=HU
Enter key password for <Vili> (RETURN if same as keystore password): jelszó[Saving C:\Documents and Settings\bilickiv.INFORM\.keystore]
![Page 46: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/46.jpg)
46
Fejlett Programozási Technológiák 2.
cacerts Rendszer szintű tároló A megbízható CA bizonyítványok tárolója keytool -list -keystore cacerts
![Page 47: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/47.jpg)
47
Fejlett Programozási Technológiák 2.
Certification Path API
import java.security.*;import java.security.cert.*;// CertificateFactory for X.509CertificateFactory cf =CertificateFactory.getInstance("X.509");// Obtain CertPathValidator CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
// Set the Trust anchorTrustAnchor anchor = new TrustAnchor((X509Certificate)cf.getCertificate("ca"),null);PKIXParameters params = new PKIXParameters(Collections.singleton(anchor));// Revocation as falseparams.setRevocationEnabled(false);// ValidatePKIXCertPathValidatorResult result = (PKIXCertPathValidatorResult)cpv.validate(cp, params);
![Page 48: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/48.jpg)
48
Fejlett Programozási Technológiák 2.
JSE Java Platform Security Extension (JSE)
Java Secure Socket Extension (JSSE)Java Authorization and Authentication Service API
(JAAS)Java Crypography Extenision (JCE)
![Page 49: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/49.jpg)
49
Fejlett Programozási Technológiák 2.
Java Secure Socket Extension
Jáva SSL megvalósítás Vég-vég biztonságimport java.io.*;
import java.net.*;
import javax.net.ssl.*;
SSLServerSocketFactory sslsrvfact = SSLServerSocketFactory.getDefault();
SSLServerSocket s = sslsrvfact.createServerSocket(port);
s.accept(); import java.io.*;
import java.net.*;
import javax.net.ssl.*;
SSLSocketFactory sslfact = SSLSocketFactory.getDefault();
SSLSocket s = sslfact.createSocket(host, port);
![Page 50: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/50.jpg)
50
Fejlett Programozási Technológiák 2. import java.io.*;import java.net.*;import javax.net.ssl.*;public class HTTPSServerExample {public static void main(String[] args) throws IOException {SSLServerSocketFactory sslsf =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();ServerSocket ss = sslsf.createServerSocket(8080);while (true) {try {Socket s = ss.accept();System.out.println( "Client connection made" );BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream()));System.out.println(in.readLine());PrintWriter out = new PrintWriter( s.getOutputStream() );out.println("<HTML><HEAD><TITLE>HTTPS Server Example</TITLE>" +"</HEAD><BODY><H1>Hello World!</H1></BODY></HTML>\n");out.close();s.close();} catch (Exception e) {e.printStackTrace();}}}}
java -Djavax.net.ssl.keyStore=sslKeyStore-Djavax.net.ssl.keyStorePassword=password HTTPSServerExample
![Page 51: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/51.jpg)
51
Fejlett Programozási Technológiák 2.
JAAS
Java Authentication and Authorization Service (JAAS) API Felhasználó azonosítás (eddig csak kód alapú azonosítás
volt) Mit tud Mivel rendelkezik Kicsoda
Az azonosítás választható (alakítható) Plugable Authentication Modules (PAM) Engedélyezés:
Deklaratív Progamból
![Page 52: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/52.jpg)
52
Fejlett Programozási Technológiák 2.
PAM SUN Solaris (Linux, …) Szabványos azonosító környezet Az aktuálisan használt eljárás használat,
telepítés közben derül ki (administrator) Login modulok
VálszthatóakKönnyen bővíthetőek
Login konfigurációs fájl
![Page 53: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/53.jpg)
53
Fejlett Programozási Technológiák 2.
Java 1.4 login modulok
com.sun.security.auth.module.NTLoginModule com.sun.security.auth.module.NTSystem com.sun.security.auth.module.JndiLoginModule com.sun.security.auth.module.KeyStoreLoginModule com.sun.security.auth.module.Krb5LoginModule com.sun.security.auth.module.SolarisSystem com.sun.security.auth.module.UnixLoginModule com.sun.security.auth.module.UnixSystem
![Page 54: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/54.jpg)
54
Fejlett Programozási Technológiák 2.
JAAS elemei Login Context
Login.config Login Module Subject
Elemei: Principal (PrincipalImpl) Credential
Metódusai: subject.getPrincipals() subject.getPublicCredentials() subject.getPrivateCredentials()
Access Controller Permission objektum Jaas.policy
![Page 55: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/55.jpg)
55
Fejlett Programozási Technológiák 2.
JAAS példa
// Example Java 2 Security Policy Entrygrant Codebase "www.sun.com", Signedby "duke" {FilePermission "/cdrom/-", "read"; }// Example JAAS Security Policy Entrygrant Codebase "www.sun.com", Signedby "duke", Principal com.sun.Principal "charlie" {FilePermission "/cdrom/charlie/-", "read"; }
// Example login module configuration entryLogin2 {sample.SampleLoginModule required;com.sun.security.auth.module.NTLoginModule sufficient;com.foo.SmartCard requisite debug=true;com.foo.Kerberos optional debug=true;};
import java.security.*; import javax.security.auth.*; //exts// Instantiate a login contextLoginContext ctx = new LoginContext ("name", CallbackHandler);// Authenicate the subjectctx.login();// Retrieve authenticated subjectSubject sub = ctx.getSubject();// Enforce Access ControlsSubject.doAs(sub, action);
![Page 56: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/56.jpg)
56
Fejlett Programozási Technológiák 2.
Példa
![Page 57: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/57.jpg)
57
Fejlett Programozási Technológiák 2.
PrincipalImplimport java.io.Serializable;import java.security.Principal;public class PrincipalImpl implements Principal, Serializable {private String name;public PrincipalImpl(String n) {name = n;}public boolean equals(Object obj) {if (!(obj instanceof PrincipalImpl)) {return false;}PrincipalImpl pobj = (PrincipalImpl)obj;if (name.equals(pobj.getName())) {return true;}return false;}public String getName() {return name;}public int hashCode() {return name.hashCode();}public String toString() {return getName();}}
![Page 58: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/58.jpg)
58
Fejlett Programozási Technológiák 2.
Login konfiguráció
A használt azonosítási eljárást nem a program írásakor döntjük el
Login.config Djava.security.auth.login.config==login.config == a rendszer fájlt lecseréli LoginContext
required optional requisite sufficient
JAASExample {AlwaysLoginModule required;PasswordLoginModule optional;};
![Page 59: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/59.jpg)
59
Fejlett Programozási Technológiák 2.
Login Context Java osztály Login végrehajtás Subject visszaadás Konstruktora:
LoginContext("JAASExample", newUsernamePasswordCallbackHandler())
Fontosabb metódusai: login()getSubject() logout()
![Page 60: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/60.jpg)
60
Fejlett Programozási Technológiák 2.
Callback handler Feladata a megfelelő információ beszerzése javax.security.auth.callback.CallbackHandler Elemei:
NameCallbackPasswordCallbackTextInputCallbackTextOutputCallbackLanguageCallbackChoiceCallbackConfirmationCallback
![Page 61: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/61.jpg)
61
Fejlett Programozási Technológiák 2. import java.io.*;import java.security.*;import javax.security.auth.*;import javax.security.auth.callback.*;UsernamePasswordCallbackHandler implements CallbackHandler {public void handle(Callback[] callbacks) throwsUnsupportedCallbackException, IOException {for(int i=0;i<callbacks.length;i++) {Callback cb = callbacks[i];if (cb instanceof NameCallback) {NameCallback nameCallback = (NameCallback)cb;System.out.print( nameCallback.getPrompt() + "? ");System.out.flush();String username = new BufferedReader(new InputStreamReader(System.in)).readLine();nameCallback.setName(username);} else if (cb instanceof PasswordCallback) {PasswordCallback passwordCallback = (PasswordCallback)cb;System.out.print( passwordCallback.getPrompt() + "? ");System.out.flush();String password = new BufferedReader(new InputStreamReader(System.in)).readLine();passwordCallback.setPassword(password.toCharArray());password = null;} else {throw new UnsupportedCallbackException(cb, "UnsupportedCallback Type");}}}}
![Page 62: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/62.jpg)
62
Fejlett Programozási Technológiák 2.
Login Modul LoginModule interfész Két fázisú elfogadás (two phase commit) Metódusai:
initialize( subject, callbackHandler, sharedState, options) login() commit() abort() logout()
![Page 63: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/63.jpg)
63
Fejlett Programozási Technológiák 2. public class AlwaysLoginModule implements LoginModule {private Subject subject;private Principal principal;private CallbackHandler callbackHandler;private String username;private boolean loginSuccess;public void initialize(Subject sub, CallbackHandler cbh,Map sharedState, Map options) {subject = sub;callbackHandler = cbh;loginSuccess = false;}public boolean login() throws LoginException {if (callbackHandler == null) {throw new LoginException( "No CallbackHandler defined");}Callback[] callbacks = new Callback[1];callbacks[0] = new NameCallback("Username");try {System.out.println( "\nAlwaysLoginModule Login" );callbackHandler.handle(callbacks);username = ((NameCallback)callbacks[0]).getName();} catch (IOException ioe) {throw new LoginException(ioe.toString());} catch (UnsupportedCallbackException uce) {throw new LoginException(uce.toString());}loginSuccess = true;return true;}public boolean commit() throws LoginException {if (loginSuccess == false) {System.out.println( "Commit: AlwaysLoginModule FAIL" );return false;}if (!(subject.getPrincipals().contains(principal))) {subject.getPrincipals().add(principal);}System.out.println( "Commit: AlwaysLoginModule SUCCESS" );return true;}…
![Page 64: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/64.jpg)
64
Fejlett Programozási Technológiák 2. if (callbackHandler == null) {throw new LoginException("No CallbackHandler defined");}Callback[] callbacks = new Callback[2];callbacks[0] = new NameCallback("Username");callbacks[1] = new PasswordCallback("Password", false);try {callbackHandler.handle(callbacks);username = ((NameCallback)callbacks[0]).getName();char[] temp = ((PasswordCallback)callbacks[1]).getPassword();password = new char[temp.length];System.arraycopy(temp, 0, password, 0, temp.length);((PasswordCallback)callbacks[1]).clearPassword();} catch (IOException ioe) {throw new LoginException(ioe.toString());} catch (UnsupportedCallbackException uce) {throw new LoginException(uce.toString());}if ( "joeuser".equals(username)) {if ( password.length == 5 &&password[0] == 'j' &&password[1] == 'o' &&password[2] == 'e' &&password[3] == 'p' &&password[4] == 'w' ) {loginSuccess = true;clearPassword();return true;}} else {loginSuccess = false;username = null;clearPassword();throw new FailedLoginException();}
![Page 65: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/65.jpg)
65
Fejlett Programozási Technológiák 2.
Hozzáférési környezet Szálanként kezeljük a jogosultságot A Subject kötése a környezethez:
Object doAs(Subject subject,PrivilegedAction action)
Object doAsPrivileged(Subject, PrivilegedAction action, AccessControlContext acc)
Deklaratív megoldás:Object doAsPrivileged(Subject, PrivilegedAction
action, null)
![Page 66: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/66.jpg)
66
Fejlett Programozási Technológiák 2.
Program modell/ Deklaratív modell
class PayrollAction implements PrivilegedAction {AccessControlContext context = AccessController.getContext();Subject subject = Subject.getSubject(context );if (subject == null ) {throw new AccessControlException("Denied");}Set principals = subject.getPrincipals();Iterator iterator = principals.iterator();while (iterator.hasNext()) {PrincipalImpl principal = (PrincipalImpl)iterator.next();if (principal.getName().equals( "joeuser" )) {System.out.println("joeuser has Payroll access\n");return new Integer(0);}}throw new AccessControlException("Denied");}
class PersonnelAction implements PrivilegedAction {public Object run() {AccessController.checkPermission(new PersonnelPermission("access"));System.out.println( "Subject has Personnel access\n");return new Integer(0);}}
![Page 67: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/67.jpg)
67
Fejlett Programozási Technológiák 2. public class JAASExample {static LoginContext lc = null;public static void main( String[] args) {try {lc = new LoginContext("JAASExample",new UsernamePasswordCallbackHandler());} catch (LoginException le) {System.out.println( "Login Context Creation Error" );System.exit(1);}try {lc.login();} catch (LoginException le) {System.exit(1);}try {Subject.doAs( lc.getSubject(), new PayrollAction() );} catch (AccessControlException e) {System.out.println( "Payroll Access DENIED" );}try {Subject.doAsPrivileged( lc.getSubject(), new PersonnelAction(), null );} catch (AccessControlException e) {System.out.println( "Personnel Access DENIED" );}try {lc.logout();} catch (LoginException le) {System.out.println( "Logout FAILED" );System.exit(1);}System.exit(0);}}
java -Djava.security.manager-Djava.security.auth.login.config==login.config-Djava.security.policy==jaas.policy JAASExample
![Page 68: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/68.jpg)
68
Fejlett Programozási Technológiák 2.
JGSS GSS API (RFC2853)
![Page 69: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/69.jpg)
69
Fejlett Programozási Technológiák 2.
Áttekintés
![Page 70: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/70.jpg)
70
Fejlett Programozási Technológiák 2.
A mai előadás tartalma: Számítógépes biztonság Jáva és a biztonság
Biztonsági architektúra
Titkosító architektúra JCE JAAS JSSE GSSE
![Page 71: Fejlett Programoz ási Technikák 2](https://reader035.vdocuments.site/reader035/viewer/2022070418/56815994550346895dc6da5c/html5/thumbnails/71.jpg)
71
Fejlett Programozási Technológiák 2.
A következő előadás tartalma Java Servlet
Servlet InterfészServlet ContextRequestResponseFilterSessionWeb Application