Windows Unlock mit Windows Hello Begleitgeräten (IoT)

Ein Windows Hello-Begleitgerät ist ein Gerät, das in Verbindung mit Ihrem Windows 10-Desktop verwendet werden kann, um die Benutzerauthentifizierung zu verbessern. Mit dem Windows Hello-Begleitgerät-Framework kann ein Begleitgerät ein umfassendes Erlebnis für Windows Hello bieten, selbst wenn keine biometrischen Daten verfügbar sind (z. B. wenn der Windows 10-Desktop nicht über eine Kamera für die Gesichtsauthentifizierung oder ein Fingerabdrucklesegerät verfügt).

Hinweis

Die API für das Windows Hello-Begleitgerät-Framework ist in Windows 10, Version 2004, veraltet.

Einführung

Codebeispiele finden Sie im Github-Repository Windows Hello-Begleitgerät.

Anwendungsfälle

Es gibt zahlreiche Möglichkeiten, das Windows Hello-Framework für Begleitgeräte zu nutzen, um ein großartiges Windows-Entsperrungserlebnis mit einem Begleitgerät zu schaffen. Zum Beispiel könnten Benutzer:

  • Schließen Sie Ihr Begleitgerät über USB an den PC an, berühren Sie die Taste auf dem Begleitgerät, und der PC wird automatisch entsperrt.
  • Sie tragen ein Telefon in der Tasche, das bereits über Bluetooth mit dem PC gekoppelt ist. Wenn sie die Leertaste auf ihrem PC drücken, erhalten sie eine Benachrichtigung auf ihrem Handy. Genehmigen Sie es und der PC wird einfach freigeschaltet.
  • Tippen Sie Ihr Begleitgerät an ein NFC-Lesegerät, um Ihren PC schnell zu entsperren.
  • Tragen Sie ein Fitnessband, das den Träger bereits authentifiziert hat. Wenn Sie sich dem PC nähern und eine besondere Geste (z. B. Klatschen) ausführen, wird der PC freigeschaltet.

Biometrisch aktivierte Windows Hello-Begleitgeräte

Wenn das Begleitgerät Biometrie unterstützt, kann in einigen Fällen das Windows Biometric Framework eine bessere Lösung sein als das Windows Hello-Begleitgerät-Framework.

Komponenten der Lösung

Das nachstehende Diagramm zeigt die Komponenten der Lösung und wer für ihre Erstellung verantwortlich ist.

Frameworkübersicht

Das Windows Hello-Framework für Begleitgeräte ist als Dienst implementiert, der unter Windows ausgeführt wird (in diesem Artikel Companion Authentication Service genannt). Dieser Dienst ist für die Erstellung eines Entsperrungs-Tokens verantwortlich, das durch einen HMAC-Schlüssel geschützt werden muss, der auf dem Windows Hello-Begleitgerät gespeichert ist. Dadurch wird gewährleistet, dass der Zugriff auf das Entsperrungs-Token das Vorhandensein eines Windows Hello-Begleitgeräts erfordert. Für jedes Tupel (PC, Windows-Benutzer) gibt es ein eindeutiges Freischalt-Token.

Integration mit dem Windows Hello-Begleitgerät-Framework erforderlich:

  • Eine Universal Windows Platform (UWP) Windows Hello-Begleitgerät-App für das Begleitgerät, heruntergeladen aus dem Windows App Store.
  • Die Möglichkeit, zwei 256-Bit-HMAC-Schlüssel auf dem Windows Hello-Begleitgerät zu erstellen und damit HMAC zu generieren (mit SHA-256).
  • Sicherheitseinstellungen auf dem Windows 10-Desktop richtig konfiguriert. Der Companion-Authentifizierungsdienst erfordert die Einrichtung dieser PIN, bevor ein Windows Hello-Companion-Gerät mit ihm verbunden werden kann. Die Benutzer müssen eine PIN über Einstellungen > Konten > Anmeldeoptionen einrichten.

Zusätzlich zu den oben genannten Anforderungen ist die Windows Hello-Begleitgeräte-App verantwortlich für:

  • Benutzererfahrung und Branding bei der Erstregistrierung und späteren Aufhebung der Registrierung des Windows Hello-Begleitgeräts.
  • Läuft im Hintergrund, erkennt das Windows Hello-Begleitgerät, kommuniziert mit dem Windows Hello-Begleitgerät und auch dem Companion Authentication Service.
  • Fehlerbehandlung

Normalerweise werden Begleitgeräte mit einer App für die Ersteinrichtung ausgeliefert, wie z. B. ein Fitnessband, das zum ersten Mal eingerichtet wird. Die in diesem Dokument beschriebene Funktionalität kann Teil dieser Anwendung sein und eine separate Anwendung sollte nicht erforderlich sein.

Benutzer-Signale

Jedes Windows Hello-Begleitgerät sollte mit einer App kombiniert werden, die drei Benutzersignale unterstützt. Diese Signale können in Form einer Handlung oder Geste erfolgen.

  • Absichtssignal: Ermöglicht es dem Benutzer, seine Absicht zum Entsperren zu zeigen, indem er z. B. eine Taste auf dem Windows Hello-Begleitgerät drückt. Das Absichtssignal muss bei Windows Hello-Begleitgerät erfasst werden.
  • Benutzeranwesenheitssignal: Beweist die Anwesenheit des Benutzers. Das Windows Hello-Begleitgerät könnte zum Beispiel eine PIN erfordern, bevor es zum Entsperren des PCs verwendet werden kann (nicht zu verwechseln mit der PC-PIN), oder es könnte einen Tastendruck erfordern.
  • Disambiguierungssignal: Stellt fest, welchen Windows 10-Desktop der Benutzer entsperren möchte, wenn mehrere Optionen für das Windows Hello-Begleitgerät verfügbar sind.

Eine beliebige Anzahl dieser Benutzersignale kann zu einem einzigen kombiniert werden. Die Anwesenheit und die Absichtserklärung des Benutzers müssen bei jeder Nutzung erforderlich sein.

Registrierung und zukünftige Kommunikation zwischen einem PC und Windows Hello-Begleitgeräten

Bevor ein Windows Hello-Begleitgerät mit dem Windows Hello-Begleitgeräte-Framework verbunden werden kann, muss es im Framework registriert werden. Die Registrierung erfolgt vollständig über die Windows Hello App für Begleitgeräte.

Die Beziehung zwischen dem Windows Hello-Begleitgerät und dem Windows 10-Desktopgerät kann eins zu mehreren sein (d. h. ein Begleitgerät kann für viele Windows 10-Desktopgeräte verwendet werden). Jedes Windows Hello-Begleitgerät kann jedoch nur für einen Benutzer auf einem Windows 10-Desktopgerät verwendet werden.

Bevor ein Windows Hello-Begleitgerät mit einem PC kommunizieren kann, müssen sie sich auf einen zu verwendenden Transportweg einigen. Diese Entscheidung wird der Windows Hello-Begleitgeräte-App überlassen; das Windows Hello-Begleitgeräte-Framework legt keine Beschränkungen hinsichtlich des Transporttyps (USB, NFC, WiFi, BT, BLE usw.) oder des Protokolls fest, das zwischen dem Windows Hello-Begleitgerät und der Windows Hello-Begleitgeräte-App auf der Seite des Windows 10-Desktopgeräts verwendet wird. Es werden jedoch bestimmte Sicherheitsüberlegungen für die Transportschicht vorgeschlagen, die im Abschnitt „Security Requirements“ (Sicherheitsanforderungen) dieses Dokuments dargelegt sind. Es liegt in der Verantwortung des Geräteanbieters, diese Anforderungen zu erfüllen. Der Rahmen stellt sie nicht für Sie bereit.

Modell der Benutzerinteraktion

Erkennung, Installation und erstmalige Registrierung der Windows Hello-Begleitgeräte-App

Ein typischer Arbeitsablauf eines Benutzers sieht wie folgt aus:

  • Der Benutzer richtet die PIN auf jedem Windows 10-Desktop-Gerät ein, das er mit diesem Windows Hello-Begleitgerät entsperren möchte.
  • Der Benutzer führt die Windows Hello-Begleitgerät-App auf seinem Windows 10-Desktopgerät aus, um sein Windows Hello-Begleitgerät beim Windows 10-Desktop zu registrieren.

Hinweise:

  • Wir empfehlen, die Erkennung, den Download und den Start der Windows Hello-Begleitgeräte-App zu optimieren und, wenn möglich, zu automatisieren (z. B. kann die App heruntergeladen werden, wenn das Windows Hello-Begleitgerät auf ein NFC-Lesegerät auf der Seite des Windows 10-Desktopgeräts getippt wird). Dies liegt jedoch in der Verantwortung des Windows Hello-Begleitgeräts und der Windows Hello-Begleitgeräte-App.
  • In einer Unternehmensumgebung kann die Windows Hello-Begleitgeräte-App über MDM bereitgestellt werden.
  • Die Windows Hello-Begleitgeräte-App ist dafür verantwortlich, dem Benutzer alle Fehlermeldungen anzuzeigen, die im Rahmen der Registrierung auftreten.

Anmelde- und Abmeldeprotokoll

Das folgende Diagramm veranschaulicht, wie das Windows Hello-Begleitgerät während der Registrierung mit dem Companion Authentication Service interagiert.

Diagramm des Registrierungsablaufs.

Es gibt zwei Schlüssel, die in unserem Protokoll verwendet werden:

  • Geräteschlüssel (devicekey): wird verwendet, um Freischalt-Token zu schützen, die der PC benötigt, um Windows zu entsperren.
  • Der Authentifizierungsschlüssel (authkey): wird zur gegenseitigen Authentifizierung des Windows Hello-Begleitgeräts und des Companion Authentication Service verwendet.

Der Geräteschlüssel und die Authentifizierungsschlüssel werden zum Zeitpunkt der Registrierung zwischen der Windows Hello-Begleitgeräte-App und dem Windows Hello-Begleitgerät ausgetauscht. Aus diesem Grund müssen die Windows Hello-Begleitgeräte-App und das Windows Hello-Begleitgerät einen sicheren Transport zum Schutz der Schlüssel verwenden.

Beachten Sie auch, dass das obige Diagramm zwar zwei HMAC-Schlüssel zeigt, die auf dem Windows Hello-Begleitgerät generiert werden, dass es aber auch möglich ist, dass die App sie generiert und zur Speicherung an das Windows Hello-Begleitgerät sendet.

Start der Authentifizierungsströme

Es gibt zwei Möglichkeiten für den Benutzer, den Anmeldevorgang am Windows 10-Desktop mit dem Windows Hello-Begleitgerät-Framework zu starten (d. h. ein Absichtssignal bereitzustellen):

  • Öffnen Sie die Klappe Ihres Laptops, drücken Sie die Leertaste oder wischen Sie am PC nach oben.
  • Führen Sie eine Geste oder eine Aktion auf der Seite des Windows Hello-Begleitgeräts aus.

Es ist die Entscheidung des Windows Hello-Begleitgeräts, welches der Startpunkt ist. Das Windows Hello-Begleitgerät-Framework informiert die Begleitgerät-App, wenn Option eins eintritt. Bei Option zwei sollte die Windows Hello-Begleitgeräte-App das Begleitgerät abfragen, um festzustellen, ob das Ereignis erfasst wurde. Dadurch wird sichergestellt, dass das Windows Hello-Begleitgerät das Absichtssignal erfasst, bevor die Entsperrung erfolgreich ist.

Anbieter von Anmeldeinformationen für Windows Hello-Begleitgeräte

In Windows 10 gibt es einen neuen Anbieter von Anmeldeinformationen, der alle Windows Hello-Begleitgeräte verwaltet.

Der Windows Hello-Anmeldeinformationsanbieter für das Begleitgerät ist für das Starten der Hintergrundaufgabe des Begleitgeräts durch Aktivieren eines Auslösers verantwortlich. Der Auslöser wird das erste Mal gesetzt, wenn der PC aufwacht und ein Sperrbildschirm angezeigt wird. Das zweite Mal, wenn der PC die Anmeldeoberfläche aufruft und der Windows Hello-Begleitgerät-Anmeldeinformationsanbieter die ausgewählte Kachel ist.

Die Hilfsbibliothek für die Windows Hello-Begleitgeräte-App hört auf die Statusänderung des Sperrbildschirms und sendet das entsprechende Ereignis an die Windows Hello-Begleitgeräte-Hintergrundaufgabe.

Wenn es mehrere Windows Hello-Hintergrundaufgaben gibt, entsperrt die erste Hintergrundaufgabe, die den Authentifizierungsprozess abgeschlossen hat, den PC. Der Authentifizierungsdienst des Begleitgeräts ignoriert alle weiteren Authentifizierungsaufrufe.

Das Erlebnis auf der Seite des Windows Hello-Begleitgeräts wird von der Windows Hello-Begleitgeräte-App gesteuert und verwaltet. Das Windows Hello-Begleitgerät-Framework hat keine Kontrolle über diesen Teil der Benutzererfahrung. Genauer gesagt informiert der Anbieter der Begleitauthentifizierung die Windows Hello-Begleitgeräte-App (über seine Hintergrund-App) über Zustandsänderungen in der Anmeldeoberfläche (z. B. der Sperrbildschirm wurde gerade heruntergefahren oder der Benutzer hat den Sperrbildschirm durch Drücken der Leertaste aufgehoben), und es liegt in der Verantwortung der Windows Hello-Begleitgeräte-App, ein entsprechendes Erlebnis zu schaffen (z. B. wenn der Benutzer die Leertaste drückt und den Sperrbildschirm aufhebt, beginnt die Suche nach dem Gerät über USB).

Das Windows Hello-Begleitgeräte-Framework stellt einen Bestand an (lokalisierten) Text- und Fehlermeldungen zur Verfügung, aus denen die Windows Hello-Begleitgeräte-App auswählen kann. Diese werden oben auf dem Sperrbildschirm (oder in der Anmelde-UI) angezeigt. Weitere Informationen finden Sie im Abschnitt „Dealing with Messages and Errors“ (Umgang mit Meldungen und Fehlern).

Authentifizierungsprotokoll

Sobald die Hintergrundaufgabe, die mit einer Windows Hello-Begleitgeräte-App verknüpft ist, gestartet wird, ist sie dafür verantwortlich, das Windows Hello-Begleitgerät aufzufordern, einen vom Companion Authentication Service berechneten HMAC-Wert zu validieren und bei der Berechnung von zwei HMAC-Werten zu helfen:

  • Dienst validieren HMAC = HMAC(Authentifizierungsschlüssel, Dienst-Nonce || Geräte-Nonce || Sitzungs-Nonce).
  • Berechnen Sie den HMAC des Geräteschlüssels mit einer Nonce.
  • Berechnung des HMAC des Authentifizierungsschlüssels mit dem ersten HMAC-Wert, der mit einer vom Companion Authentication Service generierten Nonce verkettet wird.

Der zweite berechnete Wert wird vom Dienst zur Authentifizierung des Geräts und zur Verhinderung von Replay-Angriffen im Transportkanal verwendet.

Diagramm des aktualisierten Registrierungsablaufs.

Lebenszyklusverwaltung

Einmal registrieren, überall nutzen

Ohne einen Backend-Server müssen die Benutzer ihr Windows Hello-Begleitgerät bei jedem Windows 10-Desktop-Gerät einzeln registrieren.

Ein Anbieter von Begleitgeräten oder ein OEM kann einen Webdienst implementieren, um den Registrierungsstatus über Windows 10-Desktops oder -Mobilgeräte hinweg zu übertragen. Weitere Einzelheiten finden Sie im Abschnitt Roaming, Sperrung und Filterdienst.

PIN-Verwaltung

Bevor ein Zusatzgerät verwendet werden kann, muss eine PIN auf dem Windows 10-Desktopgerät eingerichtet werden. Dadurch wird sichergestellt, dass der Benutzer ein Backup hat, falls sein Windows Hello-Begleitgerät nicht funktioniert. Die PIN ist etwas, das von Windows verwaltet wird und das die Anwendungen nie sehen. Um sie zu ändern, navigiert der Benutzer zu Einstellungen > Konten > Anmeldeoptionen.

Verwaltung und Richtlinie

Benutzer können ein Windows Hello-Begleitgerät von einem Windows 10-Desktop entfernen, indem sie die Windows Hello-Begleitgeräte-App auf diesem Desktop-Gerät ausführen.

Unternehmen haben zwei Möglichkeiten zur Steuerung des Windows Hello-Begleitgerät-Frameworks:

  • Die Funktion ein- oder ausschalten
  • Definieren Sie die zulässige Liste der Windows Hello-Begleitgeräte, die mit Windows App Locker zugelassen sind

Das Windows Hello-Begleitgerät-Framework unterstützt keine zentrale Möglichkeit, ein Inventar der verfügbaren Begleitgeräte zu führen, oder eine Methode, um weiter zu filtern, welche Instanzen eines Windows Hello-Begleitgerätetyps zulässig sind (z. B. sind nur Begleitgeräte mit einer Seriennummer zwischen X und Y zulässig). App-Entwickler können jedoch einen Dienst erstellen, der diese Funktionalität bietet. Weitere Einzelheiten finden Sie im Abschnitt Roaming, Sperrung und Filterdienst.

Widerruf

Das Windows Hello-Framework für Begleitgeräte unterstützt nicht das Entfernen eines Begleitgeräts von einem bestimmten Windows 10-Desktopgerät aus der Ferne. Stattdessen können Benutzer das Windows Hello-Begleitgerät über die Windows Hello-Begleitgeräte-App entfernen, die auf dem Windows 10-Desktop ausgeführt wird.

Die Anbieter von Companion-Geräten können jedoch einen Dienst entwickeln, der eine Fernsperrfunktion bietet. Weitere Einzelheiten finden Sie im Abschnitt Roaming, Sperrung und Filterdienst.

Roaming und Filterdienste

Anbieter von Companion-Geräten können einen Webdienst implementieren, der für die folgenden Szenarien verwendet werden kann:

  • Ein Filterdienst für Unternehmen: Ein Unternehmen kann die Anzahl der Windows Hello-Begleitgeräte, die in seiner Umgebung funktionieren können, auf einige wenige Geräte eines bestimmten Herstellers beschränken. Das Unternehmen Contoso könnte zum Beispiel 10.000 Begleitgeräte des Modells Y bei Anbieter X bestellen und sicherstellen, dass nur diese Geräte in der Contoso-Domäne funktionieren (und keine anderen Gerätemodelle von Anbieter X).
  • Inventar: Ein Unternehmen kann die Liste der vorhandenen Begleitgeräte, die in einer Unternehmensumgebung verwendet werden, ermitteln.
  • Entzug in Echtzeit: Meldet ein Mitarbeiter, dass sein Begleitgerät verloren gegangen ist oder gestohlen wurde, kann der Webdienst genutzt werden, um das Gerät zu sperren.
  • Roaming: Ein Benutzer muss sein Begleitgerät nur einmal registrieren und es funktioniert auf allen seinen Windows 10-Desktops und -Mobilgeräten.

Um diese Funktionen zu implementieren, muss die Windows Hello-Begleitgeräte-App bei der Registrierung und Nutzung mit dem Webdienst abgeglichen werden. Die Windows Hello-Begleitgeräte-App kann für Szenarien mit zwischengespeicherter Anmeldung optimiert werden, z. B. wenn die Überprüfung mit dem Webdienst nur einmal am Tag erforderlich ist (auf Kosten einer Verlängerung der Widerrufsfrist auf bis zu einen Tag).

Windows Hello-Begleitgerät-Framework API-Modell

Überblick

Eine Windows Hello-Begleitgeräte-App sollte zwei Komponenten enthalten: eine Vordergrund-App mit Benutzeroberfläche, die für die Registrierung und Aufhebung der Registrierung des Geräts zuständig ist, und eine Hintergrundaufgabe, die die Authentifizierung übernimmt.

Der gesamte API-Fluss ist wie folgt:

  1. Registrieren des Windows Hello-Begleitgeräts
    • Vergewissern Sie sich, dass das Gerät in der Nähe ist, und fragen Sie seine Funktionen ab (falls erforderlich)
    • Generieren Sie zwei HMAC-Schlüssel (entweder auf der Seite des Begleitgeräts oder auf der Seite der Anwendung)
    • Aufruf von RequestStartRegisteringDeviceAsync
    • Aufruf FinishRegisteringDeviceAsync
    • Stellen Sie sicher, dass die Windows Hello-Begleitgeräte-App HMAC-Schlüssel speichert (falls unterstützt) und die Windows Hello-Begleitgeräte-App ihre Kopien verwirft
  2. Registrieren Sie Ihre Hintergrundaufgabe
  3. Warten auf das richtige Ereignis in der Hintergrundaufgabe
    • WaitingForUserConfirmation: Warten Sie auf dieses Ereignis, wenn die Benutzeraktion/Geste auf der Seite des Windows Hello-Begleitgeräts erforderlich ist, um den Authentifizierungsfluss zu starten
    • CollectingCredential: Warten Sie auf dieses Ereignis, wenn das Windows Hello-Begleitgerät auf eine Benutzeraktion/Geste auf der PC-Seite angewiesen ist, um den Authentifizierungsfluss zu starten (z. B. durch Drücken der Leertaste)
    • Andere Auslöser, wie eine Smartcard: Stellen Sie sicher, dass Sie den aktuellen Authentifizierungsstatus abfragen, um die richtigen APIs aufzurufen.
  4. Informieren Sie den Benutzer über Fehlermeldungen oder erforderliche nächste Schritte, indem Sie ShowNotificationMessageAsync aufrufen. Rufen Sie diese API nur auf, wenn ein Absichtssignal erfasst wurde
  5. Freischalten
    • Sicherstellen, dass Signale für Absicht und Benutzerpräsenz erfasst wurden
    • Call StartAuthenticationAsync
    • Kommunikation mit dem Begleitgerät zur Durchführung der erforderlichen HMAC-Operationen
    • Call FinishAuthenticationAsync
  6. Aufhebung der Registrierung eines Windows Hello-Begleitgeräts, wenn der Benutzer dies verlangt (z. B. wenn er sein Begleitgerät verloren hat)
    • Aufzählung des Windows Hello-Begleitgeräts für den angemeldeten Benutzer über FindAllRegisteredDeviceInfoAsync
    • Deregistrieren Sie es mit UnregisterDeviceAsync

Registrierung und Exmatrikulation

Für die Registrierung sind zwei API-Aufrufe an den Companion-Authentifizierungsdienst erforderlich: RequestStartRegisteringDeviceAsync und FinishRegisteringDeviceAsync.

Bevor einer dieser Anrufe getätigt wird, muss die Windows Hello-Begleitgeräte-App sicherstellen, dass das Windows Hello-Begleitgerät verfügbar ist. Wenn das Windows Hello-Begleitgerät für die Generierung von HMAC-Schlüsseln (Authentifizierungs- und Geräteschlüssel) verantwortlich ist, sollte die Windows Hello-Begleitgeräte-App das Begleitgerät ebenfalls auffordern, diese zu generieren, bevor einer der beiden oben genannten Aufrufe erfolgt. Wenn die Windows Hello-Begleitgeräte-App für die Generierung von HMAC-Schlüsseln verantwortlich ist, sollte sie dies vor dem Aufruf der beiden oben genannten Aufrufe tun.

Außerdem muss die Windows Hello-Begleitgeräte-App als Teil des ersten API-Aufrufs (RequestStartRegisteringDeviceAsync) über die Gerätefunktionen entscheiden und darauf vorbereitet sein, diese als Teil des API-Aufrufs zu übergeben; zum Beispiel, ob das Windows Hello-Begleitgerät die sichere Speicherung von HMAC-Schlüsseln unterstützt. Wenn dieselbe Windows Hello-Begleitgeräte-App verwendet wird, um mehrere Versionen desselben Begleitgeräts zu verwalten, und sich diese Funktionen ändern (und eine Geräteabfrage erforderlich ist, um dies zu entscheiden), wird empfohlen, dass diese Abfrage vor dem ersten API-Aufruf erfolgt.

Die erste API (RequestStartRegisteringDeviceAsync) gibt ein Handle zurück, das von der zweiten API (FinishRegisteringDeviceAsync) verwendet wird. Beim ersten Aufruf zur Registrierung wird die PIN-Abfrage gestartet, um sicherzustellen, dass der Benutzer anwesend ist. Wenn keine PIN eingerichtet ist, schlägt der Anruf fehl. Die Windows Hello-Begleitgeräte-App kann auch über den Aufruf KeyCredentialManager.IsSupportedAsync abfragen, ob die PIN eingerichtet ist oder nicht. Der Aufruf RequestStartRegisteringDeviceAsync kann auch fehlschlagen, wenn die Richtlinie die Verwendung des Windows Hello-Begleitgeräts deaktiviert hat.

Das Ergebnis des ersten Aufrufs wird über das Enum SecondaryAuthenticationFactorRegistrationStatus zurückgegeben:

{
	Failed = 0, 		// Something went wrong in the underlying components
	Started,     		// First call succeeded
	CanceledByUser,  	// User cancelled PIN prompt
	PinSetupRequired,	// PIN is not set up
	DisabledByPolicy,	// Companion device framework or this app is disabled
}

Der zweite Aufruf (FinishRegisteringDeviceAsync) schließt die Registrierung ab. Als Teil des Registrierungsprozesses kann die Windows Hello-Begleitgeräte-App Konfigurationsdaten des Begleitgeräts mit dem Companion Authentication Service speichern. Für diese Daten gibt es eine Größenbeschränkung von 4K. Diese Daten werden der Windows Hello-Begleitgeräte-App zum Zeitpunkt der Authentifizierung zur Verfügung gestellt. Diese Daten können z. B. für die Verbindung mit dem Windows Hello-Begleitgerät verwendet werden, wie eine MAC-Adresse, oder wenn das Windows Hello-Begleitgerät keinen Speicher hat und das Begleitgerät den PC als Speicher verwenden möchte, können die Konfigurationsdaten verwendet werden. Beachten Sie, dass alle sensiblen Daten, die als Teil der Konfigurationsdaten gespeichert werden, mit einem Schlüssel verschlüsselt werden müssen, den nur das Windows Hello-Begleitgerät kennt. Da die Konfigurationsdaten von einem Windows-Dienst gespeichert werden, sind sie auch für die Windows Hello-Begleitgeräte-App in allen Benutzerprofilen verfügbar.

Die Windows Hello-Begleitgeräte-App kann AbortRegisteringDeviceAsync aufrufen, um die Registrierung abzubrechen und einen Fehlercode zu übergeben. Der Companion Authentication Service wird den Fehler in den Telemetriedaten protokollieren. Ein gutes Beispiel für diesen Aufruf wäre, wenn mit dem Windows Hello-Begleitgerät etwas schief gelaufen ist und es die Registrierung nicht abschließen konnte (z. B. weil es keine HMAC-Schlüssel speichern kann oder die BT-Verbindung unterbrochen wurde).

Die Windows Hello-Begleitgeräte-App muss dem Benutzer die Möglichkeit bieten, sein Windows Hello-Begleitgerät von seinem Windows 10-Desktop aus abzumelden (z. B. wenn er sein Begleitgerät verloren oder eine neuere Version gekauft hat). Wenn der Benutzer diese Option auswählt, muss die Windows Hello-Begleitgeräte-App UnregisterDeviceAsync aufrufen. Dieser Aufruf durch die Windows Hello-Begleitgeräte-App löst den Authentifizierungsdienst des Begleitgeräts aus, um alle Daten (einschließlich HMAC-Schlüssel) zu löschen, die der spezifischen Geräte-ID und AppId der Anrufer-App auf der PC-Seite entsprechen. Mit diesem API-Aufruf wird nicht versucht, HMAC-Schlüssel zu löschen, weder von der Windows Hello-Begleitgeräte-App noch von der Seite des Begleitgeräts. Diese Aufgabe muss die Windows Hello-Begleitgeräte-App übernehmen.

Die Windows Hello-Begleitgeräte-App ist für die Anzeige von Fehlermeldungen verantwortlich, die während der Registrierungs- und De-Registrierungsphase auftreten.

using System;
using Windows.Security.Authentication.Identity.Provider;
using Windows.Storage.Streams;
using Windows.Security.Cryptography;
using Windows.UI.Popups;

namespace SecondaryAuthFactorSample
{
	public class DeviceRegistration
	{

		public void async OnRegisterButtonClick()
		{
			//
			// Pseudo function, the deviceId should be retrieved by the application from the device
			//
			string deviceId = await ReadSerialNumberFromDevice();

			IBuffer deviceKey = CryptographicBuffer.GenerateRandom(256/8);
			IBuffer mutualAuthenticationKey = CryptographicBuffer.GenerateRandom(256/8);

			SecondaryAuthenticationFactorRegistration registrationResult =
				await SecondaryAuthenticationFactorRegistration.RequestStartRegisteringDeviceAsync(
					deviceId,  // deviceId: max 40 wide characters. For example, serial number of the device
					SecondaryAuthenticationFactorDeviceCapabilities.SecureStorage |
						SecondaryAuthenticationFactorDeviceCapabilities.HMacSha256 |
						SecondaryAuthenticationFactorDeviceCapabilities.StoreKeys,
					"My test device 1", // deviceFriendlyName: max 64 wide characters. For example: John's card
					"SAMPLE-001", // deviceModelNumber: max 32 wide characters. The app should read the model number from device.
					deviceKey,
					mutualAuthenticationKey);

			switch(registerResult.Status)
			{
			case SecondaryAuthenticationFactorRegistrationStatus.Started:
				//
				// Pseudo function:
				// The app needs to retrieve the value from device and set into opaqueBlob
				//
				IBuffer deviceConfigData = ReadConfigurationDataFromDevice();

				if (deviceConfigData != null)
				{
					await registrationResult.Registration.FinishRegisteringDeviceAsync(deviceConfigData); //config data limited to 4096 bytes
					MessageDialog dialog = new MessageDialog("The device is registered correctly.");
					await dialog.ShowAsync();
				}
				else
				{
					await registrationResult.Registration.AbortRegisteringDeviceAsync("Failed to connect to the device");
					MessageDialog dialog = new MessageDialog("Failed to connect to the device.");
					await dialog.ShowAsync();
				}
				break;

			case SecondaryAuthenticationFactorRegistrationStatus.CanceledByUser:
				MessageDialog dialog = new MessageDialog("You didn't enter your PIN.");
				await dialog.ShowAsync();
				break;

			case SecondaryAuthenticationFactorRegistrationStatus.PinSetupRequired:
				MessageDialog dialog = new MessageDialog("Please setup PIN in settings.");
				await dialog.ShowAsync();
				break;

			case SecondaryAuthenticationFactorRegistrationStatus.DisabledByPolicy:
				MessageDialog dialog = new MessageDialog("Your enterprise prevents using this device to sign in.");
				await dialog.ShowAsync();
				break;
			}
		}

		public void async UpdateDeviceList()
		{
			IReadOnlyList<SecondaryAuthenticationFactorInfo> deviceInfoList =
				await SecondaryAuthenticationFactorRegistration.FindAllRegisteredDeviceInfoAsync(
					SecondaryAuthenticationFactorDeviceFindScope.User);

			if (deviceInfoList.Count > 0)
			{
				foreach (SecondaryAuthenticationFactorInfo deviceInfo in deviceInfoList)
				{
					//
					// Add deviceInfo.FriendlyName and deviceInfo.DeviceId into a combo box
					//
				}
			}
		}

		public void async OnUnregisterButtonClick()
		{
			string deviceId;
			//
			// Read the deviceId from the selected item in the combo box
			//
			await SecondaryAuthenticationFactorRegistration.UnregisterDeviceAsync(deviceId);
		}
	}
}

Authentifizierung

Für die Authentifizierung sind zwei API-Aufrufe an den Companion-Authentifizierungsdienst erforderlich: StartAuthenticationAsync und FinishAuthencationAsync.

Die erste Initiierungs-API gibt ein Handle zurück, das von der zweiten API verwendet wird. Der erste Aufruf gibt unter anderem ein Nonce zurück, das - nach Verkettung mit anderen Dingen - mit dem auf dem Windows Hello-Begleitgerät gespeicherten Geräteschlüssel HMAC-verknüpft werden muss. Der zweite Aufruf liefert die Ergebnisse von HMAC mit dem Geräteschlüssel und kann möglicherweise zu einer erfolgreichen Authentifizierung führen (d. h. der Benutzer sieht seinen Desktop).

Die erste Initiierungs-API (StartAuthenticationAsync) kann fehlschlagen, wenn die Richtlinie das Windows Hello-Begleitgerät nach der ersten Registrierung deaktiviert hat. Er kann auch fehlschlagen, wenn der API-Aufruf außerhalb der Zustände WaitingForUserConfirmation oder CollectingCredential erfolgte (mehr dazu später in diesem Abschnitt). Sie kann auch fehlschlagen, wenn eine nicht registrierte Begleitgeräte-App sie aufruft. SecondaryAuthenticationFactorAuthenticationStatus Enum fasst die möglichen Ergebnisse zusammen:

{
	Failed = 0, 					// Something went wrong in the underlying components
	Started,
	UnknownDevice,    				// Companion device app is not registered with framework
	DisabledByPolicy, 				// Policy disabled this device after registration
	InvalidAuthenticationStage,		// Companion device framework is not currently accepting
									// incoming authentication requests
}

Der zweite API-Aufruf (FinishAuthencationAsync) kann fehlschlagen, wenn die Nonce, die im ersten Aufruf angegeben wurde, abgelaufen ist (20 Sekunden). SecondaryAuthenticationFactorFinishAuthenticationStatus enum erfasst die möglichen Ergebnisse.

{
	Failed = 0, 	// Something went wrong in the underlying components
	Completed,   	// Success
	NonceExpired,   // Nonce is expired
}

Das Timing von zwei API-Aufrufen (StartAuthenticationAsync und FinishAuthencationAsync) muss mit der Art und Weise übereinstimmen, wie das Windows Hello-Begleitgerät Absichts-, Benutzeranwesenheits- und Disambiguierungssignale sammelt (siehe Benutzersignale für weitere Details). So darf beispielsweise der zweite Anruf erst erfolgen, wenn ein Absichtssignal vorhanden ist. Mit anderen Worten: Der PC sollte nicht entsperrt werden, wenn der Benutzer nicht seine Absicht dazu geäußert hat. Um dies zu verdeutlichen, nehmen wir an, dass Bluetooth Proximity für die PC-Entsperrung verwendet wird, dann muss ein explizites Absichtssignal erfasst werden, ansonsten wird der PC entsperrt, sobald der Benutzer auf dem Weg zur Küche an seinem PC vorbeigeht. Außerdem ist die beim ersten Aufruf zurückgegebene Nonce zeitlich begrenzt (20 Sekunden) und läuft nach einer bestimmten Zeit ab. Daher sollte der erste Anruf nur dann getätigt werden, wenn die Windows Hello-App für Begleitgeräte einen guten Hinweis auf das Vorhandensein eines Begleitgeräts hat, z. B. wenn das Begleitgerät in den USB-Anschluss eingesteckt oder auf das NFC-Lesegerät getippt wird. Bei Bluetooth muss darauf geachtet werden, dass der Akku auf der PC-Seite nicht belastet wird oder andere Bluetooth-Aktivitäten, die zu diesem Zeitpunkt stattfinden, nicht beeinträchtigt werden, wenn geprüft wird, ob ein Windows Hello-Begleitgerät vorhanden ist. Wenn ein Anwesenheitssignal des Benutzers erforderlich ist (z. B. durch Eingabe der PIN), wird empfohlen, den ersten Authentifizierungsanruf erst zu tätigen, nachdem dieses Signal erfasst wurde.

Das Windows Hello-Begleitgeräte-Framework hilft der Windows Hello-Begleitgeräte-App, fundierte Entscheidungen darüber zu treffen, wann die beiden oben genannten Anrufe getätigt werden sollen, indem es ein vollständiges Bild davon liefert, wo sich der Benutzer im Authentifizierungsfluss befindet. Das Windows Hello-Begleitgerät-Framework bietet diese Funktionalität, indem es eine Benachrichtigung über die Änderung des Sperrzustands für die Hintergrundaufgabe der Anwendung bereitstellt.

Begleitgerätefluss

Einzelheiten zu jedem dieser Zustände sind im Folgenden aufgeführt:

Status Beschreibung
WaitingForUserConfirmation Dieses Benachrichtigungsereignis wird ausgelöst, wenn die Bildschirmsperre aufgehoben wird (z. B. wenn der Benutzer Windows + L gedrückt hat). Wir empfehlen, keine Fehlermeldungen anzufordern, die sich auf Schwierigkeiten bei der Suche nach einem Gerät in diesem Zustand beziehen. Im Allgemeinen empfehlen wir, Meldungen nur dann anzuzeigen, wenn ein Absichtssignal vorhanden ist. Die Windows Hello-Begleitgeräte-App sollte in diesem Zustand den ersten API-Aufruf zur Authentifizierung durchführen, wenn das Begleitgerät das Absichtssignal erfasst (z. B. durch Antippen des NFC-Lesegeräts, Drücken einer Taste auf dem Begleitgerät oder eine bestimmte Geste wie Klatschen) und die Hintergrundaufgabe der Windows Hello-Begleitgeräte-App vom Begleitgerät den Hinweis erhält, dass das Absichtssignal erkannt wurde. Andernfalls, wenn sich die Windows Hello-Begleitgeräte-App auf den PC verlässt, um den Authentifizierungsfluss zu starten (indem der Benutzer den Entsperrungsbildschirm nach oben wischt oder die Leertaste drückt), dann muss die Windows Hello-Begleitgeräte-App auf den nächsten Status (CollectingCredential) warten.
CollectingCredential Dieses Ereignis zur Benachrichtigung über eine Zustandsänderung wird ausgelöst, wenn der Benutzer entweder den Laptop-Deckel öffnet, eine beliebige Taste auf der Tastatur drückt oder nach oben zum Entsperrbildschirm wischt. Wenn sich das Windows Hello-Begleitgerät auf die oben genannten Aktionen verlässt, um mit der Erfassung des Absichtssignals zu beginnen, dann sollte die Windows Hello-Begleitgeräte-App mit der Erfassung beginnen (z. B. über ein Popup-Fenster auf dem Begleitgerät, in dem der Benutzer gefragt wird, ob er den PC entsperren möchte). Dies wäre ein guter Zeitpunkt, um Fehlerfälle bereitzustellen, wenn die Windows Hello-Begleitgeräte-App vom Benutzer ein Anwesenheitssignal auf dem Begleitgerät benötigt (z. B. die Eingabe der PIN auf dem Windows Hello-Begleitgerät).
SuspendingAuthentication Wenn die Windows Hello-Begleitgeräte-App diesen Status erhält, bedeutet dies, dass der Begleitauthentifizierungsdienst keine Authentifizierungsanfragen mehr annimmt.
CredentialCollected Dies bedeutet, dass eine andere Windows Hello-Begleitgeräte-App die zweite API aufgerufen hat und dass der Begleitauthentifizierungsdienst überprüft, was übermittelt wurde. Zu diesem Zeitpunkt nimmt der Companion Authentication Service keine weiteren Authentifizierungsanfragen an, es sei denn, die aktuell eingereichte Anfrage besteht die Überprüfung nicht. Die Windows Hello-Begleitgeräte-App sollte so lange eingestellt bleiben, bis der nächste Status erreicht ist.
CredentialAuthenticated Das bedeutet, dass der eingereichte Berechtigungsnachweis funktioniert hat. Das CredentialAuthenticated enthält die Geräte-ID des Windows Hello-Begleitgeräts, das erfolgreich war. Die Windows Hello-Begleitgeräte-App sollte sicherstellen, dass dies überprüft wird, um zu sehen, ob das zugehörige Gerät der Gewinner war. Ist dies nicht der Fall, sollte die Windows Hello-Begleitgeräte-App keine Nachauthentifizierungsflüsse anzeigen (z. B. eine Erfolgsmeldung auf dem Begleitgerät oder vielleicht eine Vibration auf diesem Gerät). Beachten Sie, dass der Status in den Status CollectingCredential wechselt, wenn der übermittelte Berechtigungsnachweis nicht funktioniert hat.
StoppingAuthentication Die Authentifizierung war erfolgreich und der Benutzer sah den Desktop. Es ist Zeit, Ihre Hintergrundaufgabe zu beenden. Bevor Sie die Hintergrundaufgabe beenden, heben Sie die Registrierung des StageEvent-Handlers explizit auf. Dadurch wird die Hintergrundaufgabe schnell beendet.

Windows Hello-Begleitgeräte-Apps sollten die beiden Authentifizierungs-APIs nur in den ersten beiden Zuständen aufrufen. Windows Hello-Begleitgeräte-Apps sollten prüfen, für welches Szenario dieses Ereignis ausgelöst wird. Es gibt zwei Möglichkeiten: Entsperren oder Nach-Entsperren. Derzeit wird nur das Entsperren unterstützt. In zukünftigen Versionen werden möglicherweise auch Szenarien nach der Freischaltung unterstützt. Die Aufzählung SecondaryAuthenticationFactorAuthenticationScenario erfasst diese beiden Optionen:

{
	SignIn = 0,      	// Running under lock screen mode
	CredentialPrompt, 	// Running post unlock
}

Vollständiges Code-Beispiel:

using System;
using Windows.Security.Authentication.Identity.Provider;
using Windows.Storage.Streams;
using Windows.Security.Cryptography;
using System.Threading;
using Windows.ApplicationModel.Background;

namespace SecondaryAuthFactorSample
{
	public sealed class AuthenticationTask : IBackgroundTask
	{
		private string _deviceId;
		private static AutoResetEvent _exitTaskEvent = new AutoResetEvent(false);
		private static IBackgroundTaskInstance _taskInstance;
		private BackgroundTaskDeferral _deferral;

		private void Authenticate()
		{
			int retryCount = 0;

			while (retryCount < 3)
			{
				//
				// Pseudo code, the svcAuthNonce should be passed to device or generated from device
				//
				IBuffer svcAuthNonce = CryptographicBuffer.GenerateRandom(256/8);

				SecondaryAuthenticationFactorAuthenticationResult authResult = await
					SecondaryAuthenticationFactorAuthentication.StartAuthenticationAsync(
						_deviceId,
						svcAuthNonce);
				if (authResult.Status != SecondaryAuthenticationFactorAuthenticationStatus.Started)
				{
					SecondaryAuthenticationFactorAuthenticationMessage message;
					switch (authResult.Status)
					{
						case SecondaryAuthenticationFactorAuthenticationStatus.DisabledByPolicy:
							message = SecondaryAuthenticationFactorAuthenticationMessage.DisabledByPolicy;
							break;
						case SecondaryAuthenticationFactorAuthenticationStatus.InvalidAuthenticationStage:
							// The task might need to wait for a SecondaryAuthenticationFactorAuthenticationStageChangedEvent
							break;
						default:
							return;
					}

					// Show error message. Limited to 512 characters wide
					await SecondaryAuthenticationFactorAuthentication.ShowNotificationMessageAsync(null, message);
					return;
				}

				//
				// Pseudo function:
				// The device calculates and returns sessionHmac and deviceHmac
				//
				await GetHmacsFromDevice(
					authResult.Authentication.ServiceAuthenticationHmac,
					authResult.Authentication.DeviceNonce,
					authResult.Authentication.SessionNonce,
					out deviceHmac,
					out sessionHmac);
				if (sessionHmac == null ||
					deviceHmac == null)
				{
					await authResult.Authentication.AbortAuthenticationAsync(
						"Failed to read data from device");
					return;
				}

				SecondaryAuthenticationFactorFinishAuthenticationStatus status =
					await authResult.Authentication.FinishAuthencationAsync(deviceHmac, sessionHmac);
				if (status == SecondaryAuthenticationFactorFinishAuthenticationStatus.NonceExpired)
				{
					retryCount++;
					continue;
				}
				else if (status == SecondaryAuthenticationFactorFinishAuthenticationStatus.Completed)
				{
					// The credential data is collected and ready for unlock
					return;
				}
			}
		}

		public void OnAuthenticationStageChanged(
			object sender,
			SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs args)
		{
			// The application should check the args.StageInfo.Stage to determine what to do in next. Note that args.StageInfo.Scenario will have the scenario information (SignIn vs CredentialPrompt).

			switch(args.StageInfo.Stage)
			{
			case SecondaryAuthenticationFactorAuthenticationStage.WaitingForUserConfirmation:
				// Show welcome message
				await SecondaryAuthenticationFactorAuthentication.ShowNotificationMessageAsync(
					null,
					SecondaryAuthenticationFactorAuthenticationMessage.WelcomeMessageSwipeUp);
				break;

			case SecondaryAuthenticationFactorAuthenticationStage.CollectingCredential:
				// Authenticate device
				Authenticate();
				break;

			case SecondaryAuthenticationFactorAuthenticationStage.CredentialAuthenticated:
				if (args.StageInfo.DeviceId = _deviceId)
				{
					// Show notification on device about PC unlock
				}
				break;

			case SecondaryAuthenticationFactorAuthenticationStage.StoppingAuthentication:
				// Quit from background task
				_exitTaskEvent.Set();
				break;
			}

			Debug.WriteLine("Authentication Stage = " + args.StageInfo.AuthenticationStage.ToString());
		}

		//
		// The Run method is the entry point of a background task.
		//
		public void Run(IBackgroundTaskInstance taskInstance)
		{
			_taskInstance = taskInstance;
			_deferral = taskInstance.GetDeferral();

			// Register canceled event for this task
			taskInstance.Canceled += TaskInstanceCanceled;

			// Find all device registred by this application
			IReadOnlyList<SecondaryAuthenticationFactorInfo> deviceInfoList =
				await SecondaryAuthenticationFactorRegistration.FindAllRegisteredDeviceInfoAsync(
					SecondaryAuthenticationFactorDeviceFindScope.AllUsers);

			if (deviceInfoList.Count == 0)
			{
				// Quit the task silently
				return;
			}
			_deviceId = deviceInfoList[0].DeviceId;
			Debug.WriteLine("Use first device '" + _deviceId + "' in the list to signin");

			// Register AuthenticationStageChanged event
			SecondaryAuthenticationFactorRegistration.AuthenticationStageChanged += OnAuthenticationStageChanged;

			// Wait the task exit event
			_exitTaskEvent.WaitOne();

			_deferral.Complete();
		}

		void TaskInstanceCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
		{
			_exitTaskEvent.Set();
		}
	}
}

Registrieren einer Hintergrundaufgabe

Wenn die Windows Hello-Begleitgeräte-App das erste Begleitgerät registriert, sollte sie auch ihre Hintergrundaufgabenkomponente registrieren, die Authentifizierungsinformationen zwischen dem Gerät und dem Authentifizierungsdienst des Begleitgeräts weitergibt.

using System;
using Windows.Security.Authentication.Identity.Provider;
using Windows.Storage.Streams;
using Windows.ApplicationModel.Background;

namespace SecondaryAuthFactorSample
{
	public class BackgroundTaskManager
	{
		// Register background task
		public static async Task<IBackgroundTaskRegistration> GetOrRegisterBackgroundTaskAsync(
			string bgTaskName,
			string taskEntryPoint)
		{
			// Check if there's an existing background task already registered
			var bgTask = (from t in BackgroundTaskRegistration.AllTasks
						  where t.Value.Name.Equals(bgTaskName)
						  select t.Value).SingleOrDefault();
			if (bgTask == null)
			{
				BackgroundAccessStatus status =
					BackgroundExecutionManager.RequestAccessAsync().AsTask().GetAwaiter().GetResult();

				if (status == BackgroundAccessStatus.Denied)
				{
					Debug.WriteLine("Background Execution is denied.");
					return null;
				}

				var taskBuilder = new BackgroundTaskBuilder();
				taskBuilder.Name = bgTaskName;
				taskBuilder.TaskEntryPoint = taskEntryPoint;
				taskBuilder.SetTrigger(new SecondaryAuthenticationFactorAuthenticationTrigger());
				bgTask = taskBuilder.Register();
				// Background task is registered
			}

			bgTask.Completed += BgTask_Completed;
			bgTask.Progress += BgTask_Progress;

			return bgTask;
		}
	}
}

Fehler und Meldungen

Das Windows Hello-Begleitgerät-Framework ist dafür verantwortlich, dem Benutzer eine Rückmeldung über den Erfolg oder Misserfolg der Anmeldung zu geben. Das Windows Hello-Begleitgeräte-Framework stellt einen Bestand an (lokalisierten) Text- und Fehlermeldungen zur Verfügung, aus denen die Windows Hello-Begleitgeräte-App auswählen kann. Diese werden in der Benutzeroberfläche für die Anmeldung angezeigt.

fehler des Begleitgeräts

Windows Hello-Begleitgeräte-Apps können ShowNotificationMessageAsync verwenden, um dem Benutzer Nachrichten als Teil der Anmelde-UI anzuzeigen. Rufen Sie diese API auf, wenn ein Absichtssignal verfügbar ist. Beachten Sie, dass ein Absichtssignal immer auf der Seite des Windows Hello-Begleitgeräts erfasst werden muss.

Es gibt zwei Arten von Meldungen: Hinweise und Fehler.

Anleitungsmeldungen sollen dem Benutzer zeigen, wie er den Entsperrungsvorgang starten kann. Diese Nachrichten werden dem Benutzer nur einmal auf dem Sperrbildschirm angezeigt, nämlich bei der ersten Registrierung des Geräts, und dann nie wieder. Diese Nachrichten werden weiterhin unter dem Sperrbildschirm angezeigt.

Fehlermeldungen werden immer angezeigt und werden angezeigt, nachdem ein Absichtssignal gegeben wurde. Da ein Absichtssignal erfasst werden muss, bevor dem Benutzer Meldungen angezeigt werden, und der Benutzer diese Absicht nur mit einem der Windows Hello-Begleitgeräte äußert, darf es nicht zu einer Situation kommen, in der mehrere Windows Hello-Begleitgeräte bei der Anzeige von Fehlermeldungen konkurrieren. Daher führt das Windows Hello-Begleitgerät-Framework keine Warteschlange. Wenn ein Anrufer eine Fehlermeldung anfordert, wird diese 5 Sekunden lang angezeigt, und alle anderen Anfragen zur Anzeige einer Fehlermeldung innerhalb dieser 5 Sekunden werden verworfen. Nach Ablauf von 5 Sekunden besteht die Möglichkeit, dass ein anderer Anrufer eine Fehlermeldung anzeigt. Wir verbieten es jedem Anrufer, den Fehlerkanal zu stören.

Die Anleitungen und Fehlermeldungen lauten wie folgt. Der Gerätename ist ein Parameter, der von der Begleitgeräte-App als Teil von ShowNotificationMessageAsync übergeben wird.

Leitfaden

  • „Wischen Sie nach oben oder drücken Sie die Leertaste, um sich mit device name“ anzumelden.
  • „Einrichten Ihres Begleitgeräts. Bitte warten Sie oder verwenden Sie eine andere Anmeldemöglichkeit.“
  • „Tippen Sie auf Gerätename zum NFC-Lesegerät, um sich anzumelden.“
  • „Suche nach Gerätename ...“
  • „Stecken Sie Gerätename in einen USB-Anschluss, um sich anzumelden.“

Fehler

  • „Siehe Gerätename für Anweisungen zur Anmeldung.“
  • „Schalten Sie Bluetooth ein, um Gerätename zur Anmeldung zu verwenden.“
  • „Aktivieren Sie NFC, um Gerätenamen zur Anmeldung zu verwenden.“
  • „Verbinden Sie sich mit einem Wi-Fi-Netzwerk, um sich mit Gerätename anzumelden.“
  • „Tippen Sie erneut auf Gerätename .“
  • „Ihr Unternehmen kann sich nicht mit Gerätename anmelden. Verwenden Sie eine andere Anmeldemöglichkeit.“
  • „Tippen Sie auf Gerätename, um sich anzumelden.“
  • „Legen Sie Ihren Finger auf Gerätename, um sich anzumelden.“
  • „Streichen Sie mit dem Finger über Gerätename, um sich anzumelden.“
  • „Konnte sich nicht mit Gerätename anmelden. Verwenden Sie eine andere Anmeldemöglichkeit.“
  • „Etwas ist schief gelaufen. Verwenden Sie eine andere Anmeldeoption, und richten Sie dann Gerätename erneut ein.“
  • „Versuchen Sie es noch einmal.“
  • „Sprechen Sie Ihre gesprochene Passphrase in Gerätename.“
  • „Bereit zur Anmeldung mit Gerätename.“
  • „Verwenden Sie zuerst eine andere Anmeldeoption, dann können Sie Gerätename verwenden, um sich anzumelden.“

Aufzählung der registrierten Geräte

Die Windows Hello-Begleitgeräte-App kann die Liste der registrierten Begleitgeräte über den FindAllRegisteredDeviceInfoAsync-Aufruf auflisten. Diese API unterstützt zwei Abfragetypen, die über enum SecondaryAuthenticationFactorDeviceFindScope definiert sind:

{
	User = 0,
	AllUsers,
}

Der erste Bereich gibt die Liste der Geräte für den angemeldeten Benutzer zurück. Die zweite gibt die Liste für alle Benutzer auf diesem PC zurück. Der erste Bereich muss zum Zeitpunkt der Aufhebung der Registrierung verwendet werden, um die Aufhebung der Registrierung des Windows Hello-Begleitgeräts eines anderen Benutzers zu vermeiden. Die zweite muss bei der Authentifizierung oder Registrierung verwendet werden: Bei der Registrierung kann diese Aufzählung der App helfen, den Versuch zu vermeiden, das gleiche Windows Hello-Begleitgerät zweimal zu registrieren.

Beachten Sie, dass, auch wenn die App diese Prüfung nicht durchführt, der PC dies tut und es ablehnt, dass das gleiche Windows Hello-Begleitgerät mehr als einmal registriert wird. Bei der Authentifizierung hilft die Verwendung des Bereichs AllUsers der Windows Hello-Begleitgeräte-App dabei, den Benutzerfluss umzuschalten: Melden Sie Benutzer A an, wenn Benutzer B angemeldet ist (dies setzt voraus, dass beide Benutzer die Windows Hello-Begleitgeräte-App installiert haben und Benutzer A seine Begleitgeräte beim PC registriert hat und der PC sich auf dem Sperrbildschirm (oder Anmeldebildschirm) befindet).

Sicherheitsanforderungen

Der Companion Authentication Service bietet die folgenden Sicherheitsvorkehrungen.

  • Malware auf einem Windows 10-Desktop-Gerät, das als mittlerer Benutzer oder App-Container ausgeführt wird, kann das Windows Hello-Begleitgerät nicht verwenden, um unbemerkt auf Benutzeranmeldeschlüssel (die als Teil von Windows Hello gespeichert sind) auf einem PC zuzugreifen.
  • Ein böswilliger Benutzer auf einem Windows 10-Desktop-Gerät kann das Windows Hello-Begleitgerät, das einem anderen Benutzer auf diesem Windows 10-Desktop-Gerät gehört, nicht verwenden, um stillen Zugriff auf seine Benutzeranmeldeschlüssel (auf demselben Windows 10-Desktop-Gerät) zu erhalten.
  • Malware auf dem Windows Hello-Begleitgerät kann keinen unbemerkten Zugriff auf Benutzeranmeldeschlüssel auf einem Windows 10-Desktopgerät erhalten, einschließlich der Nutzung von Funktionen oder Code, die speziell für das Windows Hello-Begleitgeräte-Framework entwickelt wurden.
  • Ein böswilliger Benutzer kann ein Windows 10-Desktop-Gerät nicht entsperren, indem er den Datenverkehr zwischen dem Windows Hello-Begleitgerät und dem Windows 10-Desktop-Gerät aufzeichnet und später wieder abspielt. Die Verwendung von Nonce, Authkey und HMAC in unserem Protokoll garantiert den Schutz vor einem Replay-Angriff.
  • Malware oder ein böswilliger Benutzer auf einem fremden PC kann Windows Hello nicht verwenden, um Zugang zu einem ehrlichen Benutzer-PC zu erhalten. Dies wird durch die gegenseitige Authentifizierung zwischen dem Companion Authentication Service und dem Windows Hello-Begleitgerät durch die Verwendung von authkey und HMAC in unserem Protokoll erreicht.

Der Schlüssel zum Erreichen der oben genannten Sicherheitsvorkehrungen ist der Schutz der HMAC-Schlüssel vor unbefugtem Zugriff und die Überprüfung der Benutzeranwesenheit. Im Einzelnen muss sie diese Anforderungen erfüllen:

  • Schutz vor dem Klonen des Windows Hello-Begleitgeräts
  • Schutz gegen Abhören beim Senden von HMAC-Schlüsseln zum Zeitpunkt der Registrierung an den PC
  • Stellen Sie sicher, dass das Anwesenheitssignal des Benutzers verfügbar ist