WebAuthn,获取credentialPublicKey长度
WebAuthn, getting the credentialPublicKey length
在解析 CBOR attestationObject
之后,我现在正在尝试解析 authData
。
这包含:
https://w3c.github.io/webauthn/#authenticator-data
- 32 字节,
rpIdHash
- 1 字节,
flags
(包括 AT
和 ED
标志)
- 4 字节,
signCount
- ?字节,
attestedCredentialData
- ?字节,
extensions
假设 AT
标志为真,attestedCredentialData
从字节 37 开始,包含:
https://w3c.github.io/webauthn/#sctn-attested-credential-data
- 16 字节,
aaguid
- 2 字节,
credentialIdLength
(字节 53 - 55,见于许多实现)
- credentialIdLength 字节,
credentialId
- ?字节,
credentialPublicKey
这意味着我可以获得 credentialIdLength
,并提取 credentialId
。
但是credentialPublicKey
有多长?
我可以读到authData
的结尾;这就是他们在 https://webauthn.guide/ 上显示的内容:
const publicKeyBytes = authData.slice(55 + credentialIdLength);
但是,如果您回头看看 authData,它可能在此之后包含 extensions
数据(如果 ED
标志为真)。
我发现证明概览图片对其中的大部分内容非常有用:
问题已被提出并回答:
简而言之:你无法知道长度。无论如何解析它的一种方法是从 1(然后是 2、3、... 字节)开始解析多个字节,直到 CBOR 解析成功。
在解析 CBOR attestationObject
之后,我现在正在尝试解析 authData
。
这包含:
https://w3c.github.io/webauthn/#authenticator-data
- 32 字节,
rpIdHash
- 1 字节,
flags
(包括AT
和ED
标志) - 4 字节,
signCount
- ?字节,
attestedCredentialData
- ?字节,
extensions
假设 AT
标志为真,attestedCredentialData
从字节 37 开始,包含:
https://w3c.github.io/webauthn/#sctn-attested-credential-data
- 16 字节,
aaguid
- 2 字节,
credentialIdLength
(字节 53 - 55,见于许多实现) - credentialIdLength 字节,
credentialId
- ?字节,
credentialPublicKey
这意味着我可以获得 credentialIdLength
,并提取 credentialId
。
但是credentialPublicKey
有多长?
我可以读到authData
的结尾;这就是他们在 https://webauthn.guide/ 上显示的内容:
const publicKeyBytes = authData.slice(55 + credentialIdLength);
但是,如果您回头看看 authData,它可能在此之后包含 extensions
数据(如果 ED
标志为真)。
我发现证明概览图片对其中的大部分内容非常有用:
问题已被提出并回答:
简而言之:你无法知道长度。无论如何解析它的一种方法是从 1(然后是 2、3、... 字节)开始解析多个字节,直到 CBOR 解析成功。