Το WUA εξηγημένο: πώς ένα πορτοφόλι αποδεικνύει τη γνησιότητά του σε έναν εκδότη
Το Wallet Unit Attestation, WUA, είναι αυτό που δείχνει ένα EUDI Wallet σε έναν PID Provider ή Attestation Provider κατά την έκδοση για να αποδείξει ότι είναι γνήσιο. Δεν είναι ένα έγγραφο αλλά δύο, και τα δύο υπογεγραμμένα από τον Πάροχο Πορτοφολιού: ένα Wallet Instance Attestation (WIA) για την εφαρμογή πορτοφολιού και ένα Key Attestation (KA) για την ασφαλή αποθήκευση των κλειδιών με τα οποία θα συνδεθεί ένα διαπιστευτήριο.
Το πρόβλημα που λύνει το WUA
Ένας εκδότης που ετοιμάζεται να παραδώσει σε ένα πορτοφόλι ένα PID ή ένα διαπιστευτήριο εγγραφής εταιρείας δεν έχει ενσωματωμένο τρόπο να διακρίνει ένα πιστοποιημένο EUDI Wallet από μια τροποποιημένη εφαρμογή ή ένα script που αναπαράγει μια ροή εξουσιοδότησης. Ούτε μπορεί να δει αν το κλειδί με το οποίο θα συνδεθεί το διαπιστευτήριο βρίσκεται σε πιστοποιημένο ασφαλές υλικό ή σε κοινή αποθήκευση από την οποία θα μπορούσε να αντιγραφεί.
Το WUA καλύπτει και τα δύο κενά. Ο Πάροχος Πορτοφολιού εγγυάται για την εφαρμογή μέσω του WIA και για την αποθήκευση κλειδιών μέσω του Key Attestation. Ο εκδότης ελέγχει και τα δύο πριν από την έκδοση και συνεχίζει να ελέγχει την κατάσταση ανάκλησής τους στη συνέχεια, ώστε να μπορεί να ανακαλέσει ό,τι εξέδωσε αν αργότερα διαπιστωθεί ότι το πορτοφόλι ή η αποθήκευση κλειδιών του έχει παραβιαστεί.
Ένα WUA χρησιμοποιείται μόνο κατά την έκδοση. Το ARF απαγορεύει σε μια Μονάδα Πορτοφολιού να παρουσιάζει WIA ή Key Attestation σε εξαρτώμενο μέρος, κάτι που κρατά τα στοιχεία του πορτοφολιού έξω από κάθε παρουσίαση.
Οι συντελεστές και ποιος εμπιστεύεται ποιον
Εμπλέκονται πέντε ρόλοι, και μόνο τέσσερις από αυτούς χειρίζονται ποτέ ένα WUA. Το WSCD (Wallet Secure Cryptographic Device) ή ένα keystore δημιουργεί και προστατεύει τα κλειδιά, ο Πάροχος Πορτοφολιού εγγυάται για την εφαρμογή και τα κλειδιά, και ο εκδότης βασίζεται σε αυτό αντί να αξιολογεί ο ίδιος το πορτοφόλι.
Πάροχος Πορτοφολιού
Υπογράφει WIA και Key Attestation αφού ελέγξει την εφαρμογή και την αποθήκευση κλειδιών, και διαχειρίζεται τα Status List και για τα δύο
Μονάδα Πορτοφολιού
Στέλνει ένα WIA και ένα Key Attestation στον εκδότη κατά την έκδοση, και χρησιμοποιεί το καθένα για μία μόνο έκδοση
WSCD ή keystore
Δημιουργεί και φυλάσσει τα ιδιωτικά κλειδιά που περιγράφει ένα Key Attestation
PID Provider ή Attestation Provider
Επαληθεύει το WIA και το Key Attestation, συνδέει το διαπιστευτήριο με ένα βεβαιωμένο κλειδί και συνεχίζει να ελέγχει και τα δύο για ανάκληση
Εξαρτώμενο μέρος
Δεν λαμβάνει ποτέ WUA. Αντί γι' αυτό ελέγχει το διαπιστευτήριο, τη σύνδεσή του με τη συσκευή και την κατάσταση ανάκλησής του
Οι εκδότες εμπιστεύονται ένα WUA επειδή το πιστοποιητικό υπογραφής του Παρόχου Πορτοφολιού, που αποστέλλεται στην επικεφαλίδα x5c, οδηγεί μέσω αλυσίδας σε ένα σημείο εμπιστοσύνης (trust anchor) στο Trusted List για Παρόχους Πορτοφολιού. Το ίδιο το Wallet Solution πιστοποιείται από φορέα αξιολόγησης της συμμόρφωσης, και το WIA φέρει τις πληροφορίες αυτής της πιστοποίησης.
Δύο βεβαιώσεις με ένα όνομα
Το TS3, η τεχνική προδιαγραφή EUDI για τα WUA, χωρίζει τη βεβαίωση στα δύο επειδή η εφαρμογή και η αποθήκευση κλειδιών είναι διαφορετικά πράγματα, που ελέγχονται σε διαφορετικά endpoints και ανακαλούνται για διαφορετικούς λόγους.
Wallet Instance Attestation (WIA)
- Βεβαιώνει
- Την ακεραιότητα του Wallet Instance, δηλαδή της εφαρμογής
- Αποστέλλεται σε
- Τον Authorization Server, στο Pushed Authorization Request και στο Token Request
- Διάρκεια ζωής
- Λιγότερο από 24 ώρες
- Ανάκληση
- client_status: η κατάσταση ανάκλησης αυτού του Wallet Instance
- Απαιτείται για
- Κάθε έκδοση, είτε συνδέεται με τη συσκευή είτε όχι
Key Attestation (KA)
- Βεβαιώνει
- Ότι ένα ή περισσότερα κλειδιά δημιουργήθηκαν και φυλάσσονται σε ένα συγκεκριμένο WSCD ή keystore, και πόσο καλά αντέχει αυτή η αποθήκευση σε επιθέσεις
- Αποστέλλεται σε
- Τον Credential Issuer, μέσα στα proofs του Credential Request
- Διάρκεια ζωής
- Την επιλέγει ο Πάροχος Πορτοφολιού και μπορεί να είναι μεγαλύτερη από του WIA
- Ανάκληση
- key_storage_status: η κατάσταση ανάκλησης του WSCD ή του keystore
- Απαιτείται για
- Μόνο διαπιστευτήρια συνδεδεμένα με τη συσκευή, συμπεριλαμβανομένου κάθε PID
Και τα δύο είναι JWT υπογεγραμμένα από τον Πάροχο Πορτοφολιού με ES256, ES384 ή ES512. Ένα Key Attestation χρησιμοποιείται για μία μόνο έκδοση και ένα WIA δεν επαναχρησιμοποιείται ποτέ προς διαφορετικό εκδότη, ώστε οι εκδότες να μην μπορούν να συνδέσουν αιτήματα από το ίδιο πορτοφόλι.
Πώς μια Μονάδα Πορτοφολιού αποκτά τα WIA και Key Attestation της
Το TS3 αφήνει αυτό το βήμα σε κάθε Πάροχο Πορτοφολιού, αφού γίνεται μέσα σε ένα προϊόν πορτοφολιού. Το ARF απαιτεί μόνο ο Πάροχος Πορτοφολιού να επαληθεύει την ακεραιότητα της εφαρμογής πριν υπογράψει ένα WIA, και να επαληθεύει ότι τα βεβαιωμένα ιδιωτικά κλειδιά βρίσκονται πράγματι στο συγκεκριμένο WSCD ή keystore πριν υπογράψει ένα Key Attestation. Μια τυπική ροή, με βεβαιώσεις πλατφόρμας όπως Google Play Integrity ή Apple DeviceCheck ως στοιχεία, είναι η εξής.
1. Μονάδα Πορτοφολιού
Ζητά από το WSCD ή το keystore να δημιουργήσει ζεύγη κλειδιών
2. WSCD ή keystore
Επιστρέφει τα δημόσια κλειδιά, μαζί με στοιχεία της πλατφόρμας για το πού δημιουργήθηκαν
3. Πάροχος Πορτοφολιού
Ελέγχει την ακεραιότητα της εφαρμογής και τα στοιχεία των κλειδιών, και στη συνέχεια υπογράφει WIA και Key Attestation
4. Μονάδα Πορτοφολιού
Διατηρεί απόθεμα νέων WIA και Key Attestation, και χρησιμοποιεί ένα καινούργιο για κάθε έκδοση
Τι περιέχουν ένα WIA και ένα Key Attestation
Κανένα από τα δύο δεν φέρει ισχυρισμό iss: ο εκδότης αναγνωρίζει τον Πάροχο Πορτοφολιού από το πιστοποιητικό υπογραφής στην επικεφαλίδα x5c. Τα παρακάτω παραδείγματα είναι αποκωδικοποιημένα, με την επικεφαλίδα και το payload χωρισμένα με τελεία.
Wallet Instance Attestation
{
"typ": "oauth-client-attestation+jwt",
"alg": "ES256",
"x5c": ["MIIC..."]
}.{
"sub": "https://wallet.example.eu",
"wallet_name": "ExampleWallet-mobile",
"wallet_version": "2.3.0",
"wallet_link": "https://wallet.example.eu/about",
"wallet_solution_certification_information": "https://wallet.example.eu/certification/2-3-0",
"exp": 1789329600,
"client_status": {
"status": {
"status_list": { "idx": 48213, "uri": "https://wallet.example.eu/status/wia/17" }
},
"exp": 1791936000
},
"cnf": {
"jwk": { "kty": "EC", "crv": "P-256", "x": "...", "y": "..." }
}
}| Πεδίο | Τι λέει στον εκδότη |
|---|---|
| typ / x5c | Ότι πρόκειται για βεβαίωση πελάτη, και η αλυσίδα πιστοποιητικών του Παρόχου Πορτοφολιού για έλεγχο με το Trusted List |
| sub | Ο τύπος πορτοφολιού, ίδιος για κάθε εγκατάσταση, ώστε να μην μπορεί να χρησιμοποιηθεί για την παρακολούθηση ενός χρήστη |
| wallet_name / wallet_version | Το Wallet Solution όπως αναγράφεται στο Trusted List, και η έκδοσή του |
| wallet_solution_certification_information | Ποιος πιστοποίησε το Wallet Solution· το ακριβές περιεχόμενο δεν έχει ακόμη οριστεί |
| exp | Τεχνική λήξη, λιγότερο από 24 ώρες μετά τον έλεγχο ακεραιότητας |
| client_status | Μια καταχώριση Status List για αυτό το Wallet Instance, και η ημερομηνία έως την οποία ο Πάροχος Πορτοφολιού τη διατηρεί ενημερωμένη |
| cnf | Το κλειδί που υπογράφει την απόδειξη κατοχής που αποστέλλεται μαζί με το WIA |
Key Attestation
{
"typ": "key-attestation+jwt",
"alg": "ES256",
"x5c": ["MIIC..."]
}.{
"iat": 1789257600,
"exp": 1791936000,
"certification": "https://wallet.example.eu/certification/wscd/secure-element",
"key_storage": ["iso_18045_high"],
"user_authentication": ["iso_18045_high"],
"attested_keys": [
{ "kty": "EC", "crv": "P-256", "x": "...", "y": "..." },
{ "kty": "EC", "crv": "P-256", "x": "...", "y": "..." }
],
"key_storage_status": {
"status": {
"status_list": { "idx": 3, "uri": "https://wallet.example.eu/status/ka/1" }
},
"exp": 1794614400
}
}| Πεδίο | Τι λέει στον εκδότη |
|---|---|
| typ / x5c | Ότι πρόκειται για βεβαίωση κλειδιού, και η αλυσίδα πιστοποιητικών του Παρόχου Πορτοφολιού για έλεγχο με το Trusted List |
| iat / exp | Πότε εκδόθηκε και πότε λήγει τεχνικά |
| attested_keys | Δημόσια κλειδιά των οποίων τα ιδιωτικά κλειδιά δημιούργησε και φυλάσσει το WSCD ή το keystore· πολλά κλειδιά επιτρέπουν μαζική έκδοση |
| key_storage / user_authentication | Πόσο καλά αντέχουν σε επιθέσεις η αποθήκευση και η αυθεντικοποίηση χρήστη που ξεκλειδώνει τα κλειδιά· ένα WSCD είναι πάντα iso_18045_high και για τα δύο |
| certification | Η πιστοποίηση του WSCD ή του keystore, από την οποία ο εκδότης μπορεί να καταλάβει αν πρόκειται για WSCD |
| key_storage_status | Μια καταχώριση Status List για το WSCD ή το keystore, και η ημερομηνία έως την οποία ο Πάροχος Πορτοφολιού τη διατηρεί ενημερωμένη |
| nonce | Το c_nonce του εκδότη, παρόν μόνο όταν το Key Attestation αποστέλλεται ως απόδειξη attestation |
Πού ταξιδεύει ένα WUA κατά την έκδοση OpenID4VCI
Οι δύο βεβαιώσεις πηγαίνουν σε διαφορετικά σημεία. Το WIA αυθεντικοποιεί το πορτοφόλι ως OAuth πελάτη στον Authorization Server. Το Key Attestation πηγαίνει στον Credential Issuer μαζί με το αίτημα για το ίδιο το διαπιστευτήριο.
Ο Authorization Server λαμβάνει το WIA
- Η υπογραφή του WIA οδηγεί μέσω αλυσίδας στο Trusted List για Παρόχους Πορτοφολιού
- Το WIA δεν έχει λήξει και το Wallet Instance δεν έχει ανακληθεί
- Η απόδειξη κατοχής είναι υπογεγραμμένη με το κλειδί του ισχυρισμού cnf του WIA
Ο Credential Issuer λαμβάνει το Key Attestation
- Η υπογραφή του Key Attestation οδηγεί μέσω αλυσίδας στο Trusted List για Παρόχους Πορτοφολιού
- Το νέο c_nonce του εκδότη βρίσκεται στην απόδειξη jwt ή στο ίδιο το Key Attestation
- Το WSCD ή το keystore δεν έχει ανακληθεί, και το διαπιστευτήριο είναι συνδεδεμένο με ένα από τα attested_keys
Pushed Authorization Request με το WIA
POST /par HTTP/1.1 Host: issuer.example.eu Content-Type: application/x-www-form-urlencoded OAuth-Client-Attestation: <WIA JWT> OAuth-Client-Attestation-PoP: <PoP JWT signed with the WIA cnf key> response_type=code &client_id=https%3A%2F%2Fwallet.example.eu &scope=company_registration &code_challenge=<S256 challenge> &code_challenge_method=S256 &redirect_uri=<wallet redirect URI>
Το client_id αντιστοιχεί στο sub του WIA. Το Token Request φέρει τις ίδιες δύο επικεφαλίδες. Επειδή ο Credential Issuer δεν βλέπει ποτέ το WIA, ο Authorization Server πρέπει να μεταβιβάσει το client_status του, για παράδειγμα μέσα στο access token.
Credential Request με το Key Attestation
POST /credential HTTP/1.1
Host: issuer.example.eu
Authorization: DPoP <access_token>
DPoP: <DPoP proof JWT>
Content-Type: application/json
{
"credential_configuration_id": "company_registration",
"proofs": {
"jwt": ["<proof JWT: Key Attestation in its key_attestation header, signed with attested_keys[0]>"]
}
}Με τον τύπο απόδειξης attestation, το αίτημα φέρει αντί γι' αυτό "proofs": { "attestation": ["<Key Attestation JWT>"] }. Τότε δεν υπάρχει απόδειξη κατοχής: η Μονάδα Πορτοφολιού δίνει το c_nonce του εκδότη στον Πάροχο Πορτοφολιού, ο οποίος το τοποθετεί σε ένα πρόσφατα υπογεγραμμένο Key Attestation.
Ο κύκλος ζωής του WUA
Ένα WUA είναι σκόπιμα βραχύβιο και μίας χρήσης, όμως οι πληροφορίες ανάκλησης πίσω από αυτό διαρκούν περισσότερο από το ίδιο το token. Τα τρία πρώτα στάδια είναι συνήθη· το τέταρτο συμβαίνει μόνο όταν κάτι πάει στραβά.
1. Έκδοση
Ο Πάροχος Πορτοφολιού υπογράφει WIA και Key Attestation μετά τους ελέγχους ακεραιότητας και αποθήκευσης κλειδιών
2. Μίας χρήσης
Το καθένα εξυπηρετεί μία μόνο έκδοση, οπότε η Μονάδα Πορτοφολιού αποκτά συνεχώς νέα
3. Αλυσιδωτή ανάκληση
Ένας PID Provider ελέγχει ξανά την κατάσταση του WIA και του Key Attestation τουλάχιστον κάθε 24 ώρες, και ανακαλεί το PID αν κάποιο από τα δύο έχει ανακληθεί
4. Ανάκληση
Ο Πάροχος Πορτοφολιού ανακαλεί ένα Wallet Instance, για παράδειγμα μετά από απώλεια ή κλοπή, ή ένα WSCD ή keystore με ευπάθεια ασφαλείας
Εκτός του οικοσυστήματος του EUDI Wallet, ορισμένοι Πάροχοι Πορτοφολιού εκδίδουν βεβαιώσεις πορτοφολιού με πολύ σύντομη διάρκεια ζωής και χωρίς καμία αναφορά κατάστασης, βασιζόμενοι στη λήξη αντί για την ανάκληση· το OpenID4VCI κάνει τον ισχυρισμό status προαιρετικό. Το TS3 δεν το επιτρέπει αυτό για τα EUDI Wallet. Το WIA διαρκεί ήδη λιγότερο από 24 ώρες, ωστόσο τόσο το WIA όσο και το Key Attestation πρέπει να φέρουν μια αναφορά κατάστασης που ο Πάροχος Πορτοφολιού διατηρεί για τουλάχιστον 31 ημέρες, επειδή οι PID Providers τη χρησιμοποιούν για να ανακαλούν PID πολύ μετά την έκδοση.
WUA, WIA και KA: τι σημαίνει κάθε όρος
Η ορολογία άλλαξε όσο ωρίμαζαν οι προδιαγραφές. Το TS3 ονόμαζε το WIA Wallet App Attestation έως την έκδοση 1.1, και χρησιμοποιούσε τον όρο WUA για αυτό που σήμερα είναι το Key Attestation έως την έκδοση 1.5. Γι' αυτό παλαιότερα άρθρα και προσχέδια του ARF χρησιμοποιούν τους όρους διαφορετικά.
| Όρος | Τι καλύπτει | Ποιος το λαμβάνει |
|---|---|---|
| WUA | Γενικός όρος για τις δύο βεβαιώσεις παρακάτω | PID Providers και Attestation Providers, μόνο κατά την έκδοση |
| WIA | Το Wallet Instance, δηλαδή την εφαρμογή | Ο Authorization Server, στο Pushed Authorization Request και στο Token Request |
| KA | Ένα WSCD ή keystore και τα κλειδιά που φυλάσσει | Ο Credential Issuer, στα proofs του Credential Request |
Σχετικοί όροι
Συχνές ερωτήσεις
Είναι το WUA το ίδιο πράγμα με το Wallet Instance Attestation;
Όχι. Από την έκδοση 1.5 του TS3, το WUA είναι ο γενικός όρος για δύο βεβαιώσεις: το Wallet Instance Attestation (WIA), που καλύπτει την εφαρμογή, και το Key Attestation (KA), που καλύπτει το WSCD ή το keystore όπου φυλάσσονται τα κλειδιά. Παλαιότερα έγγραφα χρησιμοποιούν τον όρο WUA για αυτό που σήμερα ονομάζεται Key Attestation, και γι' αυτό οι όροι συχνά συγχέονται.
Βλέπει ποτέ ένας επαληθευτής το WUA;
Όχι. Οι απαιτήσεις του ARF WUA_07 και WUA_24 επιτρέπουν σε μια Μονάδα Πορτοφολιού να παρουσιάζει ένα WIA ή Key Attestation μόνο σε PID Provider ή Attestation Provider κατά την έκδοση, ποτέ σε εξαρτώμενο μέρος. Ο επαληθευτής ελέγχει αντί γι' αυτό το διαπιστευτήριο: την υπογραφή του, τη σύνδεσή του με τη συσκευή και την κατάσταση ανάκλησής του. Αν το πορτοφόλι πίσω από ένα PID ανακληθεί, ο PID Provider ανακαλεί το PID εντός του 24ωρου κύκλου ελέγχου του, και ο επαληθευτής το βλέπει μέσω της κατάστασης του ίδιου του PID.
Πόσο καιρό ισχύει ένα WUA;
Ένα WIA λήγει λιγότερο από 24 ώρες αφότου ο Πάροχος Πορτοφολιού έλεγξε την ακεραιότητα της εφαρμογής. Ένα Key Attestation μπορεί να ισχύει περισσότερο, κατά την κρίση του Παρόχου Πορτοφολιού. Επιπλέον, το καθένα φέρει μια ημερομηνία συντήρησης κατάστασης, client_status.exp ή key_storage_status.exp, έως την οποία ο Πάροχος Πορτοφολιού διατηρεί ενημερωμένη την κατάσταση ανάκλησης. Η Μονάδα Πορτοφολιού πρέπει πάντα να μπορεί να παρουσιάσει μία βεβαίωση της οποίας η ημερομηνία απέχει τουλάχιστον 31 ημέρες, και ένα PID πρέπει να λήγει πριν από αυτή την ημερομηνία.
Τι συμβαίνει αν μια μονάδα πορτοφολιού παραβιαστεί πριν λήξει το WUA της;
Ο Πάροχος Πορτοφολιού ανακαλεί το Wallet Instance στο Status List των WIA του ή, σε περίπτωση ευπάθειας σε έναν τύπο WSCD ή keystore, την καταχώριση του Status List για αυτή την αποθήκευση. Ένας PID Provider ελέγχει την κατάσταση του WIA και του Key Attestation πίσω από κάθε PID που εξέδωσε τουλάχιστον μία φορά κάθε 24 ώρες, και ανακαλεί το PID όταν κάποιο από τα δύο έχει ανακληθεί. Οι Attestation Providers μπορούν να κάνουν το ίδιο. Δεν είναι η λήξη του ίδιου του WUA που απομακρύνει το πορτοφόλι, αλλά η ανάκληση των διαπιστευτηρίων που του έχουν εκδοθεί.
Μπορεί ένα Key Attestation να καλύπτει περισσότερα από ένα κλειδιά;
Ναι. Το attested_keys μπορεί να περιλαμβάνει πολλά δημόσια κλειδιά από το ίδιο WSCD ή keystore, και έτσι λειτουργεί η μαζική έκδοση: ο εκδότης συνδέει κάθε διαπιστευτήριο της παρτίδας με διαφορετικό κλειδί, και μία υπογραφή του Παρόχου Πορτοφολιού τα καλύπτει όλα. Όταν το Key Attestation αποστέλλεται σε απόδειξη jwt, η Μονάδα Πορτοφολιού υπογράφει την απόδειξη μόνο με το πρώτο κλειδί της λίστας.
Πηγές
Η σελίδα αυτή έχει ενημερωτικό χαρακτήρα και δεν αποτελεί νομική συμβουλή. Για έγκυρη καθοδήγηση απευθυνθείτε απευθείας στην Ευρωπαϊκή Επιτροπή και το OpenID Foundation.