- From: Emil Lundberg via GitHub <sysbot+gh@w3.org>
- Date: Mon, 09 Aug 2021 19:13:44 +0000
- To: public-webauthn@w3.org
So if I understand this correctly, a `packed` format `AttObjForDevicePublicKey` would be constructed like this? ``` AttObjForDevicePublicKey = { sig: bstr, ; result of sign((clientDataHash || userCredentialId), devicePrivateKey) aaguid: bstr, ; authenticator's AAGUID (16 bytes fixed-length) dpk: bstr, ; the Device Public Key (self-describing variable length, COSE_Key format, CBOR-encoded)). context: "device" / "app" fmt: "packed", attStmt: { alg: -7, ; COSEAlgorithmIdentifier for attestation key pair sig: bstr, ; result of sign((aaguid || dpk), attestationPrivateKey) ; instead of the usual sign((authenticatorData || clientDataHash), attestationPrivateKey) x5c: [ attestnCert: bytes, * (caCert: bytes) ] } } ``` I feel like the custom signing procedure might be a bit too confusing, being _almost_ the same as usual but not quite. It looks like this is going to require custom verification logic either way, so maybe we can move the difference around a bit? For example, here's one idea: Instead of modifying the signing procedure arguments, run the signing procedure as usual and store the resulting attestation object and client data. In subsequent re-runs, send all of it back to the RP. So it might instead look something like this: ``` AttObjForDevicePublicKey = { sig: bstr, ; result of sign((clientDataHash || userCredentialId), devicePrivateKey) ; Maybe this could also sign over attObj and/or attObjClientDataJSON. aaguid: bstr, ; authenticator's AAGUID (16 bytes fixed-length) dpk: bstr, ; the Device Public Key (self-describing variable length, COSE_Key format, CBOR-encoded)). context: "device" / "app" attObjClientDataJSON: bstr, ; the (cached) clientDataJSON for the ceremony when dpk was created attObj: { ; the (cached) attestation object for the ceremony when dpk was created fmt: "packed", authData: bytes ; ; the (cached) authenticator data for the ceremony when dpk was created attStmt: { alg: -7, ; COSEAlgorithmIdentifier for attestation key pair sig: bstr, ; (cached) result of sign((authData || sha256(attObjClientDataJSON)), attestationPrivateKey) x5c: [ attestnCert: bytes, * (caCert: bytes) ] } } } ``` Of course, this only moves the complexity slightly, but to me it seems a bit cleaner that the existing attestation signing and verification procedures can be used as-is as a larger unmodified "block". Composition instead of polymorphism, I guess. -- GitHub Notification of comment by emlun Please view or discuss this issue at https://github.com/w3c/webauthn/issues/1658#issuecomment-895473466 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Monday, 9 August 2021 19:13:46 UTC