PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN回调函数 (winbio_adapter.h)
由 Windows 生物识别框架调用,以从当前功能集生成模板并在数据库中查找匹配的模板。 如果可以找到匹配项,则引擎适配器必须填写 “标识”、“ 子因素”、“ 授权”和 “AuthorizationSize” 字段。
语法
PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN PibioEngineIdentifyFeatureSetSecureFn;
HRESULT PibioEngineIdentifyFeatureSetSecureFn(
PWINBIO_PIPELINE Pipeline,
const UCHAR *Nonce,
SIZE_T NonceSize,
const UCHAR *KeyIdentifier,
SIZE_T KeyIdentifierSize,
PWINBIO_IDENTITY Identity,
PWINBIO_BIOMETRIC_SUBTYPE SubFactor,
PWINBIO_REJECT_DETAIL RejectDetail,
PUCHAR *Authorization,
PSIZE_T AuthorizationSize
)
{...}
参数
Pipeline
指向与执行操作的生物识别单元关联的WINBIO_PIPELINE结构的指针。
Nonce
指向包含 nonce 的缓冲区的指针。
NonceSize
Nonce 参数指定的缓冲区的大小(以字节为单位)。
KeyIdentifier
指向缓冲区的指针,该缓冲区包含之前调用 EngineAdapterCreateKey 中的密钥的标识符
KeyIdentifierSize
由 KeyIdentifier 参数指定的缓冲区的大小(以字节为单位)。
Identity
指向 WINBIO_IDENTITY 结构的指针,该结构包含从数据库恢复的模板的 SID。 仅当找到匹配项时,才会返回此值。
SubFactor
RejectDetail
指向变量的指针,该变量在捕获失败导致引擎无法执行匹配操作时接收其他信息。 如果最近的捕获成功,请将此参数设置为零。
Authorization
HMAC。 请参阅备注部分。
AuthorizationSize
Authorization 参数指定的缓冲区的大小(以字节为单位)。
返回值
如果 出于任何原因无法使用密钥,则必须返回WINBIO_E_INVALID_KEY_IDENTIFIER。 返回 WINBIO_E_INVALID_KEY_IDENTIFIER 时,将重新预配传感器和 TPM。
注解
授权缓冲区包含以下SHA256_HMAC:
SHA256_HMAC (键、SHA256 (Nonce ||0xffffffe2 ||SHA256 (AccountSid) ) )
-
密钥
密钥是由 EngineAdapterCreateKey 传入的 HMAC 密钥,由 KeyIdentifier 参数标识。
-
Nonce
Nonce 是 Nonce 参数。
-
0xffffffe2
采用大端号格式的 32 位无符号整数。
-
AccountSid
Identity 参数引用的用户的帐户 SID。 可以从 WINBIO_IDENTITY 结构获取 SID 字节。
示例
下面是 SHA256 HMAC 计算的伪代码实现:
// Hash the AccountSid.
assert(Identity->Type == WINBIO_ID_TYPE_SID);
hashHandle = CreateHash(SHA256_ALGORITHM);
HashData(
hashHandle,
Identity->Value.AccountSid.Data,
Identity->Value.AccountSid.Size);
identityHash = FinishHash(hashHandle);
// Hash the parameters.
BYTE bytes[] = {0xff, 0xff, 0xff, 0xe2};
hashHandle = CreateHash(SHA256_ALGORITHM);
HashData(hashHandle, Nonce, NonceSize);
HashData(hashHandle, bytes, sizeof(bytes));
HashData(hashHandle, identityHash, SHA256_DIGEST_LENGTH);
parameterHash = FinishHash(hashHandle);
// Calculate the authorization HMAC
key, keySize = GetKeyFromIdentifier(KeyIdentifier, KeyIdentifierSize);
hashHandle = CreateHash(HMAC_SHA256_ALGORITHM, key, keySize);
HashData(hashHandle, parameterHash, SHA256_DIGEST_LENGTH);
authorization = FinishHash(hashHandle);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2016 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbio_adapter.h (包括 Winbio_adapter.h) |