Objektum-orientált tervezés Webszolgáltatás szabványok Simon Balázs Tartalom Követelmények WS-* szabványok Aszimmetrikus kulcsú kriptográfia XML titkosítás, digitális Windows és Java tanúsítványkezelés DEMO: WS-Security WS-SecureConversation 2 Integrációs követelmények 3 Objektum-orientált szoftvertervezés 1
Vállalati integráció Vállalatirányítási rendszer SAP Termékek.NET? Ügyfelek JEE SQL Server Web-portál PHP Oracle DB MySQL 4 Közigazgatási integráció APEH Linux, Oracle Ügyfélkapu Linux, JBoss? OEP Windows,.NET MÁK Solaris, Sun 5 Követelmények Vállalaton belüli integráció: tranzakciókezelés E-Közigazgatási integráció, vállalatok közti integráció: biztonság: titkosítás, digitális megbízhatóság: üzenet nem veszik el Szabványos megoldás 6 2
Metadata 5/4/2015 WS-* szabványok 7 Objektum-orientált szoftvertervezés Web-Service szabványok Security Reliable Messaging Transactions Messaging XML titkosítás, digitális Transport pl. HTTP, HTTPS, TCP, UDP, JMS, SMTP,... 8 Messaging Messaging MTOM WS-Addressing SOAP Üzenetkezelés WS-Addressing: címzés SOAP fejlécek: Action To From ReplyTo FaultTo MessageId RelatesTo MTOM: bináris adatok küldése byte-folyamként külön MIME részben 9 3
Security Security WS-Federation WS-Trust WS-SecureConversation WS-Security WS-Security: tiktosítás, digitális WS-SecureConversation: szimmetrikus kulcs generálása, titkosított adatcsere (analógia: SSL) WS-Trust: tokenek kérése, kibocsátása (analógia: Kerberos) WS-Federation trusted domain-eken túli azonosítás single sign-on 10 WS-Federation példa Vásárló 1. Bor vásárlás 2. Nagykorú? Web-shop 11 Reliable messaging Reliable messaging WS- Reliability Népességnyilvántartás WS- Reliable Messaging analógia: TCP WS-Reliability: eredeti változat nem veszi figyelembe a többi protokollt WS-ReliableMessaging: jobban támogatott figyelembe veszi a többi protokollt is pl. transactions, security,... 12 4
WS-ReliableMessaging 13 Transactions WS- Atomic Transaction Transactions WS-Coordination WS- Business Activity WS-Coordination: tranzakció levezénylése WS-AtomicTransaction: rövid lejáratú tranzakciók 2PC WS-BusinessActivity: hosszú lejáratú tranzakciók rollback: kompenzáció 14 Metadata Metadata WS-MetadataExchange WS-Policy WSDL WS-Policy: egy szolgáltatás képességeit és követelményeit írja le kibővíti a WSDL leírást példák: WS-Security Policy WS-ReliableMessaging Policy WS-AtomicTransaction Policy WS-MetadataExchange: WSDL dokumentumok felderítése Policy-információk cseréje dinamikus protokollfelismeréshez 15 5
WS-* szabványok összesítés Security Reliable Messaging Transactions WS-Federation WS-Trust WS-SecureConversation WS-Security WS-Transfer WS-Enumeration WS-Reliability WS-ReliableMessaging Messaging WS-EventNotification WS-Addressing SOAP XML Encryption XML WS- Atomic Transaction WS-Coordination MTOM WS- Business Activity XML Digitial Signature XML XML Schema XML Namespaces Transport HTTP HTTPS SMTP TCP Metadata WS- Metadata Exchange WS-Policy WSDL 16 Aszimmetrikus kulcsú kriprográfia 17 Objektum-orientált szoftvertervezés Aszimmetrikus kulcsú kriptográfia Két különböző kulcsra (egy kulcspárra) épül: privát: csak a tulajdonosa ismeri publikus: mindenki ismeri A publikus kulcsból nehéz kideríteni a privát kulcsot Példa: RSA publikus kulcs: két nagy prím szorzata + egy modulus alapelv: a prímfaktorizáció nehéz feladat 18 6
Aszimmetrikus kulcsú kriptográfia Privát kulccsal titkosított adat csak a megfelelő publikus kulccsal bontható ki felhasználás: digitális az aláíró fél a saját privát kulcsával titkosítja az adatot a publikus kulccsal bárki ellenőrizheti ezt Publikus kulccsal titkosított adat csak a megfelelő privát kulccsal bontható ki felhasználás: titkosítás bárki tud titkosítani a publikus kulccsal csak a privát kulcs tulajdonosa tudja kibontani a tartalmat 19 X.509 tanúsítvány Tartalma: Subject: a tanúsítvány tulajdonosa, aki számára a tanúsítványt kiállították Issuer: kibocsátó, aki a tanúsítványt aláírta (hitelesítette) Serial number: sorozatszám, a kibocsátó rendeli hozzá Valid from/to: érvényességi idő Thumbprint: ujjlenyomat, ezt írja alá a kibocsátó Public key: publikus kulcs Private key: privát kulcs 20 X.509 tanúsítvány: publikus kulcs 21 7
X.509 tanúsítvány: privát kulcs 22 Tanúsítványok hierarchiája elegendő ebben megbízni Root CA önaláíró Intermediate CA Intermediate CA Personal certificate Personal certificate Intermediate CA Personal certificate 23 XML titkosítás, digitális 24 Objektum-orientált szoftvertervezés 8
XML digital signature XML szintű digitális Névtér: http://www.w3.org/2000/09/xmldsig# Specifikáció helye: http://www.w3.org/tr/xmldsig-core/ 25 XML digitális lépései 1. aláírandó erőforrások meghatározása 2. opcionális transzformációk 3. hash (message digest) készítés 4. referenciák összegyűjtése, kanonizációs és aláíró algoritmus választása 5. kanonizálás 6. 7. kulcsinformációk hozzáadása 8. objektuminformációk hozzáadása 9. elemek összesítése 26 Aláírandó erőforrások összegyűjtése Mit szeretnénk aláírni? Példák: Web-oldal: http://www.abccompany.com/index.html Weben lévő kép: http://www.abccompany.com/logo.gif Weben lévő XML-beli elemre való referencia: http://www.abccompany.com/xml/po.xml#sender1 Az aktuális XML fájlon belüli hivatkozás: #elem20 27 9
Opcionális transzformációk Az aláírandó elemek transzformációja Példák: bináris adat BASE64-be konvertálása XML transzformálása XSLT-vel A transzformáció eredménye lesz aláírva 28 Hash (message digest) készítés Cél: az aláírt dokumentum kicsi legyen Megoldás: A nagy dokumentumból egy egyirányú, ütközésmentes függvény segítségével rövid ujjlenyomatot generálni, majd ezt aláírni Egyirányú: az ujjlenyomatból nehéz olyan dokumentumot előállítani, amelynek ugyanez az ujjlenyomata Ütközésmentes: nehéz két különböző dokumentumot készíteni, amelyeknek ugyanaz az ujjlenyomata Hash algoritmusok: SHA1, SHA256, SHA512, (az MD5 használata már nem ajánlott) 29 Referenciák összegyűjtése Az eddig elkészített elemek összeszedése: SignedInfo Ez a SignedInfo elem lesz aláírva (tartalmazza a hash értékeket) Példa: <SignedInfo Id="foobar"> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI="#element4"> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> </Reference> <Reference URI="#ref20"> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>UrXLDLBIta6skoV5/A8Q38GEw44=</DigestValue> </Reference> </SignedInfo> 30 10
Kanonizálás A SignedInfo elem normalizálása előtt Miért? <a><a/> és <a/> ugyanazok White-space problémák (pl. <a/> vagy < a />) Névtérdeklarációk és prefixek Kommentek 31 Aláírás A normalizált SignedInfo a ez már tartalmazza a referenciák hash-eit is! Módszer: még egy hash képzése a SignedInfo-ból a hash a (titkosítása) Algoritmusok: DSA with SHA1 RSA with SHA1 32 Kulcsinformációk hozzáadása Opcionális: ha hiányzik, a fogadónak tudnia kell a kulcsot Kulcsok fajtái: aszimmetrikus kulcs (pl. RSA) X.509 tanúsítvány egyéni 33 11
Objektuminformációk hozzáadása Opcionális információk hozzáadása Pl. időbélyeg az hoz: <Object> <SignatureProperties> <SignatureProperty Id="AMadeUpTimeStamp" Target="#MySecondSignature"> <timestamp xmlns="http://www.ietf.org/rfcxxxx.txt"> <date>19990914</date> <time>14:34:34:34</time> </timestamp> </SignatureProperty> </SignatureProperties> </Object> 34 Összesítés Az elkészült elemek összerendezése: <ds:signature ID=""?> <ds:signedinfo> <ds:canonicalizationmethod/> <ds:signaturemethod/> <ds:reference URI=""? > <ds:transforms/>? <ds:digestmethod/> <ds:digestvalue/> </ds:reference>+ </ds:signedinfo> <ds:signaturevalue/> <ds:keyinfo/>? <ds:object ID=""?/>* </ds:signature> Minden aláírt erőforrásra egy-egy. Transzformációk rendezett listája, amelyek a hash-képzés előtt végrehajtásra kerültek. A hash értéke. Az értéke (a titkosított hash). Az ellenőrzéséhez szükséges kulcsra való hivatkozás. A hivatkozás lehet tanúsítvány, kulcsnév vagy kulcscsere algoritmus és -információ. 35 Digitális folyamata URI erőforrás transzformált erőforrás ujjlenyomat transzformációk hash-elés SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus kanonizálás normalizált SignedInfo hash-elés ujjlenyomat 36 12
Digitális eredménye URI erőforrás Signature SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus aláíró kulcs 37 Aláírás ellenőrzése 1. Minden referenciára a transzformációk alkalmazása, majd a hash kiszámítása ha a kiszámított és az ban szereplő hash különbözik, a validálás meghiúsul 2. A SignedInfo elem normalizálása a kanonizálási algoritmusnak megfelelően 3. A SignedInfo hash-ének elkészítése 4. A SignatureValue helyességének ellenőrzése a hash és a publikus kulcs alapján 38 Digitális ellenőrzése Signature SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus 1. egyezik? transzformációk hash-elés kanonizálás URI erőforrás transzformált erőforrás ujjlenyomat aláíró kulcs kibontás ujjlenyomat normalizált SignedInfo hash-elés ujjlenyomat 2. egyezik? 39 13
XML encryption XML szintű titkosítás Névtér: http://www.w3.org/2001/04/xmlenc# Specifikáció helye: http://www.w3.org/tr/xmlenc-core/ 40 XML titkosítás lépései 1. Titkosító algoritmus kiválasztása 2. Kulcs kiválasztása/megszerzése 3. Titkosítandó adat kiválasztása 4. Titkosítás 5. Kulcsinformációk hozzáadása 6. Összesítés 7. Titkosítatlan adat lecserélése titkosítottra 41 Titkosító algoritmus kiválasztása Szabványos stream alapú nincs, de bővítményekkel készíthető ilyen Négy fajta blokkos: 3DES AES-128 AES-256 AES-192 42 14
Kulcs kiválasztása/megszerzése Kulcsok megadásának módja: nincs: a fogadó oldalnak kell tudnia EncryptedKey: titkosított kulcs AgreementMethod: kulcscsere algoritmussal X509-es tanúsítvány Egyéb módon csatolva 43 Kulcsok titkosítása/cseréje Kulcs titkosítása aszimmetrikus kulccsal: RSA-v1.5 Kulcscsere algoritmusok aszimmetrikus kulcsból származatott információ alapján: Diffie-Hellman kulcscsere Szimmetrikus kulccsal titkosított kulcs: 3DES AES-128 AES-256 AES-192 44 Titkosított adat Típusai: XML elem XML elem tartalma lehet text vagy gyerek elemek Tetszőleges adat Titkosító kulcs Helye: helyben tárolt (tipikusan Base64-ben kódolva) hivatkozás 45 15
Összesítés <xenc:encrypteddata Id=""? Type=""? MimeType=""? Encoding=""?> <xenc:encryptionmethod/>? <ds:keyinfo> A titkosításhoz használt kulcs. <xenc:encryptedkey/>? <xenc:agreementmethod/>? <ds:keyname/>? <ds:retrievalmethod/>? <ds:*/>? </ds:keyinfo>? <xenc:cipherdata> A titkosított adat. <xenc:ciphervalue/>? <xenc:cipherreference URI=""?/>? </xenc:cipherdata> <xenc:encryptionproperties/>? </xenc:encrypteddata> 46 Titkosítás folyamata adat titkosítás EncryptedData titkosítási algoritmus titkosító kulcs titkosított adat titkosított adat 47 Kibontás 1. Az algoritmus, a paraméterek és a kibontáshoz szükséges kulcsinformáció azonosítása 2. A kulcs meghatározása (ha ez is titkosított, akkor rekurzívan ) 3. A CypherData tartalmának kibontása 48 16
Kibontás folyamata EncryptedData titkosítási algoritmus titkosító kulcs adat kibontás titkosított adat 49 Windows és Java tanúsítványkezelés 50 Objektum-orientált szoftvertervezés Tanúsítványok hierarchiája elegendő ebben megbízni Root CA önaláíró Intermediate CA Intermediate CA Personal certificate Personal certificate Intermediate CA Personal certificate 51 17
Windows tanúsítványtár Personal certificates: privát kulcsú saját tanúsítványok Root Certificate Authorities: publikus kulcsú gyökértanúsítványok 52 Java tanúsítványtár Formátum: JKS Tipikusan két darab fájl (bár nem kötelező szétválasztani): cacerts.jks: megbízható RootCA-k publikus kulcsú tanúsítványai keystore.jks: saját privát kulcsú tanúsítványok Kezelés: publikus kulcsok: keytool a JDK-ban privát kulcsok: nincs támogatás a JDK-ban de: letölthető egy pkcs12import nevű segédeszköz 53 18