1 Fejlett Programozási Technikák 2. 15/8. Fejlett Programozási Technológiák 2. 2 Az előző előadás tartalma: Java Applet  Felépítése  Tulajdonságai 

Slides:



Advertisements
Hasonló előadás

Advertisements

Kamarai prezentáció sablon
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
Quest Szakmai Konferencia Ker-Soft Kft szeptember 27.
Erőállóképesség mérése Találjanak teszteket az irodalomban
MATEMATIKA Év eleji felmérés 3. évfolyam
Messages Szöveg A A B B C C A A B B C C A A B B C C Endpoint.
2 3.NET Framework 3.0 Visual Studio Extensions for WF Visual Studio Extensions for WCF/WPF CTP ASP.NET AJAX 1.0 Ajax Toolkit.NET Framework 3.5 Visual.
21 Years of Partnership and Innovation 1989 Citrix Systems founded 2010 Citrix signed licensing agreement with Microsoft for NT Server Introduced Independent.
Humánkineziológia szak
Mellár János 5. óra Március 12. v
Üzemeltetői konferencia 5.1 avagy biztonság, ahogy mi látjuk.
6) 7) 8) 9) 10) Mennyi az x, y és z értéke? 11) 12) 13) 14) 15)
Elektromos mennyiségek mérése
Bevezetés a tárgyakhoz Tárgyak  Objects are the containers for values of a specified type  Objects are either signals, variables or constants  Once.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
Socket programozás Példák
Neo4j bevezető Rácz Gábor
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
A tételek eljuttatása az iskolákba
Elektronikai Áramkörök Tervezése és Megvalósítása
Mérés és adatgyűjtés Szenzorok II. Mingesz Róbert
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
Védőgázas hegesztések
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Course Situation and Event Driven Models for Multilevel Abstraction Based Virtual Engineering Spaces Óbuda University John von Neumann Faculty of Informatics.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Szerkezeti elemek teherbírásvizsgálata összetett terhelés esetén:
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
NOVÁK TAMÁS Nemzetközi Gazdaságtan
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
PHP II. Tömbök, sztringek
Edge Transport Routing and AV/AS Enterprise Network External SMTP servers Phone system (PBX or VOIP) Client Access Client connectivity Web services.
Alertet indíthat egy: SQL Server esemény (LOG) SQL Server performancia érték WMI events Alert végezhet: Operátor értesítést JOB indítás (válasz az eseményre)
szakmérnök hallgatók számára
Aktuális helyzet Elhasznált gumiabroncs hasznosítás MAGUSZ
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Logikai szita Izsó Tímea 9.B.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Tóth Gergely, április 22. ELTE Security Speci JAVA Security Tóth Gergely
EGEE-II INFSO-RI Enabling Grids for E-sciencE EGEE and gLite are registered trademarks P-GRADE Portal gyakorlat ismertető Gergely.
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
var q = ( from c in dc.Customers where c.City == "London" where c.City == "London" select c).Including( c => c.Orders ); select c).Including(
7. Házi feladat megoldása
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
Multilingual websites in Hungary Gabriella Szalóki Egy előadás könnyen vitára ösztönözheti a hallgatóságot. A PowerPoint bemutatók használatával azonban.
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
Csurik Magda Országos Tisztifőorvosi Hivatal
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
2006. Peer-to-Peer (P2P) hálózatok Távközlési és Médiainformatikai Tanszék.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
- Group Policy - Group Policy Preferences - Group Policy 4x5 - Optimális munkakörnyezet – az első lépcsőfok.
 OpenCL platform  Számító eszközök  OpenCL kontextusok  Parancs sorok  Szinkronizáció  Memória objektumok  OpenCL programok  OpenCL függvények.
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Előadás másolata:

1 Fejlett Programozási Technikák 2. 15/8

Fejlett Programozási Technológiák 2. 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

Fejlett Programozási Technológiák 2. 3 Források

Fejlett Programozási Technológiák 2. 4 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

Fejlett Programozási Technológiák 2. 5 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.

Fejlett Programozási Technológiák 2. 6 Támadás típusok Kategóriák:  Titkosság elleni támadás  Integritás elleni támadás  Rendelkezé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)

Fejlett Programozási Technológiák 2. 7 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

Fejlett Programozási Technológiák 2. 8 Jáva támadások 1. Trükkös kód 2. Régi, hack-elt javac 3. Class fájlok átírása (CGI jogosultságok) 4. Programok válogatása 5. Kapcsolat eltérítése (spoofing) (aláírt applet) 6. JVM bug

Fejlett Programozási Technológiák 2. 9 Áttekintés

Fejlett Programozási Technológiák 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)

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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.java public 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_0 1 invokespecial #9 4 return Method int add() 0 iconst_3 1 istore_0 2 iconst_4 3 istore_1 4 iload_0 5 iload_1 6 iadd 7 ireturn Exception in thread "main" java.lang.VerifyError: (class: TestVerify, method: add signature: ()I) Accessing value from uninitialized register 1

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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ó

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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.SecurityManager  Biztonsági rendszabály alapú (policy based) Természetesen ez is bővíthető

Fejlett Programozási Technológiák Hely függő (homokozó modell) Java 1.0 Nagyon szigorú a távoli kódokkal Nincs kivétel

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák Védelmi tartomány Rendszer Tartomány Alkalmazás tartományok  Principal  Policy fájl grant signedBy "sysadmin", codeBase "file:/home/sysadmin/*" { permission java.security.SecurityPermission "Security.insertProvider.*"; permission java.security.SecurityPermission "Security.removeProvider.*"; permission java.security.SecurityPermission "Security.setProperty.*"; };

Fejlett Programozási Technológiák 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()

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák Áttekintés

Fejlett Programozási Technológiák Eszközök Jar Jarsigner Keytool  Keystore policytool

Fejlett Programozási Technológiák 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 …

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák J2SE 1.5 biztonsági eszközök JCA/JCE JSSE Java CertPath JAAS/JGSS

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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()

Fejlett Programozási Technológiák 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") ); }

Fejlett Programozási Technológiák Példa MAC import 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") );}}

Fejlett Programozási Technológiák 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)

Fejlett Programozási Technológiák 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 – 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)

Fejlett Programozási Technológiák 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") ); }

Fejlett Programozási Technológiák 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)

Fejlett Programozási Technológiák 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") );}}

Fejlett Programozási Technológiák 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):

Fejlett Programozási Technológiák Példa import 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" ); }}}

Fejlett Programozási Technológiák Digitális igazolványok Hitelesító Hatóság - certificate authority (CA)  Certificate Revocation Lists (CRL) Típusok:  X.509 Tárolás:  Keystore

Fejlett Programozási Technológiák 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)

Fejlett Programozási Technológiák Használata C:\Documents and Settings\bilickiv.INFORM>keytool -genkey -v -alias Vili -keyalg RSA Enter keystore password: jelszó What is your first and last name? [Unknown]: Vilmos Bilicki What is the name of your organizational unit? [Unknown]: SZTE What is the name of your organization? [Unknown]: InfTSZCS What is the name of your City or Locality? [Unknown]: Szeged What is the name of your State or Province? [Unknown]: Csongrád What is the two-letter country code for this unit? [Unknown]: HU Is 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 (RETURN if same as keystore password): jelszó [Saving C:\Documents and Settings\bilickiv.INFORM\.keystore]

Fejlett Programozási Technológiák cacerts Rendszer szintű tároló A megbízható CA bizonyítványok tárolója keytool -list -keystore cacerts

Fejlett Programozási Technológiák Certification Path API import java.security.*; import java.security.cert.*; // CertificateFactory for X.509 CertificateFactory cf =CertificateFactory.getInstance("X.509"); // Obtain CertPathValidator CertPathValidator cpv = CertPathValidator.getInstance("PKIX"); // Set the Trust anchor TrustAnchor anchor = new TrustAnchor((X509Certificate)cf.getCertificate("ca"),null); PKIXParameters params = new PKIXParameters(Collections.singleton(anchor)); // Revocation as false params.setRevocationEnabled(false); // Validate PKIXCertPathValidatorResult result = (PKIXCertPathValidatorResult) cpv.validate(cp, params);

Fejlett Programozási Technológiák JSE Java Platform Security Extension (JSE)  Java Secure Socket Extension (JSSE)  Java Authorization and Authentication Service API (JAAS)  Java Crypography Extenision (JCE)

Fejlett Programozási Technológiák Java Secure Socket Extension Jáva SSL megvalósítás Vég-vég biztonság import 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);

Fejlett Programozási Technológiák 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(" HTTPS Server Example " + " Hello World! \n"); out.close(); s.close(); } catch (Exception e) { e.printStackTrace();}}}} java -Djavax.net.ssl.keyStore=sslKeyStore -Djavax.net.ssl.keyStorePassword=password HTTPSServerExample

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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óak  Könnyen bővíthetőek Login konfigurációs fájl

Fejlett Programozási Technológiák 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.KeyStoreLoginModul e com.sun.security.auth.module.Krb5LoginModule com.sun.security.auth.module.SolarisSystem com.sun.security.auth.module.UnixLoginModule com.sun.security.auth.module.UnixSystem

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák JAAS példa // Example Java 2 Security Policy Entry grant Codebase " Signedby "duke" { FilePermission "/cdrom/-", "read"; } // Example JAAS Security Policy Entry grant Codebase " Signedby "duke", Principal com.sun.Principal "charlie" { FilePermission "/cdrom/charlie/-", "read"; } // Example login module configuration entry Login2 { 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 context LoginContext ctx = new LoginContext ("name", CallbackHandler); // Authenicate the subject ctx.login(); // Retrieve authenticated subject Subject sub = ctx.getSubject(); // Enforce Access Controls Subject.doAs(sub, action);

Fejlett Programozási Technológiák Példa

Fejlett Programozási Technológiák PrincipalImpl import 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();} }

Fejlett Programozási Technológiák 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; };

Fejlett Programozási Technológiák Login Context Java osztály Login végrehajtás Subject visszaadás Konstruktora:  LoginContext("JAASExample", newUsernamePasswordCallbackHandler()) Fontosabb metódusai:  login()  getSubject()  logout()

Fejlett Programozási Technológiák Callback handler Feladata a megfelelő információ beszerzése javax.security.auth.callback.CallbackHandler Elemei:  NameCallback  PasswordCallback  TextInputCallback  TextOutputCallback  LanguageCallback  ChoiceCallback  ConfirmationCallback

Fejlett Programozási Technológiák import java.io.*; import java.security.*; import javax.security.auth.*; import javax.security.auth.callback.*; UsernamePasswordCallbackHandler implements CallbackHandler { public void handle(Callback[] callbacks) throws UnsupportedCallbackException, 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, "Unsupported Callback Type");}}}}

Fejlett Programozási Technológiák 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()

Fejlett Programozási Technológiák 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; }…

Fejlett Programozási Technológiák 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(); }

Fejlett Programozási Technológiák 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)

Fejlett Programozási Technológiák 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);}}

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák JGSS GSS API (RFC2853)

Fejlett Programozási Technológiák Áttekintés

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák A következő előadás tartalma Java Servlet  Servlet Interfész  Servlet Context  Request  Response  Filter  Session  Web Application