České vysoké učení technické v Praze Fakulta elektrotechnická
Zabezpečená middleware komunikace autor: František Hlavan vedoucí práce: Ing. Jan Kubr
Katedra počítačů leden 2011
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/10
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/10
Zabezpečení na úrovni zpráv PKIX
CA
RPC klient
XKMS 2.0 server
XKMS klient
XML-RPC klient
RPC server
XKMS klient RPC Request
XML-RPC server
RPC Response
4/10
Knihovna sec-middleware
5/10
XML Šifrování, XML Podpis
EncryptedData
SignedInfo
EncryptionProperty EncryptionMethod ds:KeyInfo
CipherData
CipherValue
KeyName EncryptedKey CipherData EncryptionMethod
CipherValue
SignatureMethod CipherReference
Signature KeyInfo SignatureValue
Reference
CanonicalizationMethod
Transforms DigestMethod 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 //ověření podpisu, dešifrování void doVerificationSign(Document) void doDecrypt(Document) void doDecryptAndVerificationSign(Document) //management klíčů - PKI void registerKeyXKMS(...) void validateCertXKMS(...)
class SecurityWrapper
6/10
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/10
XML-RPC komunikace - nezabezpečená, zabezpečená SSL a XML Security XML-RPC 90
80
80
70
70
60
60
50 40
350
20
20
10
10 400 1 200 2 000 2 800 3 600 4 400 5 200
data [Bytes] no Security
XML Sec
XML-Security
400
200 150 100
0 400 1 200 2 000 2 800 3 600 4 400 5 200
data [Bytes] SSL
65k
125k
XML Sec
SSL
200
0 5k
185k
data [Bytes]
XML Sec
300
100
50
0
0
500
250
40 30
600
300
50
30
XML-RPC
čas [ms]
100
90
XML-RPC
čas [ms]
100
čas [ms]
čas [ms]
XML-RPC
no Security
245k
5k
65k
125k
185k
data [Bytes] XML Sec
no Security
nezabezpečená
Potvrdil se předpoklad, že XML Security není rychlejší oproti SSL. 8/10
245k
Porovnání typů XML-RPC XML-RPC s XML Sec
XML-RPC s XML Sec
250
XML-RPC s XML Sec
XML-RPC s XML Sec
200
350
300
180
100
120 100 80 60
50
250
200
čas [ms]
čas [ms]
čas [ms]
140 150
300
250
160
40
čas [ms]
200
150 100 50
0 400 1 200 2 000 2 800 3 600 4 400 5 200
50 0
0 400 1 200 2 000 2 800 3 600 4 400 5 200
data [Bytes] sendInts
data [Bytes]
sendBy tes
sendInts
sendBy tes
20
60
100
140
180
sendBytes sendInts
byte[ ] int[ ]
220
260
sendStruct
20
60
100
140
180
220
prvků
prvků
sendStruct
sendArray
Obr. 5.3 JAVA typ
150 100
20 0
200
sendArray
Obr. 5.4 XML-RPC typ
<array> 25 ...
JAVA typ sendArray
sendStruct
XML-RPC typ
int[ ]
<array> …
TreeMap
<struct> …
Arrays.copyOfRange (poleA, 0, lenInt);
9/10
260
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, 0, lenInt);