Web Services Security Μέρος ΙΙ Χρ. Ηλιούδης
SOAP Message Security (WS- Security) Η WS-Security περιγράφει τον τρόπο με τον οποίο εφαρμόζουμε διάφορες τεχνολογίες ασφάλειας (όπως για παράδειγμα η XML Encryption, η XML Signature, τα X.509 πιστοποιητικά και τα SAML assertions) στα SOAP μηνύματα.
Η WS-Security ορίζει το Security header block <S11:Envelope> <S12:Header> <wsse:security S11:actor= S11:mustUnderstand= > </wsse:security> <S12:Header> <S11:Envelope>
XrML Η XrML παρέχει την XML-based γραμματική με την οποία μπορούμε να συντάξουμε σε XML τον ορισμό ψηφιακών δικαιωμάτων και των συνθηκών με τις οποίες ελέγχουμε την πρόσβαση και την χρήση ψηφιακού περιεχομένου και ηλεκτρονικών υπηρεσιών.
Προγραμματιστική Εφαρμογή εφαρμογή των τεχνολογιών XML Encryption και XML Signature προγραμματιστική γλώσσα JAVA
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Σενάριο 1 (1) Ο client ανακτεί το αρχείο plaintext.xml. Ο client κατασκευάζει ένα SOAP μήνυμα. Το Body αυτού του SOAP μηνύματος περιέχει ως child element το XML document MedicalRecord που έχει ανακτηθεί από το αρχείο plaintext.xml. Ο client υπογράφει ψηφιακά το Body element του SOAP μηνύματος και γίνονται οι κατάλληλες ενημερώσεις/προσθήκες στο Header του SOAP μηνύματος. Έχουμε δηλαδή την προσθήκη ενός signature security header. Ο client προχωράει στην αποστολή του SOAP μηνύματος στον server. Ο server παραλαμβάνει το SOAP μήνυμα, ανιχνεύει και ανακτά το Signature element. Ο server αρχίζει την διαδικασία του signature validation. Ο server στέλνει ένα reply SOAP μήνυμα στον client.
Σενάριο 1 (2) Ο αλγόριθμος που χρησιμοποιείται για την παραγωγή της ψηφιακής υπογραφής είναι ο DSAwithSHA1 και γίνεται χρήση ενός DSA keypair με μήκος κλειδιών 1024 bits. Η παραγωγή του DSA keypair γίνεται τοπικά στην πλευρά του πελάτη.
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Ο client ανακτεί το αρχείο plaintext.xml. Ο client ανακτεί τα session keys. Σενάριο 2 (1) Ο client κατασκευάζει ένα SOAP μήνυμα. Το Body αυτού του SOAP μηνύματος περιέχει ως child element το XML document MedicalRecord που έχει ανακτηθεί από το αρχείο plaintext.xml. Ο client κρυπτογραφεί το στοιχείο PaymentInfo του document MedicalRecord με την εφαρμογή του AES. Γίνεται η προσθήκη του κατάλληλου DataReference element στο Security element του header. Ο client κρυπτογραφεί το στοιχείο Medication του document MedicalRecord με χρήση του 3DES. Γίνεται η προσθήκη του κατάλληλου DataReference element στο Security element του header. Γίνεται αποστολή του SOAP μηνύματος από τον client στον server. Ο server λαμβάνει το μήνυμα και ανακτεί τα κρυπτογραφημένα τμήματά του. Ο server ανακτεί τα κατάλληλα session keys τα οποία διαθέτει τοπικά. Ο server αποκρυπτογραφεί τα κρυπτογραφημένα τμήματα του SOAP μηνύματος και με αυτόν τον τρόπο έχει στα χέρια του το αρχικό MedicalRecord. Ο server στέλνει ένα reply SOAP μήνυμα στον client.
Σενάριο 2 (2) Χρησιμοποιούμε κλειδιά μήκους 192 bits. AES 3DES
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Σενάριο 3 (1) Ο server κατασκευάζει το δημόσιο κλειδί του και το αποθηκεύει σε δημόσια προσβάσιμο αρχείο. Ο client ανακτεί το session key. Ο client κατασκευάζει ένα SOAP μήνυμα. Το Body αυτού του SOAP μηνύματος περιέχει ως child element το XML document MedicalRecord που έχει ανακτηθεί από το αρχείο plaintext.xml. Ο client κρυπτογραφεί το στοιχείο Medication του document MedicalRecord που βρίσκεται στο SOAP Body με την εφαρμογή του AES και τη χρήση του session key. Ο client κρυπτογραφεί το session key εφαρμόζοντας τον αλγόριθμο RSA και χρησιμοποιώντας το δημόσιο κλειδί του server. Γίνεται αποστολή του SOAP μηνύματος από τον client στον server. Ο server λαμβάνει το μήνυμα και ανακτεί το στοιχείο EncryptedKey. Με την χρήση του ιδιωτικού του κλειδιού ο server αποκρυπτογραφεί το κρυπτογράφημα που βρίσκεται εντός του στοιχείου EncryptedKey/CipherData/CipherValue και έτσι γίνεται αποδέκτης του session key. Ο server γνωρίζοντας πλεόν το κλειδί συνόδου μπορεί να αποκρυπτογραφήσει το κρυπτογράφημα που βρίσκεται εντός του στοιχείου Body/MedicalRecord/EncryptedData/CipherData/CipherValue. Με την ολοκλήρωση της διαδικασίας αποκρυπτογράφησης ο server θα έχει στα χέρια του το αρχικό MedicalRecord. Ο server στέλνει ένα reply SOAP μήνυμα στον client.
Σενάριο 3 (2) AES και session key μήκους 128 bits RSA
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Σενάριο 4 (1) Αυτό το σενάριο αποτελεί μία μικρή παραλλαγή του προηγούμενου σεναρίου. Απλώς αντί να κρυπτογραφούμε μόνο ένα συγκεκριμένο στοιχείο του αρχικού XML document MedicalRecord επιλέγουμε να κρυπτογραφήσουμε ολόκληρο το XML document.
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Σενάριο 5 (1) Ο server1 κατασκευάζει το δημόσιο κλειδί του και το αποθηκεύει σε δημόσια προσβάσιμο αρχείο. Ο server2 κατασκευάζει το δημόσιο κλειδί του και το αποθηκεύει σε δημόσια προσβάσιμο αρχείο. Ο client ανακτεί το sessionkey_1 και το sessionkey_2 Ο client κατασκευάζει ένα SOAP μήνυμα. Το Body αυτού του SOAP μηνύματος περιέχει ως child element το XML document MedicalRecord που έχει ανακτηθεί από το αρχείο plaintext.xml. Ο client κρυπτογραφεί το στοιχείο PaymentInfo του document MedicalRecord που βρίσκεται στο SOAP Body με την εφαρμογή του AES και τη χρήση του sessionkey_2. Ο client κρυπτογραφεί το στοιχείο Medication του document MedicalRecord που βρίσκεται στο SOAP Body με την εφαρμογή του AES και τη χρήση του sessionkey_1. Ο client κρυπτογραφεί το sessionkey_1 εφαρμόζοντας τον αλγόριθμο RSA και χρησιμοποιώντας το δημόσιο κλειδί του server1. Ο client κρυπτογραφεί το sessionkey_2 εφαρμόζοντας τον αλγόριθμο RSA και χρησιμοποιώντας το δημόσιο κλειδί του server2
Διαδικτυακές Υπηρεσίες Προστιθέμενης Γίνεται αποστολή του SOAP μηνύματος από τον client στον server1 και στον server2. Ο server1 λαμβάνει το μήνυμα και ανακτεί εκείνο το στοιχείο EncryptedKey στο οποίο η τιμή του attribute Recipient είναι η Recipient_1. Με την χρήση του ιδιωτικού του κλειδιού ο server1 αποκρυπτογραφεί το κρυπτογράφημα που βρίσκεται εντός του στοιχείου EncryptedKey/CipherData/CipherValue και έτσι γίνεται αποδέκτης του sessionkey_1. Αντίστοιχα, ο server2 λαμβάνει και αυτός το μήνυμα και ανακτεί εκείνο το στοιχείο EncryptedKey στο οποίο η τιμή του attribute Recipient είναι η Recipient_2. Με την χρήση του ιδιωτικού του κλειδιού ο server2 αποκρυπτογραφεί το κρυπτογράφημα που βρίσκεται εντός αυτού του στοιχείου EncryptedKey/CipherData/CipherValue και έτσι γίνεται αποδέκτης του sessionkey_2. Ο server1 επεξεργάζεται το στοιχείο EncryptedKey στο οποίο η τιμή του attribute Recipient είναι η Recipient_1 και λαμβάνει πληροφορίες από αυτό σχετικά με το κρυπτογραφημένο στοιχείο που τον αφορά. Το attribute URI του element ReferenceList/DataReference σε αυτό το EncryptedKey έχει τιμή "#MedInfo". Αυτό σημαίνει ότι ο server1 θα πρέπει να επεξεργαστεί το EncryptedData το οποίο έχει Id με τιμή "MedInfo". Ο server2 επεξεργάζεται το στοιχείο EncryptedKey στο οποίο η τιμή του attribute Recipient είναι η Recipient_2 και λαμβάνει πληροφορίες από αυτό σχετικά με το κρυπτογραφημένο στοιχείο που τον αφορά. Το attribute URI του element ReferenceList/DataReference σε αυτό το EncryptedKey έχει τιμή "#PayInfo". Αυτό σημαίνει ότι ο server1 θα πρέπει να επεξεργαστεί το EncryptedData το οποίο έχει Id με τιμή "PayInfo". Ο server1 γνωρίζοντας πλεόν το κλειδί συνόδου sessionkey_1 μπορεί να αποκρυπτογραφήσει το κρυπτογράφημα που βρίσκεται εντός του στοιχείου CipherValue του EncryptedData το οποίο έχει Id με τιμή "MedInfo". Με την ολοκλήρωση της διαδικασίας αποκρυπτογράφησης ο server1 θα έχει στα χέρια του το αρχικό MedicalRecord χωρίς όμως να είναι ορατό το αρχικό στοιχείο PaymentInfo. Ο server2 γνωρίζοντας πλεόν το κλειδί συνόδου sessionkey_2 μπορεί να αποκρυπτογραφήσει το κρυπτογράφημα που βρίσκεται εντός του στοιχείου CipherValue του EncryptedData το οποίο έχει Id με τιμή "PayInfo". Με την ολοκλήρωση της διαδικασίας αποκρυπτογράφησης ο server2 θα έχει στα χέρια του το αρχικό MedicalRecord χωρίς όμως να είναι ορατό το αρχικό στοιχείο Medication. Ο server1 στέλνει ένα reply SOAP μήνυμα στον client. Ο server2 στέλνει ένα reply SOAP μήνυμα στον client.
Σενάριο 5 (3) AES και sessions keys μήκους 128 bits RSA
Διαδικτυακές Υπηρεσίες Προστιθέμενης
Διαδικτυακές Υπηρεσίες Προστιθέμενης