セキュリティで保護された生体認証のセンサー要件
Microsoft はトラステッド プラットフォーム モジュール (TPM) 2.0 を利用して、ユーザーの生体認証が認証時に提供されなかった場合に、適切なハードウェア上でソフトウェア (カーネル レベルのマルウェアまで) が有効な生体認証を生成できないようにします。
これを行うには、TPM 2.0 セッション ベースの承認と、信頼された実行環境で機能抽出と照合を実行するセンサーを使用します。 セキュリティで保護されたセンサー (セキュリティで保護されたセンサー機能によって報告) が Windows 生体認証フレームワークに初めて表示されると、セキュリティで保護された生体認証センサーと TPM の間で共有されるシークレットがプロビジョニングされます。 そのシークレットは再び OS に公開されることはなく、各センサーに固有です。
認証を実行するために、Windows 生体認証フレームワークは TPM とのセッションを開き、nonce を取得します。 nonce は、セキュリティで保護された一致操作の一部として、セキュリティで保護されたセンサーに渡されます。 センサーは、信頼された実行環境で一致を実行し、成功した場合は、その nonce と識別されたユーザーの ID に対して HMAC を計算します。
Windows 生体認証フレームワークでは、この HMAC を使用して、特定されたユーザーに対して TPM で暗号化操作を実行できます。 HMAC は有効期間が短く、数秒後に期限切れになります。
このプロトコルを使用すると、初期プロビジョニング後、OS に機密データは含めなくなります。 シークレットは TPM とセキュリティで保護されたセンサーによって保持され、認証中に公開されるのは有効期間の短い HMAC のみです。
セキュリティで保護されたセンサー機能
WINBIO_CAPABILITY_SECURE_SENSOR機能は、エンジン アダプター インターフェイスの v 4.0 で新しいエンジン アダプター メソッドをサポートしている場合、センサーによって報告される必要があります。
センサーがセキュリティで保護されたセンサーであることを主張するには、次の要件を満たす必要があります。
- センサーの一致エンジンは、通常の OS から分離する必要があります (たとえば、信頼された実行環境を使用)。
- センサーは、分離された一致エンジンへのサンプルの安全な入力をサポートする必要があります。サンプルの内容を通常の OS に公開してはなりません
- 一致するエンジンでは、次に示す新しい v4 メソッドを実装することで、セキュリティで保護された資格情報のリリースをサポートする必要があります
- センサーは、プレゼンテーション攻撃の検出をサポートする必要があります。
WINBIO_CAPABILITY_SECURE_SENSOR値は、 WINBIO_CAPABILITIES 構造体に含まれています。 これを定義する方法の例を次に示します。
#define WINBIO_CAPABILITY_SECURE_SENSOR ((WINBIO_CAPABILITIES)0x00000100)
エラー コード
//
// MessageId: WINBIO_E_INVALID_KEY_IDENTIFIER
//
// MessageText:
//
// The key identifier is invalid.
//
#define WINBIO_E_INVALID_KEY_IDENTIFIER ((HRESULT)0x80098052L)
//
// MessageId: WINBIO_E_KEY_CREATION_FAILED
//
// MessageText:
//
// The key cannot be created.
//
#define WINBIO_E_KEY_CREATION_FAILED ((HRESULT)0x80098053L)
//
// MessageId: WINBIO_E_KEY_IDENTIFIER_BUFFER_TOO_SMALL
//
// MessageText:
//
// The key identifier buffer is too small.
//
#define WINBIO_E_KEY_IDENTIFIER_BUFFER_TOO_SMALL ((HRESULT)0x80098054L)
エンジン アダプター インターフェイス v 4.0
エンジン アダプター インターフェイスのバージョンが 4.0 に増加しました。 新しいインターフェイスの追加機能により、センサーは TPM 2.0 に参加できます。 これらは次のとおりです。
//
// Additional methods available in V4.0 and later
//
typedef HRESULT
(WINAPI *PIBIO_ENGINE_CREATE_KEY_FN)(
_Inout_ PWINBIO_PIPELINE Pipeline,
_In_reads_(KeySize) const UCHAR* Key,
_In_ SIZE_T KeySize,
_Out_writes_bytes_to_(KeyIdentifierSize, *ResultSize) PUCHAR KeyIdentifier,
_In_ SIZE_T KeyIdentifierSize,
_Out_ PSIZE_T ResultSize
);
typedef HRESULT
(WINAPI *PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN)(
_Inout_ PWINBIO_PIPELINE Pipeline,
_In_reads_(NonceSize) const UCHAR* Nonce,
_In_ SIZE_T NonceSize,
_In_reads_(KeyIdentifierSize) const UCHAR* KeyIdentifier,
_In_ SIZE_T KeyIdentifierSize,
_Out_ PWINBIO_IDENTITY Identity,
_Out_ PWINBIO_BIOMETRIC_SUBTYPE SubFactor,
_Out_ PWINBIO_REJECT_DETAIL RejectDetail,
_Outptr_result_bytebuffer_(*AuthorizationSize) PUCHAR *Authorization,
_Out_ PSIZE_T AuthorizationSize
);
#define WINBIO_ENGINE_INTERFACE_VERSION_4 WINBIO_MAKE_INTERFACE_VERSION(4,0)
typedef struct _WINBIO_ENGINE_INTERFACE {
WINBIO_ADAPTER_INTERFACE_VERSION Version;
WINBIO_ADAPTER_TYPE Type;
SIZE_T Size;
GUID AdapterId;
PIBIO_ENGINE_ATTACH_FN Attach;
PIBIO_ENGINE_DETACH_FN Detach;
PIBIO_ENGINE_CLEAR_CONTEXT_FN ClearContext;
PIBIO_ENGINE_QUERY_PREFERRED_FORMAT_FN QueryPreferredFormat;
PIBIO_ENGINE_QUERY_INDEX_VECTOR_SIZE_FN QueryIndexVectorSize;
PIBIO_ENGINE_QUERY_HASH_ALGORITHMS_FN QueryHashAlgorithms;
PIBIO_ENGINE_SET_HASH_ALGORITHM_FN SetHashAlgorithm;
PIBIO_ENGINE_QUERY_SAMPLE_HINT_FN QuerySampleHint;
PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN AcceptSampleData; // PROCESSES CURRENT BUFFER FROM PIPELINE AND GENERATES A FEATURE SET IN THE PIPELINE
PIBIO_ENGINE_EXPORT_ENGINE_DATA_FN ExportEngineData; // EXPORTS FEATURE SET OR TEMPLATE
PIBIO_ENGINE_VERIFY_FEATURE_SET_FN VerifyFeatureSet;
PIBIO_ENGINE_IDENTIFY_FEATURE_SET_FN IdentifyFeatureSet;
PIBIO_ENGINE_CREATE_ENROLLMENT_FN CreateEnrollment; // ATTACHES AN EMPTY ENROLLMENT TEMPLATE TO THE PIPELINE
PIBIO_ENGINE_UPDATE_ENROLLMENT_FN UpdateEnrollment; // CONVERTS CURRENT PIPELINE FEATURE SET INTO SOMETHING THAT CAN BE ADDED TO A TEMPLATE
PIBIO_ENGINE_GET_ENROLLMENT_STATUS_FN GetEnrollmentStatus; // QUERIES TEMPLATE ATTACHED TO THE PIPELINE TO SEE IF IT IS READY TO COMMIT
PIBIO_ENGINE_GET_ENROLLMENT_HASH_FN GetEnrollmentHash;
PIBIO_ENGINE_CHECK_FOR_DUPLICATE_FN CheckForDuplicate; // DETERMINES WHETHER TEMPLATE IS ALREADY ENROLLED
PIBIO_ENGINE_COMMIT_ENROLLMENT_FN CommitEnrollment;
PIBIO_ENGINE_DISCARD_ENROLLMENT_FN DiscardEnrollment;
PIBIO_ENGINE_CONTROL_UNIT_FN ControlUnit;
PIBIO_ENGINE_CONTROL_UNIT_PRIVILEGED_FN ControlUnitPrivileged;
#if (NTDDI_VERSION >= NTDDI_WIN8)
//
// V2.0 methods begin here...
//
PIBIO_ENGINE_NOTIFY_POWER_CHANGE_FN NotifyPowerChange;
PIBIO_ENGINE_RESERVED_1_FN Reserved_1;
#endif
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
//
// V3.0 methods begin here...
//
PIBIO_ENGINE_PIPELINE_INIT_FN PipelineInit;
PIBIO_ENGINE_PIPELINE_CLEANUP_FN PipelineCleanup;
PIBIO_ENGINE_ACTIVATE_FN Activate;
PIBIO_ENGINE_DEACTIVATE_FN Deactivate;
PIBIO_ENGINE_QUERY_EXTENDED_INFO_FN QueryExtendedInfo;
PIBIO_ENGINE_IDENTIFY_ALL_FN IdentifyAll;
PIBIO_ENGINE_SET_ENROLLMENT_SELECTOR_FN SetEnrollmentSelector;
PIBIO_ENGINE_SET_ENROLLMENT_PARAMETERS_FN SetEnrollmentParameters;
PIBIO_ENGINE_QUERY_EXTENDED_ENROLLMENT_STATUS_FN QueryExtendedEnrollmentStatus;
PIBIO_ENGINE_REFRESH_CACHE_FN RefreshCache;
PIBIO_ENGINE_SELECT_CALIBRATION_FORMAT_FN SelectCalibrationFormat;
PIBIO_ENGINE_QUERY_CALIBRATION_DATA_FN QueryCalibrationData;
PIBIO_ENGINE_SET_ACCOUNT_POLICY_FN SetAccountPolicy;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
//
// V4.0 methods begin here...
//
PIBIO_ENGINE_CREATE_KEY_FN CreateKey;
PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN IdentifyFeatureSetSecure;
#endif
} WINBIO_ENGINE_INTERFACE, *PWINBIO_ENGINE_INTERFACE;
要件
Windows 10