Entsperren von Windows mit Windows Hello-Begleitgeräten (IoT)Windows Unlock with Windows Hello companion (IoT) devices

Ein Windows Hello-Begleitgerät ist ein Gerät, das in Verbindung mit dem Windows 10-Desktopgerät zur Verbesserung der Benutzerauthentifizierung verwendet werden kann.A Windows Hello companion device is a device that can act in conjunction with your Windows 10 desktop to enhance the user authentication experience. Mit dem Windows Hello-Begleitgeräteframework kann ein Begleitgerät umfangreiche Funktionen für Windows Hello bereitstellen, auch wenn Biometrie nicht verfügbar ist (beispielsweise, wenn das Windows 10-Desktopgerät über keine Kamera für die Gesichtsauthentifizierung oder kein Fingerabdrucklesegerät verfügt).Using the Windows Hello companion device framework, a companion device can provide a rich experience for Windows Hello even when biometrics are not available (e.g., if the Windows 10 desktop lacks a camera for face authentication or fingerprint reader device, for example).

Beachten Sie Microsoft wird die API für das Windows Hello Begleit-Framework in der ersten Hälfte des 2020 eingestellt werden.Note Microsoft will be deprecating the API for the Windows Hello companion device framework in the first half of 2020.

Hinweis Das Windows Hello-Begleitgeräteframework ist ein spezielles Feature und nicht für alle App-Entwickler verfügbar.Note The Windows Hello companion device framework is a specialized feature not available to all app developers. Damit dieses Framework verwendet werden kann, muss Ihre App speziell von Microsoft bereitgestellt werden und die eingeschränkte Funktion SecondaryAuthenticatorFactor muss im Manifest angegeben sein.To use this framework, your app must be specifically provisioned by Microsoft and list the restricted secondaryAuthenticationFactor capability in its manifest. Um eine Genehmigung zu erhalten, wenden Sie sich an cdfonboard@microsoft.com.To obtain approval, contact cdfonboard@microsoft.com.

EinführungIntroduction

Eine Videoübersicht finden Sie in der Sitzung Windows Unlock with IoT Devices von Build 2016 in Channel 9.For a video overview, see the Windows Unlock with IoT Devices session from Build 2016 on Channel 9.

Codebeispiele finden Sie im Windows Hello-Begleitgeräteframework-Github-Repository.For code samples, see the Windows Hello companion device framework Github repository.

AnwendungsfälleUse cases

Das Windows Hello-Begleitgeräteframework kann auf unterschiedliche Weise verwendet werden, um eine erstklassige Windows-Entsperrung mit einem Begleitgerät zu erstellen.There are numerous ways one can use the Windows Hello companion device framework to build a great Windows unlock experience with a companion device. Beispiele:For example, users could:

  • Benutzer können Ihr Begleitgerät per USB am PC anschließen, auf die Schaltfläche des Begleitgeräts tippen und den PC automatisch entsperren.Attach their companion device to PC via USB, touch the button on the companion device, and automatically unlock their PC.
  • Benutzer können in ihrer Tasche ein Smartphone mit sich führen, das bereits über Bluetooth mit dem PC gekoppelt ist.Carry a phone in their pocket that is already paired with PC over Bluetooth. Durch Drücken der LEERTASTE des PCs wird eine Benachrichtigung an ihr Smartphone gesendet.Upon hitting the spacebar on their PC, their phone receives a notification. Diese muss zum Entsperren des PCs einfach nur bestätigt werden.Approve it and the PC simply unlocks.
  • Benutzer können das Begleitgerät an ein NFC-Lesegerät halten und den PC so entsperren.Tap their companion device to an NFC reader to quickly unlock their PC.
  • Benutzer können ein Fitness-Armband tragen, das den Träger bereits authentifiziert hat.Wear a fitness band that has already authenticated the wearer. Wenn sich der Benutzer dem PC nähert und eine spezielle Geste (beispielsweise Klatschen) ausführt, wird der PC entsperrt.Upon approaching PC, and by performing a special gesture (like clapping), the PC unlocks.

Biometriefähige Windows Hello-BegleitgeräteBiometric enabled Windows Hello companion devices

Falls das Begleitgerät über Biometrieunterstützung verfügt, ist das Windows-Biometrieframework in manchen Fällen eine bessere Lösung als das Windows Hello-Begleitgeräteframework.If the companion device supports biometrics, in some cases the Windows Biometric framework may be a better solution than the Windows Hello companion device framework. Wenden Sie sich an cdfonboard@microsoft.com, und wir helfen Ihnen bei der Auswahl des richtigen Ansatzes.Please contact cdfonboard@microsoft.com and we'll help you pick the right approach.

Komponenten der LösungComponents of the solution

Das folgende Diagramm zeigt die Komponenten der Lösung und wer jeweils für deren Erstellung zuständig ist.The diagram below depicts the components of the solution and who is responsible for building them.

Frameworkübersicht

Das Windows Hello-Begleitgeräteframework wird als Dienst unter Windows implementiert, der in diesem Artikel als Begleitauthentifizierungsdienst bezeichnet wird.The Windows Hello companion device framework is implemented as a service running on Windows (called the Companion Authentication Service in this article). Dieser Dienst generiert ein Entsperrtoken, das durch einen auf dem Windows Hello-Begleitgerät gespeicherten HMAC-Schlüssel geschützt werden muss.This service is responsible for generating an unlock token which needs to be protected by an HMAC key stored on the Windows Hello companion device. Dadurch wird sichergestellt, dass für den Zugriff auf das Entsperrtoken das Windows Hello-Begleitgerät benötigt wird.This guarantees that access to the unlock token requires Windows Hello companion device presence. Pro Tupel (PC, Windows-Benutzer) ist jeweils ein eindeutiges Entsperrtoken vorhanden.Per each (PC, Windows user) tuple, there will be a unique unlock token.

Die Integration des Windows Hello-Begleitgeräteframeworks erfordert Folgendes:Integration with the Windows Hello Companion Device Framework requires:

  • Eine aus dem Windows Store heruntergeladene, für das Windows Hello-Begleitgerät bestimmte Begleitgeräte-App für die universelle Windows-Plattform (UWP).A Universal Windows Platform (UWP) Windows Hello companion device app for the companion device, downloaded from the Windows app store.
  • Die Möglichkeit, auf dem Windows Hello-Begleitgerät zwei 256-Bit-HMAC-Schlüssel zu erstellen und damit HMAC (mit SHA-256) zu generieren.The ability to create two 256 bit HMAC keys on the Windows Hello companion device and generate HMAC with it (using SHA-256).
  • Ordnungsgemäß konfigurierte Sicherheitsreinstellungen auf dem Windows 10-Desktopgerät.Security settings on the Windows 10 desktop properly configured. Bevor Windows Hello-Begleitgeräte eingebunden werden können, muss diese PIN für den Begleitauthentifizierungsdienst eingerichtet werden.The Companion Authentication Service will require this PIN to be set up before any Windows Hello companion device can be plugged into it. Die Benutzer müssen über „Einstellungen“ > „Konten“ > „Anmeldeoptionen“ eine PIN einrichten.The users must set up a PIN via Settings > Accounts > Sign-in options.

Zusätzlich zu den oben genannten Anforderungen ist die Windows Hello-Begleitgeräte-App für Folgendes zuständig:In addition to the above requirements, the Windows Hello companion device app is responsible for:

  • Benutzeroberfläche und Branding der ersten Registrierung und spätere Aufhebung der Registrierung des Windows Hello-BegleitgerätsUser experience and branding of initial registration and later de-registration of the Windows Hello companion device.
  • Ausführung im Hintergrund, Erkennung des Windows Hello-Begleitgeräts, Kommunikation mit dem Windows Hello-Begleitgerät und BegleitauthentifizierungsdienstRunning in the background, discovering the Windows Hello companion device, communicating to the Windows Hello companion device and also Companion Authentication Service.
  • FehlerbehandlungError handling

In der Regel werden Begleitgeräte mit einer Ersteinrichtungs-App (beispielsweise für die Ersteinrichtung eines Fitnessarmbands) ausgeliefert.Normally, companion devices ship with an app for initial setup, like setting up a fitness band for the first time. Die in diesem Dokument beschriebenen Funktionen können Teil dieser App sein, sodass keine separate App erforderlich ist.The functionality described in this document can be part of that app and a separate app should not be required.

BenutzersignaleUser signals

Jedes Windows Hello-Begleitgerät muss mit einer App kombiniert werden, die drei Benutzersignale unterstützt.Each Windows Hello companion device should be combined with an app that supports three user signals. Bei diesen Signalen kann es sich um eine Aktion oder um eine Geste handeln.These signals can be in form of an action or gesture.

  • Beabsichtigte Signal: Ermöglicht dem Benutzer anzuzeigende seinem Ziel entsperren, indem, z. B. eine Schaltfläche auf der Windows Hello auf Gerät Begleit.Intent signal: Allows the user to show his intent for unlock by, for example, hitting a button on the Windows Hello companion device. Das Absichtssignal muss auf dem Windows Hello-Begleitgerät erfasst werden.The intent signal must be collected on Windows Hello companion device side.
  • Benutzer Anwesenheit Signal: Stellt das Vorhandensein des Benutzers an.User presence signal: Proves the presence of the user. Das Windows Hello-Begleitgerät kann beispielsweise eine PIN anfordern, bevor es zum Entsperren des PCs verwendet werden kann (nicht zu verwechseln mit einer PC-PIN), oder es ist unter Umständen ein Tastendruck erforderlich.The Windows Hello companion device might, for instance, require a PIN before it can be used for unlocking PC (not to be confused with PC PIN), or it might require press of a button.
  • Zur Klärung Signal: Macht die Windows 10-Desktop möchte, dass der Benutzer entsperrt werden, wenn mehrere Optionen verfügbar, um die Windows Hello begleitgerät sind eindeutig.Disambiguation signal: Disambiguates which Windows 10 desktop the user wants to unlock when multiple options are available to the Windows Hello companion device.

Von diesen Benutzersignalen kann eine beliebige Anzahl zu einem einzelnen Signal kombiniert werden.Any number of these user signals can be combined into one. Benutzeranwesenheits- und Absichtssignale sind bei jeder Verwendung erforderlich.User presence and intent signals must be required on each use.

Registrierung und zukünftige Kommunikation zwischen einem PC und Windows Hello-BegleitgerätenRegistration and future communication between a PC and Windows Hello companion devices

Damit ein Windows Hello-Begleitgerät in das Windows Hello-Begleitgeräteframework eingebunden werden kann, muss es zunächst beim Framework registriert werden.Before a Windows Hello companion device can be plugged into the Windows Hello companion device framework, it needs to be registered with the framework. Für den Registrierungsprozess ist allein die Windows Hello-Begleitgeräte-App zuständig.The experience for registration is completely owned by the Windows Hello companion device app.

Bei der Beziehung zwischen dem Windows Hello-Begleitgerät und dem Windows 10-Desktopgerät kann es sich um eine 1:n-Beziehung handeln. (Ein Begleitgerät kann also für viele Windows 10-Desktopgeräte verwendet werden.)The relationship between the Windows Hello companion device and the Windows 10 desktop device can be one to many (i.e., one companion device can be used for many Windows 10 desktop devices). Jedes Windows Hello-Begleitgerät kann jedoch nur für einen einzelnen Benutzer auf dem jeweiligen Windows 10-Desktopgerät verwendet werden.However, each Windows Hello companion device can only be used for one user on each Windows 10 desktop device.

Damit ein Windows Hello-Begleitgerät mit einem PC kommunizieren kann, müssen sich beide auf einen Transport einigen.Before a Windows Hello companion device can communicate with a PC, they need to agree on a transport to use. Die Entscheidung wird von der Windows Hello-Begleitgeräte-App getroffen. Das Windows Hello-Begleitgeräteframework schränkt weder den Transporttyp (USB, NFC, WLAN, Bluetooth, BLE usw.) noch das Protokoll zwischen Windows Hello-Begleitgerät und Windows Hello-Begleitgeräte-App des Windows 10-Desktopgeräts ein.Such choice is left to the Windows Hello companion device app; the Windows Hello companion device framework does not impose any limitations on transport type (USB, NFC, WiFi, BT, BLE, etc) or protocol being used between the Windows Hello companion device and the Windows Hello companion device app on the Windows 10 desktop device side. Es schlägt jedoch bestimmte Sicherheitsaspekte für die Transportschicht vor (wie in diesem Dokument im Abschnitt „Sicherheitsanforderungen“ beschrieben).It does, however, suggest certain security considerations for the transport layer as outlined in the "Security Requirements" section of this document. Für die Erfüllung dieser Anforderungen ist der Geräteanbieter verantwortlich.It is the device provider’s responsibility to provide those requirements. Sie werden nicht vom Framework bereitgestellt.The framework does not provide them for you.

BenutzerinteraktionsmodellUser Interaction Model

Erkennung, Installation und erstmalige Registrierung der Windows Hello-Begleitgeräte-AppWindows Hello companion device app discovery, installation, and first-time registration

Im Anschluss sehen Sie einen typischen Benutzerworkflow:A typical user workflow is as follows:

  • Der Benutzer richtet die PIN auf jedem der Windows 10-Zieldesktopgeräte ein, die er mit dem Windows Hello-Begleitgerät entsperren möchte.The user sets up the PIN on each of target Windows 10 desktop devices she wants to unlock with that Windows Hello companion device.
  • Der Benutzer führt auf dem Windows 10-Desktopgerät die Windows Hello-Begleitgeräte-App aus, um sein Windows Hello-Begleitgerät bei dem Windows 10-Desktopgerät zu registrieren.The user runs the Windows Hello companion device app on their Windows 10 desktop device to register her Windows Hello companion device with Windows 10 desktop.

Hinweise:Notes:

  • Es empfiehlt sich, die Erkennung, das Herunterladen und das Starten der Windows Hello-Begleitgeräte-App zu optimieren und nach Möglichkeit zu automatisieren, sodass die App beispielsweise aufseiten des Windows 10-Desktopgeräts durch Tippen auf das Windows Hello-Begleitgerät auf einem NFC-Lesegerät heruntergeladen werden kann.We recommend the discovery, download, and launch of the Windows Hello companion device app is streamlined and, if possible, automated (e.g., the app can be downloaded upon tapping the Windows Hello companion device on an NFC reader on Windows 10 desktop device side). Dies ist allerdings Aufgabe des Windows Hello-Begleitgeräts und der Windows Hello-Begleitgeräte-App.This is, however, the responsibility of the Windows Hello companion device and Windows Hello companion device app.
  • In einer Unternehmensumgebung kann die Windows Hello-Begleitgeräte-App per MDM bereitgestellt werden.In an enterprise environment, the Windows Hello companion device app can be deployed via MDM.
  • Fehlermeldungen, die unter Umständen im Rahmen der Registrierung auftreten, müssen dem Benutzer von der Windows Hello-Begleitgeräte-App angezeigt werden.The Windows Hello companion device app is responsible for showing the user any error messages that happen as part of registration.

Protokoll für Registrierung und RegistrierungsaufhebungRegistration and de-registration protocol

Das folgende Diagramm zeigt, wie das Windows Hello-Begleitgerät bei der Registrierung mit dem Begleitauthentifizierungsdienst interagiert.The following diagram illustrates how the Windows Hello companion device interacts with Companion Authentication Service during registration.

Registrierungsfluss

In unserem Protokoll werden zwei Schlüssel verwendet:There are two keys used in our protocol:

  • Geräteschlüssel (devicekey): Dient zum Schutz von Entsperrtoken, die der PC zum Entsperren von Windows benötigt.Device key (devicekey): used to protect unlock tokens that the PC needs to unlock Windows.
  • Authentifizierungsschlüssel (authkey): Dient zur gegenseitigen Authentifizierung von Windows Hello-Begleitgerät und Begleitauthentifizierungsdienst.The authentication key (authkey): used to mutually authenticate the Windows Hello companion device and Companion Authentication Service.

Der Geräteschlüssel und die Authentifizierungsschlüssel werden bei der Registrierung zwischen Windows Hello-Begleitgeräte-App und dem Windows Hello-Begleitgerät ausgetauscht.The device key and authentication keys are exchanged at registration time between the Windows Hello companion device app and Windows Hello companion device. Zum Schutz der Schlüssel müssen die Windows Hello-Begleitgeräte-App und das Windows Hello-Begleitgerät daher einen sicheren Transport verwenden.As a result, the Windows Hello companion device app and Windows Hello companion device must use a secure transport to protect keys.

Beachten Sie außerdem Folgendes: Im obigen Diagramm ist zwar zu sehen, dass zwei HMAC-Schlüssel auf dem Windows Hello-Begleitgerät generiert werden, diese können jedoch auch von der App generiert und zur Speicherung an das Windows Hello-Begleitgerät gesendet werden.Also, note that while the diagram above displays two HMAC keys generating on the Windows Hello companion device, it is also possible for the app to generate them and send them to the Windows Hello companion device for storage.

Starten von AuthentifizierungsflüssenStarting authentication flows

Der Anmeldefluss für Windows 10-Desktopgeräte kann vom Benutzer (durch ein Absichtssignal) über das Windows Hello-Begleitgeräteframework auf zwei Arten gestartet werden:There are two ways for the user to start the signing in flow to Windows 10 desktop using Windows Hello companion device framework (i.e., provide intent signal):

  • Durch Öffnen des Deckels (Laptop) oder durch Drücken der LEERTASTE oder Wischen nach oben (PC)Open up the lid on laptop, or hit the space bar or swipe up on PC.
  • Durch eine Geste oder eine Aktion auf dem Windows Hello-BegleitgerätPerform a gesture or an action on the Windows Hello companion device side.

Welche Option als Ausgangspunkt verwendet wird, liegt beim Windows Hello-Begleitgerät.It is the Windows Hello companion device's choice to select which one is the starting point. Das Windows Hello-Begleitgeräteframework informiert die Begleitgeräte-App, wenn der erste Fall eintritt.The Windows Hello companion device framework will inform companion device app when option one happens. Im zweiten Fall muss die Windows Hello-Begleitgeräte-App das Begleitgerät abfragen, um zu ermitteln, ob das Ereignis erfasst wurde.For option two, the Windows Hello companion device app should query the companion device to see if that event has been captured. Dadurch wird sichergestellt, dass das Windows Hello-Begleitgerät vor dem erfolgreichen Entsperren das Absichtssignal erfasst.This ensures the Windows Hello companion device collects the intent signal before the unlock succeeds.

Anmeldeinformationsanbieter für Windows Hello-BegleitgeräteWindows Hello companion device credential provider

Windows 10 verfügt über einen neuen Anmeldeinformationsanbieter zur Behandlung sämtlicher Windows Hello-Begleitgeräte.There is a new credential provider in Windows 10 that handles all Windows Hello companion devices.

Der Anmeldeinformationsanbieter für Windows Hello-Begleitgeräte startet die Begleitgerät-Hintergrundaufgabe mittels Aktivierung eines Triggers.The Windows Hello companion device credential provider is responsible for launching the companion device background task via activating a trigger. Der Trigger wird erstmals festgelegt, wenn der PC aktiviert und ein Sperrbildschirm angezeigt wird.The trigger is set the first time when the PC awakens and a lock screen is displayed. Das zweite Mal erfolgt, wenn der PC die Anmeldebenutzeroberfläche anzeigt und der Anmeldeinformationsanbieter für Windows Hello-Begleitgeräte die ausgewählte Kachel ist.The second time is when the PC is entering logon UI and the Windows Hello companion device credential provider is the selected tile.

Die Hilfsbibliothek für die Windows Hello-Begleitgeräte-App lauscht auf die Änderung des Sperrbildschirmstatus und sendet das Ereignis, das der Windows Hello-Begleitgerät-Hintergrundaufgabe entspricht.The helper library for the Windows Hello companion device app will listen to the lock screen status change and send the event corresponding to the Windows Hello companion device background task.

Sollten mehrere Windows Hello-Begleitgerät-Hintergrundaufgaben vorhanden sein, wird der PC durch die erste Hintergrundaufgabe entsperrt, die den Authentifizierungsprozess abgeschlossen hat.If there are multiple Windows Hello companion device background tasks, the first background task that has finished the authentication process will unlock the PC. Alle übrigen Authentifizierungsaufrufe werden vom Begleitgerät-Authentifizierungsdienst ignoriert.The companion device authentication service will ignore any remaining authentication calls.

Die Vorgänge aufseiten des Windows Hello-Begleitgeräts werden von der Windows Hello-Begleitgeräte-App abgewickelt und verwaltet.The experience on the Windows Hello companion device side is owned and managed by the Windows Hello companion device app. Das Windows Hello-Begleitgeräteframework hat keinen Einfluss auf diesen Teil der Benutzererfahrung.The Windows Hello companion device framework has no control over this part of the user experience. Genauer gesagt: Der Begleitauthentifizierungsanbieter informiert die Windows Hello-Begleitgeräte-App (mittels der dazugehörigen Hintergrund-App) über Zustandsänderungen der Anmeldebenutzeroberfläche (wie Einblendung des Sperrbildschirms oder Ausblendung des Sperrbildschirms durch Drücken der LEERTASTE), und die Windows Hello-Begleitgeräte-App muss daraufhin mit einer entsprechenden Benutzererfahrung reagieren (beispielsweise, indem nach dem Drücken der LEERTASTE und Ausblenden des Sperrbildschirms über USB nach dem Gerät gesucht wird).More specifically, the companion authentication provider informs the Windows Hello companion device app (via its background app) about state changes in logon UI (e.g., lock screen just came down, or the user just dispelled lock screen by hitting spacebar), and it is the responsibility of the Windows Hello companion device app to build an experience around that (e.g., upon user hitting spacebar and dispelling unlock screen, start looking for the device over USB).

Das Windows Hello-Begleitgeräteframework stellt eine Reihe (lokalisierter) Text- und Fehlermeldungen für die Windows Hello-Begleitgeräte-App zur Verfügung.The Windows Hello companion device Framework will provide a stock of (localized) text and error messages for the Windows Hello companion device app to choose from. Diese werden im Vordergrund des Sperrbildschirms (oder auf der Anmeldebenutzeroberfläche) angezeigt.These will be displayed on top of lock screen (or in logon UI). Weitere Informationen finden Sie im Abschnitt „Umgang mit Meldungen und Fehlern“.See the Dealing with Messages and Errors section for more details.

AuthentifizierungsprotokollAuthentication protocol

Nachdem die mit einer Windows Hello-Begleitgeräte-App verknüpfte Hintergrundaufgabe per Trigger gestartet wurde, muss sie die Unterstützung des Windows Hello-Begleitgeräts bei der Überprüfung eines durch den Begleitauthentifizierungsdienst berechneten HMAC-Werts und bei der Berechnung zweier HMAC-Werte anfordern:Once the background task associated with a Windows Hello companion device app is trigger started, it is responsible for asking the Windows Hello companion device to validate an HMAC value computed by the Companion Authentication Service and help calculate two HMAC values:

  • Dienst-HMAC überprüfen = HMAC(Authentifizierungsschlüssel, Dienst-Nonce || Geräte-Nonce || Sitzungs-Nonce).Validate Service HMAC = HMAC(authentication key, service nonce || device nonce || session nonce).
  • Berechnen Sie den HMAC des Geräteschlüssels mit einer Nonce.Calculate the HMAC of the device key with a nonce.
  • Berechnen Sie den HMAC des Authentifizierungsschlüssels mit dem ersten HMAC-Wert, verkettet mit einer durch den Begleitauthentifizierungsdienst generierten Nonce.Calculate the HMAC of the authentication key with first HMAC value concatenated with a nonce generated by the Companion Authentication Service.

Der zweite berechnete Wert wird vom Dienst nicht nur zur Authentifizierung des Geräts, sondern auch zur Verhinderung von Replay-Angriffen im Transportkanal verwendet.The second computed value is used by the service to authenticate the device and also prevent replay attack in transport channel.

Registrierungsfluss

LebenszyklusverwaltungLifecycle management

Einmalige Registrierung, ortsunabhängige VerwendungRegister once, use everywhere

Ohne Back-End-Server müssen Benutzer ihr Windows Hello-Begleitgerät separat bei jedem Windows 10-Desktopgerät registrieren.Without a backend server, users must register their Windows Hello companion device with each Windows 10 desktop device separately.

Eine Begleitgerätehersteller oder OEM kann einen Webdienst implementieren, um den Registrierungszustand für mehrere Windows 10-Desktopgeräte oder mobile Geräte des Benutzers zur Verfügung zu stellen.A companion device vendor or OEM can implement a web service to roam the registration state across user Windows 10 desktops or mobile devices. Ausführlichere Informationen finden Sie im Abschnitt „Roaming, Sperrung und Filterdienst“.For more details, see the Roaming, Revocation, and Filter Service section.

PIN-VerwaltungPIN management

Bevor ein Begleitgerät verwendet werden kann, muss auf dem Windows 10-Desktopgerät eine PIN eingerichtet werden.Before a companion device can be used, a PIN needs to be set up on Windows 10 desktop device. Dadurch wird sichergestellt, dass der Benutzer über eine Ausweichmöglichkeit verfügt, falls das Windows Hello-Begleitgerät nicht funktioniert.This ensures the user has a backup in case their Windows Hello companion device is not working. Die PIN wird von Windows verwaltet und den Apps gegenüber nie offengelegt.The PIN is something that Windows manages and that apps never see. Sie kann unter „Einstellungen“ > „Konten“ > „Anmeldeoptionen“ geändert werden.To change it, the user navigates to Settings > Accounts > Sign-in options.

Verwaltung und RichtlinieManagement and policy

Benutzer können ein Windows Hello-Begleitgerät von einem Windows 10-Desktopgerät entfernen, indem sie die Windows Hello-Begleitgeräte-App auf dem entsprechenden Desktopgerät ausführen.Users can remove a Windows Hello companion device from a Windows 10 desktops by running the Windows Hello companion device app on that desktop device.

Unternehmen stehen zum Steuern des Windows Hello-Begleitgeräteframeworks zwei Optionen zur Verfügung:Enterprises have two options for controlling the Windows Hello companion device framework:

  • Aktivieren oder Deaktivieren des FeaturesTurn the feature on or off
  • Definieren einer Whitelist mit Windows Hello-Begleitgeräten, die das Windows-App-Schließfach verwenden dürfenDefine the whitelist of Windows Hello companion devices allowed using Windows app locker

Das Windows Hello-Begleitgeräteframework unterstützt keine zentralisierte Inventarisierung verfügbarer Begleitgeräte und keine Methode zur weiteren Filterung der zulässigen Instanzen eines Windows Hello-Begleitgerätetyps. (So kann beispielsweise nicht festgelegt werden, dass nur Begleitgeräte mit einer Seriennummer zwischen X und Y zulässig sind.)The Windows Hello companion device framework does not support any centralized way to keep inventory of available companion devices, or a method to further filter which instances of a Windows Hello companion device type is allowed (for example, only a companion device with a serial number between X and Y are allowed). App-Entwickler können solche Funktionen jedoch über einen eigenen Dienst bereitstellen.Apps developers can, however, build a service to provide such functionality. Ausführlichere Informationen finden Sie im Abschnitt „Roaming, Sperrung und Filterdienst“.For more details, see the Roaming, Revocation, and Filter Service section.

SperrungRevocation

Die Remoteentfernung eines Begleitgeräts von einem bestimmten Windows 10-Desktopgerät wird vom Windows Hello-Begleitgeräteframework nicht unterstützt.The Windows Hello companion device framework does not support removing a companion device from a specific Windows 10 desktop device remotely. Stattdessen können Benutzer das Windows Hello-Begleitgerät über die auf dem Windows 10-Desktopgerät ausgeführte Windows Hello-Begleitgeräte-App entfernen.Instead, users can remove the Windows Hello companion device via the Windows Hello companion device app running on that Windows 10 desktop.

Begleitgerätehersteller können jedoch einen Dienst erstellen, der eine Remotesperrung ermöglicht.Companion device vendors, however, can build a service to provide remote revocation functionality. Ausführlichere Informationen finden Sie im Abschnitt „Roaming, Sperrung und Filterdienst“.For more details, see Roaming, Revocation, and Filter Service section.

Roaming- und FilterdiensteRoaming and filter services

Begleitgerätehersteller können einen Webdienst implementieren, der für folgende Szenarien verwendet werden kann:Companion device vendors can implement a web service that can be used for the following scenarios:

  • Eine Filterdienst für Unternehmen: Unternehmen kann den Satz von Windows Hello-Begleitgeräten einschränken, die in ihrer Umgebung eine SELECT-Anweisung nur wenige von einem bestimmten Anbieter arbeiten können.A filter service for enterprise: An enterprise can limit the set of Windows Hello companion devices that can work in their environment to a select few from a specific vendor. So kann das Unternehmen Contoso beispielsweise beim Hersteller X 10.000 Begleitgeräte des Modells Y bestellen und sicherstellen, dass in der Contoso-Domäne ausschließlich diese Geräte (und kein anderes Gerätemodell des Herstellers X) verwendet werden können.For example, the company Contoso could order 10,000 Model Y companion devices from Vendor X and ensure only those devices will work in the Contoso domain (and not any other device model from Vendor X).
  • Hardwareinventur: Unternehmen kann die Liste der vorhandenen Begleitgeräte, die in einer unternehmensumgebung verwendet bestimmen.Inventory: An enterprise can determine the list of existing companion devices used in an enterprise environment.
  • Real-Time-Sperrung: Wenn ein Mitarbeiter meldet, dass seine begleitgerät verloren geht oder gestohlen wird, kann der Webdienst verwendet werden, auf diesem Gerät widerrufen.Real time revocation: If an employee reports that his companion device is lost or stolen, the web service can be used to revoke that device.
  • Datenroaming: Ein Benutzer muss nur einmal seine begleitgerät zu registrieren, und kann für alle seine Windows 10-Desktops und Mobile.Roaming: A user only has to register his companion device once and it works on all of his Windows 10 desktops and Mobile.

Zur Implementierung dieser Features muss die Windows Hello-Begleitgeräte-App bei der Registrierung und Verwendung mit dem Webdienst kommunizieren.Implementing these features requires the Windows Hello companion device app to check with the web service at registration and usage time. Die Windows Hello-Begleitgeräte-App kann zur Optimierung in Anmeldeszenarien mit Zwischenspeicherung verwendet werden, sodass beispielsweise nur einmal täglich mit dem Webdienst kommuniziert werden muss. (Dadurch verlängert sich allerdings die Zeit für die Sperrung auf bis zu einen Tag.)The Windows Hello companion device app can optimize for cached logon scenarios like requiring checking with web service only once a day (at the cost of extending the revocation time to up to one day).

API-Modell des Windows Hello-BegleitgeräteframeworksWindows Hello companion device framework API model

ÜbersichtOverview

Eine Windows Hello-Begleitgeräte-App muss zwei Komponenten umfassen: eine Vordergrund-App mit Benutzeroberfläche zum Registrieren und Aufheben der Registrierung des Geräts sowie eine Hintergrundaufgabe für die Authentifizierung.A Windows Hello companion device app should contain two components: a foregroud app with UI responsible for registering and unregistering the device, and a background task that handles authentication.

Der gesamte API-Fluss sieht wie folgt aus:The overall API flow is as follows:

  1. Registrieren Sie das Windows Hello-Begleitgerät.Register the Windows Hello companion device
    • Überprüfen Sie, ob sich das Gerät in Reichweite befindet, und fragen Sie dessen Funktionen ab (falls erforderlich).Make sure the device is nearby and query its capability (if required)
    • Generieren Sie zwei HMAC-Schlüssel (entweder aufseiten des Begleitgeräts oder aufseiten der App).Generate two HMAC keys (either on the companion device side or the app side)
    • Rufen Sie „RequestStartRegisteringDeviceAsync“ auf.Call RequestStartRegisteringDeviceAsync
    • Rufen Sie „FinishRegisteringDeviceAsync“ auf.Call FinishRegisteringDeviceAsync
    • Stellen Sie sicher, dass die Windows Hello-Begleitgeräte-App die HMAC-Schlüssel speichert (sofern unterstützt) und die Kopien verwirft.Make sure Windows Hello companion device app stores HMAC keys (if supported) and Windows Hello companion device app discards its copies
  2. Registrieren Sie die Hintergrundaufgabe.Register your background task
  3. Warten Sie auf das passende Ereignis in der Hintergrundaufgabe.Wait for the right event in the background task
    • WaitingForUserConfirmation: Dieses Ereignis warten Sie, wenn es sich bei der Aktion/benutzerstiftbewegung geräteseitig Windows Hello Companion erforderlich ist, um die Authentifizierung zu startenWaitingForUserConfirmation: Wait for this event if the user action/gesture on the Windows Hello companion device side is required to start authentication flow
    • CollectingCredential: Dieses Ereignis warten Sie, wenn die Windows Hello begleitgerät Aktion/Benutzeraktion seitens des PC-authentifizierungsfluss starten (z. B. durch Drücken von LEERTASTE) verwendetCollectingCredential: Wait for this event if the Windows Hello companion device relies on user action/gesture on the PC side to start authentication flow (e.g., by hitting spacebar)
    • Andere Trigger, z. B. eine Smartcard: Stellen Sie sicher, dass aktuelle Authentifizierungsstatus rechts APIs aufrufen, Abfragen.Other trigger, like a smartcard: Make sure to query for current authentication state to call the right APIs.
  4. Halten Sie den Benutzer durch Aufrufen von „ShowNotificationMessageAsync“ über Fehlermeldungen oder nächste Schritte auf dem Laufenden.Keep user informed about error messages or required next steps by calling ShowNotificationMessageAsync. Rufen Sie diese API erst auf, nachdem ein Absichtssignal erfasst wurde.Only call this API once an intent signal is collected
  5. UnlockUnlock
    • Vergewissern Sie sich, dass Absichts- und Benutzeranwesenheitssignale erfasst wurden.Make sure intent and user presence signals were collected
    • Rufen Sie „StartAuthenticationAsync“ auf.Call StartAuthenticationAsync
    • Kommunizieren Sie mit dem Begleitgerät, um die erforderlichen HMAC-Vorgänge auszuführen.Communicate with the companion device to perform required HMAC operations
    • Rufen Sie „FinishAuthenticationAsync“ auf.Call FinishAuthenticationAsync
  6. Heben Sie auf Wunsch des Benutzers die Registrierung eines Windows Hello-Begleitgeräts auf (etwa, wenn der Benutzer sein Begleitgerät verloren hat).Un-register a Windows Hello companion device when the user requests it (for example, if they've lost their companion device)
    • Führen Sie das Windows Hello-Begleitgerät für den angemeldeten Benutzer mittels „FindAllRegisteredDeviceInfoAsync“ auf.Enumerate the Windows Hello companion device for logged in user via FindAllRegisteredDeviceInfoAsync
    • Heben Sie die Registrierung mithilfe von „UnregisterDeviceAsync“ auf.Un-register it using UnregisterDeviceAsync

Registrierung und RegistrierungsaufhebungRegistration and de-registration

Zwei API-Aufrufe auf der Begleit-Authentifizierungsdienst eine Registrierung erforderlich ist: RequestStartRegisteringDeviceAsync and FinishRegisteringDeviceAsync.Registration requires two API calls to the Companion Authentication Service: RequestStartRegisteringDeviceAsync and FinishRegisteringDeviceAsync.

Bevor diese Aufrufe vorgenommen werden können, muss die Windows Hello-Begleitgeräte-App überprüfen, ob das Windows Hello-Begleitgerät verfügbar ist.Before any of these calls are made, the Windows Hello companion device app must make sure that the Windows Hello companion device is available. Wenn das Windows Hello-Begleitgerät für die Generierung der HMAC-Schlüssel (Authentifizierungs- und Geräteschlüssel) zuständig ist, muss die Windows Hello-Begleitgeräte-App außerdem das Begleitgerät zur Generierung der Schlüssel auffordern, bevor einer der beiden obigen Aufrufe durchgeführt wird.If the Windows Hello companion device is responsible for generating HMAC keys (authentication and device keys), then the Windows Hello companion device app should also ask the companion device to generate them before making any of the above two calls. Wenn die Windows Hello-Begleitgeräte-App für die Generierung der HMAC-Schlüssel zuständig ist, muss dieser Schritt vor den beiden obigen Aufrufen durchgeführt werden.If the Windows Hello companion device app is responsible for generating HMAC keys, then it should do so before calling the above two calls.

Im Zuge des ersten API-Aufrufs (RequestStartRegisteringDeviceAsync) muss die Windows Hello-Begleitgeräte-App außerdem die Gerätefunktionen ermitteln (beispielsweise, ob die Möglichkeit zum sicheren Speichern von HMAC-Schlüsseln besteht) und sie ggf. im Rahmen des API-Aufrufs übergeben.Additionally, as part of first API call (RequestStartRegisteringDeviceAsync), the Windows Hello companion device app must decide on device capability and be prepared to pass it as part of the API call; for example, whether the Windows Hello companion device supports secure storage for HMAC keys. Wenn mit der gleichen Windows Hello-Begleitgeräte-App mehrere Versionen des gleichen Begleitgeräts verwaltet werden und sich diese Funktionen ändern (und dies mithilfe einer Geräteabfrage ermittelt werden muss), empfiehlt es sich, die entsprechende Abfrage vor dem ersten API-Aufruf durchzuführen.If the same Windows Hello companion device app is used to manage multiple versions of the same companion device and those capabilities change (and requires a device query to decide), we recommend this queries occurs before first API call is made.

Die erste API (RequestStartRegisteringDeviceAsync) gibt ein Handle zurück, das von der zweiten API (FinishRegisteringDeviceAsync) verwendet wird.The first API (RequestStartRegisteringDeviceAsync) will return a handle used by the second API (FinishRegisteringDeviceAsync). Der erste Aufruf für die Registrierung startet die PIN-Abfrage, um sicherzustellen, dass der Benutzer anwesend ist.The first call for registration will launch the PIN prompt to make sure user is present. Ist keine PIN eingerichtet, ist dieser Aufruf nicht erfolgreich.If no PIN is set up, this call will fail. Über einen Aufruf von „KeyCredentialManager.IsSupportedAsync“ kann die Windows Hello-Begleitgeräte-App auch abfragen, ob eine PIN eingerichtet ist.The Windows Hello companion device app can query whether PIN is set up or not via KeyCredentialManager.IsSupportedAsync call as well. Bei dem Aufruf von „RequestStartRegisteringDeviceAsync“ kann auch ein Fehler auftreten, falls die Verwendung des Windows Hello-Begleitgeräts per Richtlinie deaktiviert wurde.RequestStartRegisteringDeviceAsync call can also fail if policy has disabled the usage of the Windows Hello companion device.

Das Ergebnis des ersten Aufrufs wird über die Enumeration „SecondaryAuthenticationFactorRegistrationStatus“ zurückgegeben:The result of first call is returned via SecondaryAuthenticationFactorRegistrationStatus enum:

{
    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
}

Mit dem zweiten Aufruf (FinishRegisteringDeviceAsync) wird die Registrierung abgeschlossen.The second call (FinishRegisteringDeviceAsync) finishes the registration. Im Rahmen des Registrierungsprozesses kann die Windows Hello-Begleitgeräte-App Konfigurationsdaten des Begleitgeräts mit dem Begleitauthentifizierungsdienst speichern.As part of registration process, the Windows Hello companion device app can store companion device configuration data with Companion Authentication Service. Für diese Daten gilt eine Größenbeschränkung von 4 KB.There is a 4K size limit for this data. Die Daten stehen der Windows Hello-Begleitgeräte-App bei der Authentifizierung zur Verfügung.This data will be available to the Windows Hello companion device app at authentication time. Diese Daten können etwa zum Herstellen einer Verbindung mit dem Windows Hello-Begleitgerät verwendet werden (beispielsweise im Falle einer MAC-Adresse). Ein weiteres Verwendungsbeispiel für Konfigurationsdaten wäre die Verwendung des PCs als Speicherort, falls das Windows Hello-Begleitgerät über keine Speichermöglichkeit verfügt.This data can be used, as an example, to connect to the Windows Hello companion device like a MAC address, or if the Windows Hello companion device does not have storage and companion device wants to use PC for storage, then configuration data can be used. Beachten Sie, dass in den Konfigurationsdaten gespeicherte vertrauliche Daten mit einem Schlüssel verschlüsselt werden müssen, der nur dem Windows Hello-Begleitgerät bekannt ist.Note that any sensitive data stored as part of configuration data must be encrypted with a key that only the Windows Hello companion device knows. Wenn Konfigurationsdaten von einem Windows-Dienst gespeichert werden, stehen sie der Windows Hello-Begleitgeräte-App außerdem benutzerprofilübergreifend zur Verfügung.Also, given that configuration data is stored by a Windows service, it is available to the Windows Hello companion device app across user profiles.

Die Windows Hello-Begleitgeräte-App kann „AbortRegisteringDeviceAsync“ aufrufen, um die Registrierung abzubrechen und einen Fehlercode zu übergeben.The Windows Hello companion device app can call AbortRegisteringDeviceAsync to cancel the registration and pass in an error code. Der Begleitauthentifizierungsdienst protokolliert den Fehler in den Telemetriedaten.The Companion Authentication Service will log the error in the telemetry data. Ein gutes Beispiel für diesen Aufruf wäre etwa, wenn die Registrierung aufgrund eines Windows Hello-Begleitgerätefehlers nicht abgeschlossen werden konnte (beispielsweise, weil die HMAC Schlüssel nicht gespeichert werden können oder die Bluetooth-Verbindung unterbrochen wurde).A good example for this call would be when something went wrong with the Windows Hello companion device and it could not finish registration (e.g., it cannot store HMAC keys or BT connection was lost).

Die Windows Hello-Begleitgeräte-App muss dem Benutzer eine Option zur Verfügung stellen, über die er die Registrierung des Windows Hello-Begleitgeräts bei seinem Windows 10-Desktopgerät aufheben kann (beispielsweise, wenn er sein Begleitgerät verloren oder eine neuere Version gekauft hat).The Windows Hello companion device app must provide an option for the user to de-register their Windows Hello companion device from their Windows 10 desktop (e.g., if they lost their companion device or bought a newer version). Bei Verwendung dieser Option muss die Windows Hello-Begleitgeräte-App „UnregisterDeviceAsync“ aufrufen.When the user selects that option, then the Windows Hello companion device app must call UnregisterDeviceAsync. Dieser Aufruf durch die Windows Hello-Begleitgeräte-App sorgt dafür, dass der Begleitgeräte-Authentifizierungsdienst aufseiten des PCs alle Daten (einschließlich der HMAC-Schlüssel) löscht, die mit der speziellen Geräte- und App-ID zusammenhängen.This call by the Windows Hello companion device app will trigger the companion device authentication service to delete all data (including HMAC keys) corresponding to the specific device Id and AppId of the caller app from PC side. Dieser API-Aufruf versucht nicht, HMAC-Schlüssel aus der Windows Hello-Begleitgeräte-App oder aufseiten des Begleitgeräts zu löschen.This API call does not attempt to delete HMAC keys from either the Windows Hello companion device app or companion device side. Dies muss in der Windows Hello-Begleitgeräte-App implementiert werden.That is left for the Windows Hello companion device app to implement.

Sämtliche Fehlermeldungen der Registrierungs- und Registrierungsaufhebungsphase müssen von der Windows Hello-Begleitgeräte-App angezeigt werden.The Windows Hello companion device app is responsible for showing any error messages that happen in registration and de-registration phase.

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);
        }
    }
}

AuthentifizierungAuthentication

Zwei API-Aufrufe auf der Begleit-Authentifizierungsdienst eine Authentifizierung erfordert: StartAuthenticationAsync und FinishAuthencationAsync.Authentication requires two API calls to the Companion Authentication Service: StartAuthenticationAsync and FinishAuthencationAsync.

Die erste Initiierungs-API gibt ein Handle zurück, das dann von der zweiten API verwendet wird.The first initiation API will return a handle used by the second API. Der erste Aufruf gibt unter anderem eine Nonce zurück, für die (nach Verkettung mit anderen Elementen) ein HMAC-Vorgang mit dem auf dem Windows Hello-Begleitgerät gespeicherten Geräteschlüssel durchgeführt werden muss.The first call returns, among other things, a nonce that – once concatenated with other things - needs to be HMAC'ed with the device key stored on the Windows Hello companion device. Der zweite Aufruf gibt die Ergebnisse des HMAC-Vorgangs mit dem Geräteschlüssel zurück und kann in eine erfolgreiche Authentifizierung (Anzeige des Desktops) münden.The second call returns the results of HMAC with device key and can potentially end in successful authentication (i.e., the user will see their desktop).

Bei der ersten Initiierungs-API (StartAuthenticationAsync) kann ein Fehler auftreten, falls das Windows Hello-Begleitgerät nach der ursprünglichen Registrierung durch eine Richtlinie deaktiviert wurde.The first initiation API (StartAuthenticationAsync) can fail if policy has disabled that Windows Hello companion device after initial registration. Ein Fehler kann außerdem auftreten, wenn der API-Aufruf außerhalb des Zustands „WaitingForUserConfirmation“ oder „CollectingCredential“ erfolgt. (Weitere Informationen finden Sie weiter unten in diesem Abschnitt.)It can also fail if the API call was made outside WaitingForUserConfirmation or CollectingCredential states (more on this later in this section). Darüber hinaus kann ein Fehler auftreten, wenn der Aufruf von einer nicht registrierten Begleitgeräte-App stammt.It can also fail if an unregistered companion device app calls it. Die Enumeration „SecondaryAuthenticationFactorAuthenticationStatus“ fasst die möglichen Ergebnisse zusammen:SecondaryAuthenticationFactorAuthenticationStatus Enum summarizes the possible outcomes:

{
    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
}

Beim zweiten API-Aufruf (FinishAuthencationAsync) kann ein Fehler auftreten, wenn die Nonce aus dem ersten Aufruf nicht mehr gültig ist. (Dies ist nach 20 Sekunden der Fall.)The second API call (FinishAuthencationAsync) can fail if the nonce that was provided in the first call is expired (20 seconds). Die Enumeration „SecondaryAuthenticationFactorFinishAuthenticationStatus“ erfasst die möglichen Ergebnisse.SecondaryAuthenticationFactorFinishAuthenticationStatus enum captures possible outcomes.

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

Das Timing der beiden API-Aufrufe („StartAuthenticationAsync“ und „FinishAuthencationAsync“) muss sich an der Erfassung der Absichts-, Benutzeranwesenheits- und Mehrdeutigkeitsvermeidungssignale durch das Windows Hello-Begleitgerät orientieren. (Weitere Informationen finden Sie unter „Benutzersignale“.)The timing of two API calls (StartAuthenticationAsync and FinishAuthencationAsync) needs to align with how the Windows Hello companion device collects intent, user presence, and disambiguation signals (see User Signals for more details). So darf der zweite Aufruf beispielsweise erst nach Verfügbarkeit des Absichtssignals übermittelt werden.For example, the second call must not be submitted until intent signal is available. Anders ausgedrückt: Der PC darf nicht entsperrt werden, wenn der Benutzer dies nicht ausdrücklich beabsichtigt.In other words, the PC should not unlock if the user has not expressed intent for it. Um es noch etwas deutlicher zu machen: Wenn die Entsperrung des PCs darauf beruht, dass sich ein Bluetooth-Gerät in Reichweite befindet, muss ein explizites Absichtssignal erfasst werden. Andernfalls wird der PC jedes Mal entsperrt, wenn der Benutzer auf dem Weg in die Küche daran vorbeiläuft.To make this more clear, assume that Bluetooth proximity is used for PC unlock, then an explicit intent signal must be collected, otherwise, as soon as user walks by his PC on the way to kitchen, the PC will unlock. Darüber hinaus ist die im ersten Aufruf zurückgegebene Nonce nur für 20 Sekunden gültig und läuft dann ab.Also, the nonce returned from the first call is time bound (20 seconds) and will expire after certain period. Daher darf der erste Aufruf erst erfolgen, wenn die Windows Hello-Begleitgeräte-App davon ausgehen kann, dass das Begleitgerät vorhanden ist (also etwa per USB angeschlossen oder an das NFC-Lesegerät gehalten wird).As a result, the first call only should be made when the Windows Hello companion device app has good indication of companion device presence, e.g., the companion device is inserted into USB port, or tapped on NFC reader. Achten Sie bei Verwendung von Bluetooth darauf, weder den Akku des PCs noch andere laufende Bluetooth-Aktivitäten zu beeinträchtigen, während geprüft wird, ob sich das Windows Hello-Begleitgerät in Reichweite befindet.With Bluetooth, care must be taken to avoid affecting battery on PC side or affecting other Bluetooth activities going on at that point when checking for Windows Hello companion device presence. Falls ein Benutzeranwesenheitssignal (etwa die Eingabe einer PIN) erforderlich ist, empfiehlt es sich zudem, den ersten Authentifizierungsaufruf erst nach Erfassung dieses Signals durchzuführen.Also, if a user presence signal needs to be provided (e.g., by typing in PIN), it is recommended that the first authentication call is only made after that signal is collected.

Dank des Windows Hello-Begleitgeräteframeworks kann die Windows Hello-Begleitgeräte-App die beiden obigen Aufrufe zu einem geeigneten Zeitpunkt durchführen, da immer genau bekannt ist, in welcher Phase des Authentifizierungsablaufs sich der Benutzer befindet.The Windows Hello companion device framework helps the Windows Hello companion device app to make informed decision on when to make above two calls by providing a complete picture of where user is in authentication flow. Zu diesem Zweck informiert das Windows Hello-Begleitgeräteframework die App-Hintergrundaufgabe über Sperrzustandsänderungen.Windows Hello companion device framework provides this functionality by providing lock state change notification to app background task.

Begleitgerätefluss

Im Anschluss finden Sie Details zu den einzelnen Zuständen:Details of each of these states are as follows:

StatusState BeschreibungDescription
WaitingForUserConfirmationWaitingForUserConfirmation Dieses Zustandsänderungs-Benachrichtigungsereignis wird ausgelöst, wenn der Sperrbildschirm eingeblendet wird (beispielsweise, weil der Benutzer WINDOWS+L gedrückt hat).This state change notification event is fired when the lock screen comes down (e.g., user pressed Windows + L). Es wird davon abgeraten, Fehlermeldungen in Bezug auf Probleme bei der Suche nach einem Gerät in diesem Zustand anzufordern.We recommend not to request any error messages relating to having difficulty finding a device in this state. Im Allgemeinen empfiehlt es sich, nur dann Meldungen anzuzeigen, wenn das Absichtssignal vorliegt.In general, we recommend to only show messages when intent signal is available. Die Windows Hello-Begleitgeräte-App muss in diesem Zustand den ersten API-Aufruf für die Authentifizierung durchführen, wenn das Begleitgerät das Absichtssignal (beispielsweise Halten an ein NFC-Lesegerät, Drücken einer Taste des Begleitgeräts oder Ausführen einer bestimmten Geste – etwa Klatschen) erfasst und die Hintergrundaufgabe der Windows Hello-Begleitgeräte-App vom Begleitgerät einen Hinweis dafür erhält, dass das Absichtssignal erkannt wurde.The Windows Hello companion device app should make the first API call for authentication in this state if the companion device collects the intent signal (e.g., tapping on NFC reader, press of a button on the companion device or a specific gesture, like clapping), and the Windows Hello companion device app background task receives indication from the companion device that intent signal was detected. Ansonsten gilt: Wenn die Windows Hello-Begleitgeräte-App darauf wartet, dass der Authentifizierungsablauf durch den PC gestartet wird (indem der Benutzer auf dem Sperrbildschirm nach oben wischt oder die LEERTASTE drückt), muss die Windows Hello-Begleitgeräte-App auf den nächsten Zustand (CollectingCredential) warten.Otherwise, if the Windows Hello companion device app relies on the PC to start authentication flow (by having user swipe up the unlock screen or hitting space bar), then the Windows Hello companion device app needs to wait for the next state (CollectingCredential).
CollectingCredentialCollectingCredential Dieses Zustandsänderungs-Benachrichtigungsereignis wird ausgelöst, wenn der Benutzer den Laptopdeckel öffnet, eine beliebige Taste auf der Tastatur drückt oder auf dem Sperrbildschirm nach oben wischt.This state change notification event is fired when the user either opens their laptop lid, hits any key on their keyboard, or swipes up to the unlock screen. Wenn der Start der Absichtssignalerfassung auf den obigen Aktionen basiert, muss die Windows Hello-Begleitgeräte-App mit der Erfassung des Signals beginnen (etwa mithilfe eines Popupfensters auf dem Begleitgerät, in dem der Benutzer gefragt wird, ob er den PC entsperren möchte).If the Windows Hello companion device relies on the above actions to start collecting the intent signal, then the Windows Hello companion device app should start collecting it (e.g., via a pop up on the companion device asking whether user wants to unlock the PC). Dies ist ein guter Zeitpunkt für die Anzeige von Fehlermeldungen, falls die Windows Hello-Begleitgeräte-App ein Benutzeranwesenheitssignal auf dem Begleitgerät benötigt (etwa durch Eingabe einer PIN auf dem Windows Hello-Begleitgerät).This would be a good time to provide error cases if the Windows Hello companion device app needs the user to provide a user presence signal on the companion device (like typing in PIN on the Windows Hello companion device).
SuspendingAuthenticationSuspendingAuthentication Wenn die Windows Hello-Begleitgeräte-App diesen Zustand empfängt, bedeutet das, dass der Begleitauthentifizierungsdienst keine Authentifizierungsanforderungen mehr akzeptiert.When the Windows Hello companion device app receives this state, it means that the Companion Authentication Service has stopped accepting authentication requests.
CredentialCollectedCredentialCollected Dieser Zustand bedeutet, dass eine andere Windows Hello-Begleitgeräte-App die zweite API aufgerufen hat und der Begleitauthentifizierungsdienst die übermittelten Daten überprüft.This means that another Windows Hello companion device app has called the second API and that the Companion Authentication Service is verifying what was submitted. An diesem Punkt akzeptiert der Begleitauthentifizierungsdienst keine weiteren Authentifizierungsanforderungen, es sei denn, die Überprüfung der aktuell übermittelten Anforderung ist nicht erfolgreich.At this point, the Companion Authentication Service is not accepting any other authentication requests unless the currently submitted one does not pass verification. Die Windows Hello-Begleitgeräte-App sollte auf den nächsten Zustand warten.The Windows Hello companion device app should stay tuned until next state is reached.
CredentialAuthenticatedCredentialAuthenticated Dieser Zustand bedeutet, dass die übermittelten Anmeldeinformationen akzeptiert wurden.This means that the submitted credential worked. „CredentialAuthenticated“ verfügt über die Geräte-ID des erfolgreichen Windows Hello-Begleitgeräts.The credentialAuthenticated has the device ID of the Windows Hello companion device that succeeded. Diese muss von der Windows Hello-Begleitgeräte-App überprüft werden, um zu ermitteln, ob das ihr zugeordnete Gerät erfolgreich war.The Windows Hello companion device app should make sure to check on that to see if its associated device was the winner. Falls nicht, darf die Windows Hello-Begleitgeräte-App keine nachfolgenden Authentifizierungsabläufe (wie etwa eine Erfolgsmeldung auf dem Begleitgerät oder eine Vibration des Geräts) durchführen.If not, then the Windows Hello companion device app should avoid showing any post authentication flows (like success message on the companion device or perhaps a vibration on that device). Falls die übermittelten Anmeldeinformationen nicht akzeptiert wurden, ändert sich der Zustand in „CollectingCredential“.Note that if the submitted credential did not work, the state will change to CollectingCredential state.
StoppingAuthenticationStoppingAuthentication Die Authentifizierung war erfolgreich, und dem Benutzer wurde der Desktop angezeigt.Authentication succeeded and user saw the desktop. Jetzt kann die Beendigung der Hintergrundaufgabe erzwungen werden.Time to kill your background task. Heben Sie vor dem Beenden der Hintergrundaufgabe ausdrücklich die Registrierung des StageEvent-Handlers auf.Before exiting the backround task, explicitly unregister the StageEvent handler. Dadurch wird die Hintergrundaufgabe schnell beendet.This will help the background task exit quickly.

Windows Hello-Begleitgeräte-Apps dürfen die beiden Authentifizierungs-APIs nur in den ersten beiden Zuständen aufrufen.Windows Hello companion device apps should only call the two authentication APIs in the first two states. Windows Hello-Begleitgeräte-Apps müssen ermitteln, in welchem Szenario das Ereignis ausgelöst wird.Windows Hello companion device apps should check for what scenario this event is being fired. Es gibt zwei Möglichkeiten: beim Entsperren oder nach dem Entsperren.There are two possibilities: unlock or post unlock. Derzeit wird nur das Entsperrszenario unterstützt.Currently, only unlock is supported. In späteren Versionen werden unter Umständen auch Szenarien nach dem Entsperren unterstützt.In upcoming releases, post unlock scenarios may be supported. Die Enumeration „SecondaryAuthenticationFactorAuthenticationScenario“ erfasst diese beiden Optionen:The SecondaryAuthenticationFactorAuthenticationScenario enum captures these two options:

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

Vollständiges Codebeispiel:Complete code sample:

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 HintergrundaufgabeRegister a background task

Wenn die Windows Hello-Begleitgeräte-App das erste Begleitgerät registriert, muss sie auch die Hintergrundaufgabenkomponente registrieren, die Authentifizierungsinformationen zwischen Gerät und Begleitgeräte-Authentifizierungsdienst übergibt.When the Windows Hello companion device app registers the first companion device, it should also register its background task component which will pass authentication information between device and companion device authentication service.

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 MeldungenErrors and messages

Das Windows Hello-Begleitgeräteframework muss den Benutzer mittels Feedback über Erfolg oder Misserfolg der Anmeldung informieren.The Windows Hello companion device framework is responsible for providing feedback to the user about success or failure of signing in. Das Windows Hello-Begleitgeräteframework stellt eine Reihe (lokalisierter) Text- und Fehlermeldungen für die Windows Hello-Begleitgeräte-App zur Verfügung.The Windows Hello companion device framework will provide a stock of (localized) text and error messages for the Windows Hello companion device app to choose from. Diese werden auf der Anmeldebenutzeroberfläche angezeigt.These will be displayed in the logon UI.

Begleitgerätefehler

Windows Hello-Begleitgeräte-Apps können auf der Anmeldebenutzeroberfläche mithilfe von „ShowNotificationMessageAsync“ Meldungen für den Benutzer anzeigen.Windows Hello companion device apps can use ShowNotificationMessageAsync to show messages to user as part of the logon UI. Rufen Sie diese API auf, wenn ein Absichtssignal verfügbar ist.Call this API when an intent signal is available. Beachten Sie, dass ein Absichtssignal immer aufseiten des Windows Hello-Begleitgeräts erfasst werden muss.Note that an intent signal must always be collected on the Windows Hello companion device side.

Es gibt zwei Arten von Meldungen: Anleitungen und Fehler.There are two types of messages: guidance and errors.

Anleitungsmeldungen dienen dazu, den Benutzer über die Vorgehensweise zum Starten des Entsperrprozesses zu informieren.Guidance messages are designed to show the user how to start the unlock process. Diese Meldungen werden dem Benutzer lediglich einmal (bei der erstmaligen Geräteregistrierung) auf dem Sperrbildschirm angezeigt.These messages are only shown to the user once on the lock screen, upon first device registration, and never shown there again. Diese Nachrichten werden auch weiterhin auf dem Sperrbildschirm angezeigt.These messages will continue to be shown under the lock screen.

Fehlermeldungen werden immer angezeigt und werden angezeigt, nachdem ein Absichtssignal angezeigt wird.Error messages are always shown and will be shown after an intent signal is provided. Angesichts der Tatsache, dass vor dem Anzeigen von Meldungen für den Benutzer ein Absichtssignal erfasst werden muss und der Benutzer seine Absicht nur über eines der Windows Hello-Begleitgeräte zum Ausdruck bringt, darf es nicht dazu kommen, dass mehrere Windows Hello-Begleitgeräte um die Anzeige von Fehlermeldungen konkurrieren.Given that an intent signal must be collected before showing messages to the user, and the user will provide that intent only using one of the Windows Hello companion devices, there must not be a situation where multiple Windows Hello companion devices race for showing error messages. Daher pflegt das Windows Hello-Begleitgeräteframework keine Warteschlange.As a result, the Windows Hello companion device framework does not maintain any queue. Wenn ein Aufrufer eine Fehlermeldung anfordert, wird sie fünf Sekunden lang angezeigt. Während dieser fünf Sekunden werden alle anderen Anforderungen zum Anzeigen einer Fehlermeldung verworfen.When a caller asks for an error message, it will be shown for 5 seconds and all other requests for showing an error message in that 5 seconds are dropped. Nach Ablauf der fünf Sekunden hat ein anderer Aufrufer die Möglichkeit, eine Fehlermeldung anzuzeigen.Once 5 seconds has passed, then the opportunity arises for another caller to show an error message. Das Blockieren des Fehlerkanals durch Aufrufer ist nicht zulässig.We prohibit any caller from jamming the error channel.

Folgende Anleitungs- und Fehlermeldungen stehen zur Verfügung.Guidance and error messages are as follows. Der Gerätename ist ein Parameter und wird von der Begleitgeräte-App als Teil von „ShowNotificationMessageAsync“ übergeben.Device name is a parameter passed by the companion device app as part of ShowNotificationMessageAsync.

GuidanceGuidance

  • „Wischen Sie nach oben oder drücken Sie die LEERTASTE, um sich mit Gerätename anzumelden.“"Swipe up or press space bar to sign in with device name."
  • „Einrichtung des Begleitgeräts."Setting up your companion device. Bitte warten Sie oder verwenden Sie eine andere Anmeldeoption.“Please wait or use another sign-in option."
  • „Halten Sie Gerätename zur Anmeldung an das NFC-Lesegerät.“"Tap device name to the NFC reader to sign in."
  • Gerätename wird gesucht ...“"Looking for device name ..."
  • „Schließen Sie Gerätename zur Anmeldung an einen USB-Anschluss an.“"Plug device name into a USB port to sign in."

FehlerErrors

  • „Anmeldeanweisungen finden Sie auf Gerätename.“"See device name for sign-in instructions."
  • „Aktivieren Sie Bluetooth, um Gerätename für die Anmeldung zu verwenden.“"Turn on Bluetooth to use device name to sign in."
  • „Aktivieren Sie NFC, um Gerätename für die Anmeldung zu verwenden.“"Turn on NFC to use device name to sign in."
  • „Stellen Sie eine WLAN-Verbindung her, um Gerätename für die Anmeldung zu verwenden.“"Connect to a Wi-Fi network to use device name to sign in."
  • „Tippen Sie erneut auf Gerätename.“"Tap device name again."
  • „In Ihrem Unternehmen ist keine Anmeldung mit Gerätename möglich."Your enterprise prevents sign in with device name. Verwenden Sie eine andere Anmeldeoption.“Use another sign-in option."
  • „Tippen Sie zur Anmeldung auf Gerätename.“"Tap device name to sign in."
  • „Legen Sie Ihren Finger zur Anmeldung auf Gerätename.“"Rest your finger on device name to sign in."
  • „Wischen Sie zur Anmeldung mit Ihrem Finger über Gerätename.“"Swipe your finger on device name to sign in."
  • „Anmeldung mit Gerätename nicht möglich."Couldn’t sign in with device name. Verwenden Sie eine andere Anmeldeoption.“Use another sign-in option."
  • „Es ist ein Fehler aufgetreten."Something went wrong. Verwenden Sie eine andere Anmeldeoption, und richten Sie Gerätename erneut ein.“Use another sign-in option, and then set up device name again."
  • „Versuchen Sie es noch mal.“"Try again."
  • „Sagen Sie Ihre gesprochene Passphrase in Gerätename.“"Say your Spoken Passphrase into device name."
  • „Bereit für die Anmeldung mit Gerätename.“"Ready to sign in with device name."
  • „Verwenden Sie zuerst eine andere Anmeldeoption. Dann können Sie Gerätename verwenden, um sich anzumelden.“"Use another sign-in option first, then you can use device name to sign in."

Aufzählen registrierter GeräteEnumerating registered devices

Die Windows Hello-Begleitgeräte-App kann durch Aufrufen von „FindAllRegisteredDeviceInfoAsync“ die registrierten Begleitgeräte aufzählen.The Windows Hello companion device app can enumerate the list of registered companion devices via FindAllRegisteredDeviceInfoAsync call. Diese API unterstützt zwei Abfragetypen (definiert durch die Enumeration „SecondaryAuthenticationFactorDeviceFindScope“):This API supports two query types defined via enum SecondaryAuthenticationFactorDeviceFindScope:

{
    User = 0,
    AllUsers,
}

Der erste Bereich gibt die Liste der Geräte für den angemeldeten Benutzer zurück.The first scope returns the list of devices for the logged on user. Der zweite gibt die Liste für alle Benutzer auf dem PC zurück.The second one returns the list for all users on that PC. Der erste Bereich muss beim Aufheben der Registrierung verwendet werden, um zu verhindern, dass die Registrierung für ein Windows Hello-Begleitgerät eines anderen Benutzers aufgehoben wird.The first scope must be used at un-registration time to avoid un-registering another user's Windows Hello companion device. Der zweite muss bei der Authentifizierung oder Registrierung verwendet werden: Bei der Registrierung kann diese Enumeration dazu beitragen, eine doppelte Registrierung des gleichen Windows Hello-Begleitgeräts durch die App zu vermeiden.The second one must be used at authentication or registration time: at registration time, this enumeration can help the app avoid trying to register the same Windows Hello companion device twice.

Hinweis: Selbst wenn die App diese Überprüfung nicht durchführt, wird eine mehrmalige Registrierung des gleichen Windows Hello-Begleitgeräts durch den PC verhindert.Note that even if the app does not perform this check, the PC does and will reject the same Windows Hello companion device from being registered more than once. Wenn zum Zeitpunkt der Authentifizierung der Bereich „AllUsers“ verwendet wird, kann die Windows Hello-Begleitgeräte-App den Wechsel des Benutzerflusses besser unterstützen: Benutzer A wird angemeldet, während Benutzer B angemeldet ist. (Dazu müssen beide Benutzer die Windows Hello-Begleitgeräte-App installiert haben, Benutzer A muss seine Begleitgeräte beim PC registriert haben, und auf dem PC muss der Sperr- oder der Anmeldebildschirm angezeigt werden.)At authentication time, using the AllUsers scope helps the Windows Hello companion device app support switch user flow: log on user A when user B is logged in (this requires that both users have installed the Windows Hello companion device app and user A has registered their companion devices with the PC and the PC is sitting on lock screen (or logon screen)).

SicherheitsanforderungenSecurity requirements

Der Begleitauthentifizierungsdienst bietet folgende Sicherheitsvorkehrungen:The Companion Authentication Service provides the following security protections.

  • Schadsoftware auf einem Windows 10-Desktopgerät, die als mittlerer Benutzer oder App-Container ausgeführt wird, kann über das Windows Hello-Begleitgerät nicht unbemerkt auf (im Rahmen von Windows Hello gespeicherte) Benutzeranmeldeinformationsschlüssel auf dem PC zugreifen.Malware on a Windows 10 desktop device running as a medium user or app container cannot use the Windows Hello companion device to access user credential keys (stored as part of Windows Hello) on a PC silently.
  • Ein böswilliger Benutzer auf einem Windows 10-Desktopgerät kann kein Windows Hello-Begleitgerät eines anderen Benutzers auf dem Windows 10-Desktopgerät verwenden, um unbemerkt auf dessen Benutzeranmeldeinformationsschlüssel (auf dem gleichen Windows 10-Desktopgerät) zuzugreifen.A malicious user on a Windows 10 desktop device cannot use the Windows Hello companion device that belongs to another user on that Windows 10 desktop device to get silent access to his user credential keys (on the same Windows 10 desktop device).
  • Schadsoftware auf dem Windows Hello-Begleitgerät kann nicht unbemerkt auf die Benutzeranmeldeinformationsschlüssel auf dem Windows 10-Desktopgerät zugreifen und auch keine Funktionen und keinen Code nutzen, die speziell für das Windows Hello-Begleitgeräteframework entwickelt wurden.Malware on the Windows Hello companion device cannot silently get access to user credential keys on a Windows 10 desktop device, including leveraging functionality or code developed specifically for the Windows Hello companion device framework.
  • Ein böswilliger Benutzer kann ein Windows 10-Desktopgerät nicht durch Abfangen und späteres Wiedergeben von Datenverkehr zwischen Windows Hello-Begleitgerät und Windows 10-Desktopgerät entsperren.A malicious user cannot unlock a Windows 10 desktop device by capturing traffic between the Windows Hello companion device and the Windows 10 desktop device and replaying it later. Die Verwendung von Nonce, Authentifizierungsschlüssel und HMAC in unserem Protokoll schützt zuverlässig vor Replay-Angriffen.Usage of nonce, authkey, and HMAC in our protocol guarantees protection against a replay attack.
  • Schadsoftware oder ein böswilliger Benutzer auf einem nicht autorisierten PC kann nicht über ein Windows Hello-Begleitgerät auf den PC eines regulären Benutzers zugreifen.Malware or a malicious user on a rouge PC cannot use Windows Hello companion device to get access to honest user PC. Dies wird durch die gegenseitige Authentifizierung zwischen Begleitauthentifizierungsdienst und Windows Hello-Begleitgerät mit Authentifizierungsschlüssel und HMAC in unserem Protokoll erreicht.This is achieved through mutual authentication between Companion Authentication Service and Windows Hello companion device through usage of authkey and HMAC in our protocol.

Der Schlüssel für die oben aufgeführten Sicherheitsvorkehrungen liegt im Schutz der HMAC Schlüssel vor unbefugtem Zugriff sowie in der Überprüfung der Benutzeranwesenheit.The key to achieve the security protections enumerated above is to protect HMAC keys from unauthorized access and also verifying user presence. Genauer gesagt müssen folgende Anforderungen erfüllt werden:More specifically, it must satisfy these requirements:

  • Schutz des Windows Hello-Begleitgeräts vor KlonversuchenProvide protection against cloning the Windows Hello companion device
  • Schutz vor Abhörversuchen, wenn HMAC-Schlüssel zur Registrierung an den PC gesendet werdenProvide protection against eavesdropping when sending HMAC keys at registration time to the PC
  • Verfügbarkeit des BenutzeranwesenheitssignalsMake sure that user presence signal is available