New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal for blinding claim names #106
Comments
My note about #80 is not correct. The approach is actually quite similar. Besides the differences in the encoding (discussed in more detail in #27), the differences are that in my approach, the SD-JWT structure stays untouched (but may not contain claim names that are not actually the real claim names), whereas in @peppelinux approach, the SD-JWT is changed to contain an array of blinded claim digests. |
There is a wide variety of interesting features once you go down the privacy route: hiding the claim names, event hiding the issuer itself (which can be argued as sensitive as the claim name in some scenarios). I however think that issuers with a well-known public and fixed issuance schema is a far more common scenario, for which our proposed selective disclosure feature offers a simple and useful solution. I can also imagine scenarios as described in this issue, but I'm not sure how realistic/common they are. I'd be in favor of keeping the spec simple, and explore this extra features in subsequent specs or profiles. A solution to the hidden claim name (and value!) is to issue multiple credentials containing various subsets of the available claims. It then helps to know how commonly one is expected to hide the existence of such claims to balance the pain of managing multiple credentials vs. holding one with this selective disclosure feature. |
I don't really know but suspect that one or just a few claim names being hidden still reveals quite a lot. The optionality is nice from some perspectives but also adds complexity in participants having to be able to handle both cases. I honestly don't know if obscuring the claim names is needed or legitimately valuable. But my sense is that it should be an all or nothing thing. |
I really appreciated this proposal Daniel However, from an implementer point of view it's heavy to handle both cases I vote for obscuring the claim names and start working on this new schema I wont show to a rp how many claims I have in my VCs, even if these are linked to well knows schemas we know that the same claims can be adopetd by many schemas, at the same time |
Considering what we discussed during the last meeting, we can consider this issue not of interest anymore and this current proposal can be the only one that may be developed. I believe that for an extendibility of SD-JWT in the future we should consider to abandon the dumped array, eg:
|
Thanks @peppelinux, that's what I did (with one-letter keys for brevity). See #124 for my draft code on this issue (no spec text yet). These are the examples now in the spec - please review: Example 5: Some Blinded ClaimsUser claims: {#example-simple_structured_some_blinded-user_claims} {
"sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
"given_name": "John",
"family_name": "Doe",
"email": "johndoe@example.com",
"phone_number": "+1-202-555-0101",
"secret_club_membership_no": "23",
"other_secret_club_membership_no": "42",
"address": {
"street_address": "123 Main St",
"locality": "Anytown",
"region": "Anystate",
"country": "US"
},
"birthdate": "1940-01-01"
} SD-JWT Payload: {#example-simple_structured_some_blinded-sd_jwt_payload} {
"iss": "https://example.com/issuer",
"sub_jwk": {
"kty": "RSA",
"n": "pm4bOHBg-oYhAyPWzR56AWX3rUIXp11_ICDkGgS6W3ZWLts-hzwI3x65659kg4hVo9dbGoCJE3ZGF_eaetE30UhBUEgpGwrDrQiJ9zqprmcFfr3qvvkGjtth8Zgl1eM2bJcOwE7PCBHWTKWYs152R7g6Jg2OVph-a8rq-q79MhKG5QoW_mTz10QT_6H4c7PjWG1fjh8hpWNnbP_pv6d1zSwZfc5fl6yVRL0DV0V3lGHKe2Wqf_eNGjBrBLVklDTk8-stX_MWLcR-EGmXAOv0UBWitS_dXJKJu-vXJyw14nHSGuxTIK2hx1pttMft9CsvqimXKeDTU14qQL1eE7ihcw",
"e": "AQAB"
},
"iat": 1516239022,
"exp": 1516247022,
"hash_alg": "sha-256",
"sd_digests": {
"sub": "OMdwkk2HPuiInPypWUWMxot1Y2tStGsLuIcDMjKdXMU",
"given_name": "AfKKH4a0IZki8MFDythFaFS_Xqzn-wRvAMfiy_VjYpE",
"family_name": "eUmXmry32JiK_76xMasagkAQQsmSVdW57Ajk18riSF0",
"email": "-Rcr4fDyjwlM_itcMxoQZCE1QAEwyLJcibEpH114KiE",
"phone_number": "Jv2nw0C1wP5ASutYNAxrWEnaDRIpiF0eTUAkUOp8F6Y",
"h:5a2W0_NrlEZzfqmk_7Pq-w": "gc8VzGTImYRXzP6j7q5RomXt2C_wtsOJ3hAHJdTuEIY",
"other_secret_club_membership_no": "IirAwgN-MubteYvJ4fmq04p9PnpRTf7hqg0dzSWRboA",
"address": {
"street_address": "o_yJIdfhKuKVzOF7i1EuakzC5ghd99CX8_nitm-DsRM",
"locality": "ogNqsvRqK0-ZPZc9C3Z4_6APvywm-lrm0oF2gcVtl_4",
"region": "8kFihRLSkEheK0zbEsQ3zKXt8csE6OXJE_jv3032BbU",
"country": "11IMcoA18LrFSpbysx-uqe7N3I3-QZKwCJqYeQuOUY4"
},
"birthdate": "PNtcyxm0Q5PyiBuG4f6eAbK6h4tF2FffwG3xqknZ_5A"
}
} SVC: {#example-simple_structured_some_blinded-svc_payload} {
"sd_release": {
"sub": "{\"s\": \"2GLC42sKQveCfGfryNRN9w\", \"v\": \"6c5c0a49-b589-431d-bae7-219122a9ec2c\"}",
"given_name": "{\"s\": \"6Ij7tM-a5iVPGboS5tmvVA\", \"v\": \"John\"}",
"family_name": "{\"s\": \"Qg_O64zqAxe412a108iroA\", \"v\": \"Doe\"}",
"email": "{\"s\": \"Pc33JM2LchcU_lHggv_ufQ\", \"v\": \"johndoe@example.com\"}",
"phone_number": "{\"s\": \"lklxF5jMYlGTPUovMNIvCA\", \"v\": \"+1-202-555-0101\"}",
"h:5a2W0_NrlEZzfqmk_7Pq-w": "{\"s\": \"5bPs1IquZNa0hkaFzzzZNw\", \"v\": \"23\", \"n\": \"secret_club_membership_no\"}",
"other_secret_club_membership_no": "{\"s\": \"y1sVU5wdfJahVdgwPgS7RQ\", \"v\": \"42\"}",
"address": {
"street_address": "{\"s\": \"C9GSoujviJquEgYfojCb1A\", \"v\": \"123 Main St\"}",
"locality": "{\"s\": \"H3o1uswP760Fi2yeGdVCEQ\", \"v\": \"Anytown\"}",
"region": "{\"s\": \"M0Jb57t41ubrkSuyrDT3xA\", \"v\": \"Anystate\"}",
"country": "{\"s\": \"eK5o5pHfgupPpltj1qhAJw\", \"v\": \"US\"}"
},
"birthdate": "{\"s\": \"WpxJrFuX8uSi2p4ht09jvw\", \"v\": \"1940-01-01\"}"
}
} SD-JWT-R: {#example-simple_structured_some_blinded-sd_jwt_release_payload} {
"nonce": "XZOUco1u_gEPknxS78sWWg",
"aud": "https://example.com/verifier",
"sd_release": {
"given_name": "{\"s\": \"6Ij7tM-a5iVPGboS5tmvVA\", \"v\": \"John\"}",
"family_name": "{\"s\": \"Qg_O64zqAxe412a108iroA\", \"v\": \"Doe\"}",
"birthdate": "{\"s\": \"WpxJrFuX8uSi2p4ht09jvw\", \"v\": \"1940-01-01\"}",
"address": {
"region": "{\"s\": \"M0Jb57t41ubrkSuyrDT3xA\", \"v\": \"Anystate\"}",
"country": "{\"s\": \"eK5o5pHfgupPpltj1qhAJw\", \"v\": \"US\"}"
},
"h:5a2W0_NrlEZzfqmk_7Pq-w": "{\"s\": \"5bPs1IquZNa0hkaFzzzZNw\", \"v\": \"23\", \"n\": \"secret_club_membership_no\"}"
}
} Verified Released Claims: {#example-simple_structured_some_blinded-verified_contents} {
"given_name": "John",
"family_name": "Doe",
"birthdate": "1940-01-01",
"address": {
"region": "Anystate",
"country": "US"
},
"secret_club_membership_no": "23"
} Example 6: All Claim Names BlindedUser claims: {#example-simple_structured_all_blinded-user_claims} {
"sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
"given_name": "John",
"family_name": "Doe",
"email": "johndoe@example.com",
"phone_number": "+1-202-555-0101",
"secret_club_membership_no": "23",
"address": {
"street_address": "123 Main St",
"locality": "Anytown",
"region": "Anystate",
"country": "US"
},
"birthdate": "1940-01-01"
} SD-JWT Payload: {#example-simple_structured_all_blinded-sd_jwt_payload} {
"iss": "https://example.com/issuer",
"sub_jwk": {
"kty": "RSA",
"n": "pm4bOHBg-oYhAyPWzR56AWX3rUIXp11_ICDkGgS6W3ZWLts-hzwI3x65659kg4hVo9dbGoCJE3ZGF_eaetE30UhBUEgpGwrDrQiJ9zqprmcFfr3qvvkGjtth8Zgl1eM2bJcOwE7PCBHWTKWYs152R7g6Jg2OVph-a8rq-q79MhKG5QoW_mTz10QT_6H4c7PjWG1fjh8hpWNnbP_pv6d1zSwZfc5fl6yVRL0DV0V3lGHKe2Wqf_eNGjBrBLVklDTk8-stX_MWLcR-EGmXAOv0UBWitS_dXJKJu-vXJyw14nHSGuxTIK2hx1pttMft9CsvqimXKeDTU14qQL1eE7ihcw",
"e": "AQAB"
},
"iat": 1516239022,
"exp": 1516247022,
"hash_alg": "sha-256",
"sd_digests": {
"h:eluV5Og3gSNII8EYnsxA_A": "bvPLqohL5ROmk2UsuNffH8C1wx9o-ipm-G4SkUwrpAE",
"h:eI8ZWm9QnKPpNPeNenHdhQ": "pCtjs0hC2Klhsnpe7BIqnGAsXlyXXC-lAEgX6isoYVM",
"h:AJx-095VPrpTtN4QMOqROA": "HS1Ht-bTrXsSTw9JdcHIbTFDkEI_IY52_cmzUgxWZ0k",
"h:G02NSrQfjFXQ7Io09syajA": "M2YQ_j8OPPBK3ZLhPPP6_AdSa2-rug2urYjgk_ML_QM",
"h:nPuoQnkRFq3BIeAm7AnXFA": "-Brzrp2cs-8nLs7rQI89YJ76s3PrbVe3n_5hlYCy1cE",
"h:5a2W0_NrlEZzfqmk_7Pq-w": "gc8VzGTImYRXzP6j7q5RomXt2C_wtsOJ3hAHJdTuEIY",
"address": {
"h:HbQ4X8srVW3QDxnIJdqyOA": "39o5dKobVi8c0dLpg4sjd7zW18UONRra0ht9mgu4hec",
"h:kx5kF17V-x0JmwUx9vgvtw": "wqueD5ABJ3bTyGSckOMpzI7YUvcCO2l-40vi6JMYsYY",
"h:OBKlTVlvLg-AdwqYGbP8ZA": "S11dsdFN97YtrA2o3yZ0eBbf1zn-izejORU-fyMtynI",
"h:DsmtKNgpV4dAHpjrcaosAw": "-0XEQHSNzMu244QaOpLmPD3JkdZN8SrqbEQ4VDufu9A"
},
"h:j7ADdb0UVb0Li0ciPcP0ew": "X_v1hrkQIH_0LBM8TncMMTBzYN9UJc8FmJRda7yfY8g"
}
} SVC: {#example-simple_structured_all_blinded-svc_payload} {
"sd_release": {
"h:eluV5Og3gSNII8EYnsxA_A": "{\"s\": \"2GLC42sKQveCfGfryNRN9w\", \"v\": \"6c5c0a49-b589-431d-bae7-219122a9ec2c\", \"n\": \"sub\"}",
"h:eI8ZWm9QnKPpNPeNenHdhQ": "{\"s\": \"6Ij7tM-a5iVPGboS5tmvVA\", \"v\": \"John\", \"n\": \"given_name\"}",
"h:AJx-095VPrpTtN4QMOqROA": "{\"s\": \"Qg_O64zqAxe412a108iroA\", \"v\": \"Doe\", \"n\": \"family_name\"}",
"h:G02NSrQfjFXQ7Io09syajA": "{\"s\": \"Pc33JM2LchcU_lHggv_ufQ\", \"v\": \"johndoe@example.com\", \"n\": \"email\"}",
"h:nPuoQnkRFq3BIeAm7AnXFA": "{\"s\": \"lklxF5jMYlGTPUovMNIvCA\", \"v\": \"+1-202-555-0101\", \"n\": \"phone_number\"}",
"h:5a2W0_NrlEZzfqmk_7Pq-w": "{\"s\": \"5bPs1IquZNa0hkaFzzzZNw\", \"v\": \"23\", \"n\": \"secret_club_membership_no\"}",
"address": {
"h:HbQ4X8srVW3QDxnIJdqyOA": "{\"s\": \"y1sVU5wdfJahVdgwPgS7RQ\", \"v\": \"123 Main St\", \"n\": \"street_address\"}",
"h:kx5kF17V-x0JmwUx9vgvtw": "{\"s\": \"C9GSoujviJquEgYfojCb1A\", \"v\": \"Anytown\", \"n\": \"locality\"}",
"h:OBKlTVlvLg-AdwqYGbP8ZA": "{\"s\": \"H3o1uswP760Fi2yeGdVCEQ\", \"v\": \"Anystate\", \"n\": \"region\"}",
"h:DsmtKNgpV4dAHpjrcaosAw": "{\"s\": \"M0Jb57t41ubrkSuyrDT3xA\", \"v\": \"US\", \"n\": \"country\"}"
},
"h:j7ADdb0UVb0Li0ciPcP0ew": "{\"s\": \"eK5o5pHfgupPpltj1qhAJw\", \"v\": \"1940-01-01\", \"n\": \"birthdate\"}"
}
} SD-JWT-R: {#example-simple_structured_all_blinded-sd_jwt_release_payload} {
"nonce": "XZOUco1u_gEPknxS78sWWg",
"aud": "https://example.com/verifier",
"sd_release": {
"h:eI8ZWm9QnKPpNPeNenHdhQ": "{\"s\": \"6Ij7tM-a5iVPGboS5tmvVA\", \"v\": \"John\", \"n\": \"given_name\"}",
"h:AJx-095VPrpTtN4QMOqROA": "{\"s\": \"Qg_O64zqAxe412a108iroA\", \"v\": \"Doe\", \"n\": \"family_name\"}",
"h:j7ADdb0UVb0Li0ciPcP0ew": "{\"s\": \"eK5o5pHfgupPpltj1qhAJw\", \"v\": \"1940-01-01\", \"n\": \"birthdate\"}",
"address": {
"h:OBKlTVlvLg-AdwqYGbP8ZA": "{\"s\": \"H3o1uswP760Fi2yeGdVCEQ\", \"v\": \"Anystate\", \"n\": \"region\"}",
"h:DsmtKNgpV4dAHpjrcaosAw": "{\"s\": \"M0Jb57t41ubrkSuyrDT3xA\", \"v\": \"US\", \"n\": \"country\"}"
}
}
} Verified Released Claims: {#example-simple_structured_all_blinded-verified_contents} {
"given_name": "John",
"family_name": "Doe",
"birthdate": "1940-01-01",
"address": {
"region": "Anystate",
"country": "US"
}
} |
@danielfett you got it in the super right way! |
change it to "using the same salt to generate a digest of a claim name when blinded" |
The choice for names for blinded claim names is discussed in Issue #132. Since the rest has been merged, I'll close this issue. |
I would like to propose a very simple and easy-to-implement approach to blinding claim names.
The idea is to add a new, optional, third element to the SD releases. Let's assume that there is a privacy-sensitive claims, that might show up in the SD-JWT, say
secret_club_membership_number
, and its mere existence should not be revealed to verifiers.The issuer could create an SD-JWT as follows:
The issuer has replaced the claim name
secret_club_membership_number
with an arbitrary string.Only the SVC (and later the SD-JWT-R) would release the claim name:
Notice the third element in the release JSON. It signals to the verifier that the real claim name is different from how the claim was called in the SD-JWT.
The verifier would, during the verification step, replace the claim name
G1fjh8hpWNnb
with the now learned correct claim namesecret_club_membership_number
.Instead of random string as claim names, anything that is unique works:
secret_claim_1
,secret_claim_1
,...public_club_membership_number
,birthdate
(security by obscurity?!)This does not hide the number of secret claim names or that a claim at a certain position in a maybe more complex structure exists. @peppelinux proposal on anonymous claims seems to cover that, but if I understand it correctly, it is less fine-grained: #80
WDYAT? @b---c @Sakurann
The text was updated successfully, but these errors were encountered: