@@ -647,15 +647,16 @@ <h3>
647
647
structures.
648
648
</ li >
649
649
< li > MUST have undergone privacy review by the W3C's < a href =
650
- "https://www.w3.org/Privacy/IG/ "> Privacy Interest Group</ a > and
651
- < a href ="https://www.w3.org/groups/wg/fedid/ "> Federated Identity
652
- Working Group</ a > .
650
+ "https://www.w3.org/groups/wg/privacy/ "> Privacy Working Group</ a > and
651
+ < a href ="https://www.w3.org/groups/wg/fedid/ "> Federated Identity Working
652
+ Group</ a > .
653
653
< aside class ="note " title ="Organizing reviews ">
654
654
Once an expression of registration is received via GitHub, the
655
655
registry maintainers will organize the privacy review with the
656
- < a href ="https://www.w3.org/Privacy/IG/ "> Privacy Interest Group</ a > .
657
- Please see the [[[[security-privacy-questionnaire]]] for the kind of
658
- questions that will be asked of the protocol you are registering.
656
+ < a href ="https://www.w3.org/groups/wg/privacy/ "> Privacy Working
657
+ Group</ a > . Please see the [[[security-privacy-questionnaire]]] for
658
+ the kind of questions that will be asked of the protocol you are
659
+ registering.
659
660
</ aside >
660
661
</ li >
661
662
< li > MUST have undergone security review by the < a href =
@@ -900,10 +901,10 @@ <h2>
900
901
</ ul >
901
902
< p >
902
903
Instead, these considerations focus on the Digital Credentials API
903
- itself, and describe how user agents can satisfy their < a href =
904
- "https://w3ctag.github.io/ privacy-principles/ #dfn-user-agent-duties "> user
905
- agent duties </ a > in an implementation of the API, taking into account
906
- the relevant privacy properties of the ecosystem it interacts with.
904
+ itself, and describe how user agents can satisfy their < a data-cite =
905
+ "privacy-principles#dfn-user-agent-duties "> user agent duties </ a > in an
906
+ implementation of the API, taking into account the relevant privacy
907
+ properties of the ecosystem it interacts with.
907
908
</ p >
908
909
< p >
909
910
The privacy considerations for digital credentials are not static. They
@@ -945,6 +946,178 @@ <h3>
945
946
the exchange of information, before the exchange begins.
946
947
</ p >
947
948
</ section >
949
+ < section >
950
+ < h3 >
951
+ Exchange Protocol and Credential Format
952
+ </ h3 >
953
+ < p >
954
+ Because the Digital Credentials API sits at the center of an exchange
955
+ that involves multiple independent parties, the exchange protocol and
956
+ credential format used by these parties for exchanging user
957
+ information are crucial to the user agent's goal of protecting user
958
+ privacy.
959
+ </ p >
960
+ < p >
961
+ The protocol registry for the Digital Credentials API is designed to
962
+ ensure that, among other requirements, supported protocols facilitate
963
+ specific privacy-enhancing capabilities. Protocols are required to
964
+ undergo privacy review by the W3C's < a href =
965
+ "https://www.w3.org/groups/wg/privacy/ "> Privacy Working Group</ a > .
966
+ </ p >
967
+ < h4 >
968
+ Exchange Protocol Considerations for User Privacy
969
+ </ h4 >
970
+ < h5 >
971
+ Selective disclosure
972
+ </ h5 >
973
+ < p >
974
+ < a data-cite =
975
+ "credential-considerations#selective-disclosure "> Selective
976
+ disclosure</ a > is a fundamental technique for < a data-cite =
977
+ "privacy-principles#data-minimization "> data minimization</ a > that
978
+ allows holders to share the minimum required information that is
979
+ requested by a verifier. Protocols are expected to facilitate
980
+ selective disclosure by allowing the verifier to specify the exact
981
+ claims needed.
982
+ </ p >
983
+ < h5 >
984
+ Unlinkable presentations
985
+ </ h5 >
986
+ < p >
987
+ < a data-cite =
988
+ "credential-considerations#unlinkable-presentations "> Unlinkability</ a >
989
+ is a property that ensures that, if a user presents attributes from a
990
+ credential multiple times, verifiers cannot link these separate
991
+ presentations to conclude they concern the same user
992
+ (verifier-verifier linkability), or that verifiers can not collude
993
+ with issuers to report the exchange of a credential from a wallet to
994
+ the issuer (verifier-issuer linkability). The former is a property
995
+ that can be maintained by the wallet and issuer, e.g. through issuing
996
+ fresh credentials for individual verifiers.
997
+ </ p >
998
+ < p >
999
+ While the latter is achievable, e.g. through < a data-cite =
1000
+ "vc-data-model#zero-knowledge-proofs "> Zero-Knowledge Proofs</ a > ,
1001
+ design choices of the API such as encrypted responses make it
1002
+ impossible for a user agent to prove that verifier-issuer
1003
+ unlinkability was achieved in practice. Nonetheless, protocols are
1004
+ requested to limit linkability wherever possible.
1005
+ </ p >
1006
+ < p >
1007
+ Note that unlinkability is exclusively a consideration for attributes
1008
+ that can not be linked to a specific user identity. Inherently linkable
1009
+ attributes such as names, driver's license numbers or phone numbers do
1010
+ not benefit from unlinkability.
1011
+ </ p >
1012
+ < p >
1013
+ Through the Digital Credentials API, the user agent can help verifiers
1014
+ and wallets exchange unlinkable attributes, but it can not guarantee
1015
+ that no linkable information is passed between verifiers and wallets.
1016
+ It is recommended that user agents account for this fact in their
1017
+ user permission experience.
1018
+ </ p >
1019
+ < p class ="issue " data-number ="279 ">
1020
+ Which level of unlinkability is the goal for this API? Can we
1021
+ normatively enforce support for any particular unlinkability features
1022
+ as part of the protocol registry inclusion criteria?
1023
+ </ p >
1024
+ < h5 >
1025
+ "Phone home" mechanisms
1026
+ </ h5 >
1027
+ < p >
1028
+ < a data-cite ="credential-considerations#no-phoning-home "> "Phoning
1029
+ home"</ a > refers to scenarios where the presentation or verification
1030
+ of a digital credential causes a notification or communication back
1031
+ to the issuer or another central entity, which can lead to tracking
1032
+ and profiling of individuals.
1033
+ </ p >
1034
+ < p >
1035
+ Similar to unlinkability, it is impossible for user agents to ensure
1036
+ that an issuer isn't actively involved in the creation or validation
1037
+ of credential presentations after a user has given permission to
1038
+ proceed with a credential request. From that point on, the wallet
1039
+ application owns this decision. While some wallets can be considered
1040
+ user agents, it is generally recommended that the user agent
1041
+ implementing the Digital Credentials API designs its permission
1042
+ experience to prevent < a href =
1043
+ "#permission-prior-to-wallet-selection "> exposure of a request to the
1044
+ wallet application</ a > before user confirmation (keeping in mind
1045
+ < a href ="#multiple-user-agents "> considerations for integrating
1046
+ multiple cooperating user agents</ a > ).
1047
+ </ p >
1048
+ < p >
1049
+ Protocols are required to support mechanisms that allow issuers,
1050
+ wallets and verifiers avoid or reduce the dependence on "phone home"
1051
+ mechanisms.
1052
+ </ p >
1053
+ < p class ="issue " data-number ="279 ">
1054
+ Which level of unlinkability is the goal for this API? To what degree
1055
+ can the spec mandate restrictions to issuer involvement?
1056
+ </ p >
1057
+ < h5 >
1058
+ Unlinkable revocation
1059
+ </ h5 >
1060
+ < p class ="issue " data-number ="280 ">
1061
+ A common instance of issuer involvement in a credential exchange is
1062
+ for credential revocation checks. This is particularly challenging
1063
+ when presentations are intended to be verifier-issuer unlinkable.
1064
+ When credential presentations are made unlinkable through the use of
1065
+ e.g. Zero-Knowledge Proofs, the credential formats used in protocols
1066
+ are expected to support offline revocation methods such as < a href =
1067
+ "https://eprint.iacr.org/2024/657.pdf "> Cryptographic
1068
+ Accumulators</ a > . It is further expected that protocol design and
1069
+ specification discourages the involvement of verifiers for the
1070
+ purpose of revocation where possible.
1071
+ </ p >
1072
+ < p class ="issue " data-number ="280 ">
1073
+ We should discuss whether unlinkable revocation techniques are
1074
+ practical enough to be required normatively.
1075
+ </ p >
1076
+ < h5 >
1077
+ Support for user transparency, permission and consent
1078
+ </ h5 >
1079
+ < p >
1080
+ User understanding and participation are non-negotiable properties of
1081
+ a credential exchange. The protocol is expected to help all involved
1082
+ parties enable user participation by providing the information vital
1083
+ for informed permission and/or consent.
1084
+ </ p >
1085
+ < h5 >
1086
+ Support for verifier authorization
1087
+ </ h5 >
1088
+ < p >
1089
+ Verifier authorization refers to the process by which a verifier
1090
+ proves its identity and demonstrates that it is legitimately entitled
1091
+ to request specific attributes or credentials. This is particularly
1092
+ useful when exchanging sensitive data, such as from government-issued
1093
+ credentials. Verifier authorization can limit unnecessary or abusive
1094
+ credential requests, and ensure that a verifier's access is
1095
+ restricted to the specific credential attributes it registered for.
1096
+ </ p >
1097
+ < p >
1098
+ Checking verifier authorization is usually handled by the wallet, but
1099
+ user agents could find the presence of such a scheme helpful in
1100
+ preventing API abuse and designing a well-informed user permission
1101
+ experience.
1102
+ </ p >
1103
+ < p class ="issue " data-number ="281 ">
1104
+ Should we require protocols to include provisions that allow user
1105
+ agents to understand verifier authorization?
1106
+ </ p >
1107
+ < h5 >
1108
+ Encrypting credential responses
1109
+ </ h5 >
1110
+ < p >
1111
+ To prevent exposure of user information to other parties in
1112
+ "transit", for example browser extensions loaded on verifier pages,
1113
+ and to encourage secure storage of user credentials by the verifier,
1114
+ protocols are required to support and mandate encrypted responses in
1115
+ a credential exchange.
1116
+ </ p >
1117
+ < p class ="issue " data-number ="255 ">
1118
+ Actually write these in the protocol requirements
1119
+ </ p >
1120
+ </ section >
948
1121
< section >
949
1122
< h3 >
950
1123
Unnecessary Requests for Credentials
@@ -1061,7 +1234,7 @@ <h3>
1061
1234
Should the API be designed so the site can provide in-context
1062
1235
explanations?
1063
1236
</ p >
1064
- < h4 >
1237
+ < h4 id =" multiple-user-agents " >
1065
1238
Integrating Multiple User Agents
1066
1239
</ h4 >
1067
1240
< p >
0 commit comments