České vysoké učení technické v Praze F a k u l t a e l e k t r o t e c h n i c k á Zabezpečená middleware komunikace autor: František Hlavan vedoucí práce: Ing. Jan Kubr Katedra počítačů leden 211
Cíle diplomové práce 1. Prozkoumat možnosti zabezpečení middlewareových technologií. 2. Navrhnout a implementovat knihovnu umožňující zabezpečení komunikace XML-RPC. 3. Demonstrovat použití knihovny na vhodné aplikaci. 2/1
Výchozí předpoklady Protokoly, standardy: Protokol XML-RPC (www.xml-rpc.com) W3C XML Signature, XML Encryption a XML Key Management Specification (XKMS) (W3C XML-Security) JAVA implementace: Apache XML-security (santuario.apache.org) XML podpis a XML šifrování OpenXKMS (xkms.sourceforge.net) - XKMS implementace XML-RPC: RoX RPC over XML (rox-xmlrpc.sourceforge.net) Merqueé (Redstone) Apache XML-RPC 3/1
Zabezpečení na úrovni zpráv CA PKIX RPC klient XKMS 2. server RPC server XKMS klient XKMS klient XML-RPC klient RPC Request RPC Response XML-RPC server 4/1
Knihovna sec-middleware 5/1
EncryptedData XML Šifrování, XML Podpis Signature EncryptionMethod ds:keyinfo EncryptedKey CipherData CipherValue KeyName CipherData EncryptionProperty CipherReference SignatureMethod SignedInfo Reference Transforms DigestMethod KeyInfo SignatureValue CanonicalizationMethod DigestValue //podpis, šifrování void dosign(document, String, String, boolean) void doencrypt(document, String, String) void doencryptsymkek(...) void doencryptasymkek(...) void dosignandencrypt(document, String, String, boolean, String, int, String) 3 x přetížená metoda EncryptionMethod //ověření podpisu, dešifrování void doverificationsign(document) void dodecrypt(document) void dodecryptandverificationsign(document) CipherValue //management klíčů - PKI void registerkeyxkms(...) void validatecertxkms(...) class SecurityWrapper 6/1
Použití v RoX (RPC over XML) inicializační část klienta / serveru KeyStoreHandler keystore = new KeyStoreHandler( ); keystore.setfileforjks(...); keystore.setfileforjceks(...); XmlSigner dsig = new XMLSigner( ); XmlEncryptor enc = new XmlEncryptor( ); XkmsClient xkms = new Xkms(...); SecOptions secureopts = new SecOptions(...); secureopts.setkeystore(keystore); secureopts.setdsign(dsig); secureopts.setenc(enc); secureopts.setxkms(xkms); client.setsecurexmlrpc(secureopts); RPC volání a odpověď JAVA objekt Java Objekt XML XML modul Sec-middleware XML-Sec zabezpečené XML-RPC přenos HTTP XML-Sec client.execute(namerpc, paramsrpc); Socket 7/1
XML-RPC komunikace - nezabezpečená, zabezpečená SSL a XML Security XML-RPC 9 8 7 6 5 4 3 2 1 4 1 2 2 2 8 3 6 4 4 5 2 data [Bytes] no Security XML Sec XML-RPC 9 8 7 6 5 4 3 2 1 4 1 2 2 2 8 3 6 4 4 5 2 data [Bytes] SSL XML Sec 35 3 25 2 15 XML-RPC XML-RPC 5 5k 65k 125k 185k 245k data [Bytes] XML Sec no Security 6 5 4 3 2 5k 65k 125k 185k 245k data [Bytes] XML Sec no Security XML-Security SSL nezabezpečená Potvrdil se předpoklad, že XML Security není rychlejší oproti SSL. 8/1
Porovnání typů XML-RPC XML-RPC s XML Sec 25 2 15 5 4 1 2 2 2 8 3 6 4 4 5 2 data [Bytes] sendints sendby tes XML-RPC s XML Sec 2 18 16 14 12 8 6 4 2 4 1 2 2 2 8 3 6 4 4 5 2 data [Bytes] sendints sendby tes XML-RPC s XML Sec XML-RPC s XML Sec 3 25 2 15 5 2 6 14 18 22 26 prvků sendstruct sendarray 35 3 25 2 15 5 2 6 14 18 22 26 prvků sendstruct sendarray Obr. 5.3 Obr. 5.4 JAVA typ XML-RPC typ sendbytes byte[ ] <base64> sendints int[ ] <array> <int>25</int>... </array> Arrays.copyOfRange (polea,, lenint); JAVA typ sendarray int[ ] sendstruct TreeMap XML-RPC typ <array> </array> <struct> </struct> 9/1
Souhrn zjednodušení přístupu k XML-Security má jednodušší rozhraní oproti SSL univerzální použití - zabezpečuje libovolný XML dokument zachována širší nabídku šifrovacích algoritmů možnost kombinovat podpis, šifrování, podpis a šifrování možné další rozšíření - budoucnost
Děkuji za pozornost.
dotazy oponenta: (1) Použití pro SAX analyzátor (embedded)? sec-middleware knihovna nelze použít, protože XML podepisování a šifrování vyžaduje DOM model. XML Signature počítá se otisk (SHA alg.), data celá v paměti XML Encryption používá blokové šifrovací algoritmy Proudové šifrování - standard nespecifikuje, ale nezakazuje jeho implementaci (kap. 5.3, XML Encryption Syntax and Processing). RC4 implementace v bouncycastle.org jako ARC4. (2) Velikost přenesených dat SSL (5781B)? Bylo určeno k metodě sendbytes( pole byte ). SSL problém: (XML-Request + HTTP hlavička) > 8 KB,spojení se zaseklo nebo rozpadlo. (3) Počet měření pro grafy? (4) Nárůst zpoždění na počátcích grafů obr. 5.3? Arrays.copyOfRange (polea,, lenint);