Extension: LargeBlobKey

January 31, 2022 ยท View on GitHub

LargeBlobKey extension allows authenticator to generate an opaque random, 32 byte array associated with the credential. LargeBlobsKey can be used together with the LargeBlobs to encrypt/decrypt data.

The key MUST not be reused from other extensions such as Hmac-Secret

Feature detection

Authenticator advertises support for this extension by returning largeBlobKey in the GetInfo.extensions(0x02).

Authenticator that supports largeBlobKey must also support LargeBlobs option.

Create/MakeCredential

To enable extension the Platform will send MakeCredential with extensions map containing largeBlobKey set to true.

MakeCredential_Request
{
    1: fe87bb84f9ee...,    // clientDataHash
    2: {...},              // rp
    3: {...},              // user
    4: [...],              // pubKeyCredParams
    5: [...],              // excludeList
    6: {                   // extensions
        "largeBlobKey": true
    },
    8: 51e971f093509e4..., // pinUvAuthParam
    9: 2                   // pinUvAuthProtocol
}

The the authenticator will respond with MakeCredential result, largeBlobKey(0x05) set to new key.

MakeCredential_Result
{
    1: "packed",             // fmt
    2: 9569088f1ecee32329... // authData
    3: {...},                // attStmt
    // largeBlobKey 32 byte long
    5: 60d4ebc791530405738f00b18d0d1dec63726906e2ef692169e183ad7e6b39d2
}

Get/GetAssertion

The platform can retrieve largeBlobKey for the existing credential by sending GetAssertion request with the extension containing largeBlobKey set to true:

GetAssertion_Request
{
    1: "webauthn.works",   // rpid
    1: 39fcc878ea01...,    // clientDataHash
    2: [...],              // allowList
    4: {                   // extensions
        "largeBlobKey": true
    },
    6: 5544d1bf5f49563..., // pinUvAuthParam
    7: 2                   // pinUvAuthProtocol
}

The the authenticator will respond with GetAssertion result, largeBlobKey(0x07) set to the credential largeBlobKey key.

GetAssertion_Result
{
    1: {...},                // credential
    2: 824fc6f45e0d2ee82f... // authData
    3: 2a7eebb66f64b46f13... // signature
    // largeBlobKey 32 byte long
    7: 60d4ebc791530405738f00b18d0d1dec63726906e2ef692169e183ad7e6b39d2
}

Credential Management API

The LargeBlobKey can be accessed as well via CredManAPI credential enumeration response largeBlobKey(0x0B).