diff --git a/ADIA-Security-Reference.bs b/ADIA-Security-Reference.bs
index 3d94312..80ec2cf 100644
--- a/ADIA-Security-Reference.bs
+++ b/ADIA-Security-Reference.bs
@@ -33,14 +33,16 @@ spec:webidl; type:interface; text:Promise
# ADIA Security and Privacy Goals # {#sctn-adia-secref-goals}
1. Allow Users to present a claim to the service provider, where
- 1. SG-1: the service provider can verify that the shared claim was issued by an Issuer belonging to the ADIA ecosystem (and the assurance level this issuer was vetted at) and
- 2. SG-2: the service provider can verify that the entity presenting the claim is the subject of that claim
-2. SG-3: Ensure that the user needs to consent with the action of sharing the claim(s)
-3. SG-4: Ensure that the user can select the claims to be shared (not only all claims or none).
-4. SG-5: Ensure the issuer doesn't learn who the service provider is (Note: the service provider will learn who the issuer is)
-5. SG-6: Ensure that a service provider that receives two claims doesn't learn whether the two claims belong to the same user *beyond* the degree of overlapping claims, i.e. We don't introduce another correlation handle. For example, if a service provider receives two claims that the respective subject is older than 21, there is no way for the service provider to know whether the two claims belong to the same or two different users. In the case the full name, birthdate etc. are included in the claims the service provider will learn that two claims containing the same attributes will likely or even certainly relate to the same users.
-6. SG-7: Assessable level of assurance - throughout the system (IAL and AAL)
-7. SG-8: Robust minimum assurance level with
+ 1. SG-0: the claims accurately reflect the subject and
+ owner of the VC
+ 2. SG-1: the service provider can verify that the shared claim was issued by an Issuer belonging to the ADIA ecosystem (and the assurance level this issuer was vetted at) and
+ 3. SG-2: the service provider can verify that the entity presenting the claim is the subject of that claim
+2. SG-3: Ensure that the user needs to consent with the action of sharing the claim(s)
+3. SG-4: Ensure that the user can select the claims to be shared (not only all claims or none).
+4. SG-5: Ensure the issuer doesn't learn who the service provider is (Note: the service provider will learn who the issuer is)
+5. SG-6: Ensure that a service provider that receives two claims doesn't learn whether the two claims belong to the same user *beyond* the degree of overlapping claims, i.e. We don't introduce another correlation handle. For example, if a service provider receives two claims that the respective subject is older than 21, there is no way for the service provider to know whether the two claims belong to the same or two different users. In the case the full name, birthdate etc. are included in the claims the service provider will learn that two claims containing the same attributes will likely or even certainly relate to the same users.
+6. SG-7: Assessable level of assurance - throughout the system (IAL and AAL)
+7. SG-8: Robust minimum assurance level with
1. Credential guessing resilience, i.e. provide robust protection against eavesdroppers, e.g. be resilient to physical observation, resilient to targeted impersonation, resilient to throttled and unthrottled guessing
2. Credential Disclosure Resilience: Be resilient to phishing attacks and real-time phishing attack, including resilience to online attacks by adversaries able to actively manipulate network traffic
3. Verifier Leak Resilience: Be resilient to leaks from other relying parties. I.e., nothing that a verifier could possibly leak can help an attacker impersonate a user to another relying party (e.g. claim's subject to service provider or user to issuer).
@@ -53,27 +55,188 @@ Issue: The DAS will learn whenever claims are presented - this needs
to be discussed somewhere.
# ADIA Assets to be Protected # {#sctn-adia-secref-assets}
-See section "Trust Model" of the ADIA specification.
+See section "Trust Model" of the ADIA specification for an overview.
-1. Private keys of:
- 1. ADIA Global Directory
- 1. ADIA Regional Directory
- 1. Digital Address Service (DAS), key maintained by the DAS agent.
- 1. Issuer, key maintained by the Issuer Agent.
- 1. Service Provider, key maintained by the Service Provider Agent.
- 1. User
- 1. DAS User ID key, maintained by the DAS User Agent
- 2. FIDO keys, maintained by the user's FIDO Authenticator(s), and all other FIDO related assets that need protection, see
- FIDO
- Security Reference.
+## Private Key Assets ## {#sctn-adia-secref-assets-sk}
+The following private keys need to be protected against disclosure ("confidentiality protection"):
+
+
+
+
+
+ Asset Protection Method
+ AGD_ID_SK TODO
+ ARD_ID_SK TODO
+ DAS_USER_ID_SK TODO
+ USER_FIDO_SK maintained by the user's FIDO Authenticator(s), and all other FIDO related assets that need protection, see
+ FIDO
+ Security Reference.
+
+
+ DAS_ID_SK TODO
+ ISSUER_ID_SK TODO
+
+ SP_ID_SK TODO
+
+
+
+ Asset Protection Method
+ Issuer stored identity proofing records and their relation to the User's DA Stored in Issuer DB
+
+Issue: Is this proprietary to the Issuer? Do we have minimum security
+ requirements for that? Do we specify a minimum retention period
+ for this?
+
+
+ Relation of a Digital Address to a Trust Anchor in
+ general Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ AGD_ID to AGD_DA relation Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ ARD_ID to ARD_DA relation Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ DAS_USER_ID to User's DA relation Stored in ARD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ DAS_ID to DAS_DA relation Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ ISSUER_ID to ISSUER_DA relation Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+
+ SP_ID to SP_DA relation Stored in AGD as (TA, ID, DA, HomeDASId) tuple.
+
+Issue: What is the protection method? How can that be audited?
+
+ DAS_USER_ID_PK to DAS_USER_ID relation signed DIDDoc-USER
+ ISSUER_ID_PK to ISSUER_ID relation signed DIDDoc-ISSUER
+ SP_ID_PK to SP_ID relation signed DIDDoc-SP
+ DAS_ID_PK to DAS_ID relation signed DIDDoc-DAS
+ ARD_ID_PK to ARD_ID relation signed DIDDoc-ARD
+
+ AGD_ID_PK to AGD_ID relation signed DIDDoc-AGD
+ Relation of the various Claims in a VC to the
+ Claim identifying the (Credential) Subject (see ADIA Trust Model).
+ signed VC object
+
+
+ Relation of a VC to the VP and to the respective public key
+ that is used to the presentation.
+ signed VP object
+
+
+
+
+ Security Goal Supporting Security Measures
+ SG-0 Claims are verified by
+ Issuers. TODO: add stipulatoins for Issuer
+ systems to validate the claims and to keep the records
+ integrity protected - even under attack. Add details on dual
+ control to limit risk of malicious employee attack.
+ SG-1 SM-1
+ SG-2 TODO: Seems unclear at this stage! We
+ need some random value (server nonce) generated by the SP that is returned in
+ step "Wants proof and requests User to connect DAA via SP_ID" in figure "Verifiable Presentation and Verification (Option
+ 1)" and the same applies to the Optopn 2 Anonymous flow. This
+ server nonce also needs to be included in step "Invites SP for
+ DIDComm connection (mutual authentication)" since the SP wants to
+ know whether this communication relates to the session initiated
+ from some user in the beginning.
+
+ SG-3 User consent is enforced by the User's Cloud
+ Agent via the DAA.
+
+ SG-4 Claim selection is performed by
+ User's Cloud Agent via the
+ DAA. A VC structure is being
+ used that supports fine grained
+ claim selection (TODO add reference).
+
+ SG-5 TODO: Ensure that step "Request for
+ VC along with sending User's consent" in "VC
+ Presentation and Verification" doesn't include any SP specific
+ hints. Since this communication with the Issuer is synchronous,
+ the Issuer at least learns the time when the user wants to share
+ the VC. That could statistically disclose some information
+ about the SP. The Issuer learns how often a user shares a
+ VC. Ideally, ADIA would "hide" that information and "cache" the VC.
+
+ SG-6 SM-5
+ SG-7 TODO: We need to track IAL and AAL
+ throughout the system. We also need to avoid unexpected attack
+ points that might reduce the IAL/AAL.
+
+ SG-8 TODO
| T-4.1.1 | Malicious Employee | Violates |
|---|---|---|
| + |
+ A malicious employee forges an ID Verification.
+
+ Consequences: + + Issue: TODO + + +Mitigations: + + Issue: TODO + + |
+ [=SG-1=] | +
| T-6.1.1 | DAA Corruption | Violates |
|---|---|---|
| + |
+ The Digital Address Application used by the user
+ is corrupted (e.g. user installed and uses a
+ malicious version or the original DAA was modified
+ by malware).
+
+ Consequences: + The USER_FIDO_PK/SK might be weakly protected + (e.g. generated in SW rather than TEE, or + generated such that it could be used without a + user gesture, or generated such that export is allowed). + + The USER_FIDO_PK might be misused for unexpected + purposes. + + QR-code scanned at "User Onboarding to First + Issuer" might be misinterpreted. + + Data for remote ID Proofing might be taken from a + source other than the device's live camera (e.g. a + recording). + + ID-Attributes for HIDA computation might be + malicious in User Initiated Digital Address Creation + with DAA. + + The DAA might maliciously disclose the DAS_USER_ID + and/or the DA. + + The DAA might maliciously disclose the SP_ID + to the issuer. + + The DAA might display a malicious set of + attributes to be included in a verifiable claim in VC + Issued to a User by an Issuer. + + The DAA might display a malicious set of + attributes to be included in a verifiable claim to + be presented to a service provider or a malicious + service provider name in Verifiable Presentation and + Verification. + + The DAA might maliciously chose Option 1 instead + of Option 2 in Verifiable Presentation and + Verification. + +Mitigations: + Attestation of FIDO Authenticator allows the + server to verify whether USER_FIDO_PK was + generated in an authenticator with acceptable + security characteristics. + + Issue: Should add a need to using SafetyNet and + the iOS equivalent in order to allow the server to + verify that the original DAA is being used. + |
+ [=SG-1=], [=SG-3=], [=SG-4=], [=SG-5=], [=SG-6=] | +
| T-6.1.2 | Cloud Agent Corruption | Violates |
|---|---|---|
| + |
+ The Cloud Agent that acts on behalf of the user is
+ attacked.
+
+ Consequences: + The attacker might try to extract the DAS_USER_ID_SK. + + The attacker might try to misuse the DAS_USER_ID_SK + (e.g. to sign or decrypt messages withouh approval + of the user). + + Issue: Should consider renaming DAS_USER_ID_PK to + CA_USER_ID_PK (for cloud agent) + +Mitigations: + + Issue: TODO, e.g. let Cloud Agent use HSMs and + tight coupling of the HSM to the User's FIDO Key(s). + + |
+ [=SG-2=], [=SG-3=], [=SG-4=], [=SG-5=], [=SG-6=] | +