Bagikan melalui


Windows Unlock dengan perangkat pendamping Windows Hello (IoT)

Perangkat pendamping Windows Hello adalah perangkat yang dapat bertindak bersama dengan desktop Windows 10 Anda untuk meningkatkan pengalaman autentikasi pengguna. Menggunakan kerangka kerja perangkat pendamping Windows Hello, perangkat pendamping dapat memberikan pengalaman yang kaya untuk Windows Hello bahkan ketika biometrik tidak tersedia (misalnya, jika desktop Windows 10 tidak memiliki kamera untuk autentikasi wajah atau perangkat pembaca sidik jari, misalnya).

Catatan

API untuk kerangka kerja perangkat pendamping Windows Hello tidak digunakan lagi di Windows 10, versi 2004.

Pendahuluan

Untuk sampel kode, lihat repositori Github kerangka kerja perangkat pendamping Windows Hello.

Kasus penggunaan

Ada banyak cara untuk menggunakan kerangka kerja perangkat pendamping Windows Hello untuk membangun pengalaman membuka kunci Windows yang hebat dengan perangkat pendamping. Misalnya, pengguna dapat:

  • Pasang perangkat pendamping mereka ke PC melalui USB, sentuh tombol pada perangkat pendamping, dan buka kunci PC secara otomatis.
  • Bawa ponsel di saku mereka yang sudah dipasangkan dengan PC melalui Bluetooth. Setelah menekan bilah spasi di PC mereka, ponsel mereka menerima pemberitahuan. Setujui dan PC hanya membuka kunci.
  • Ketuk perangkat pendamping mereka ke pembaca NFC untuk membuka kunci PC mereka dengan cepat.
  • Kenakan band kebugaran yang telah mengautentikasi pemakainya. Setelah mendekati PC, dan dengan melakukan gerakan khusus (seperti bertepuk tangan), PC akan terbuka.

Perangkat pendamping Windows Hello yang diaktifkan biometrik

Jika perangkat pendamping mendukung biometrik, dalam beberapa kasus kerangka kerja Biometrik Windows mungkin merupakan solusi yang lebih baik daripada kerangka kerja perangkat pendamping Windows Hello.

Komponen solusi

Diagram di bawah ini menggambarkan komponen solusi dan siapa yang bertanggung jawab untuk membangunnya.

gambaran umum kerangka kerja

Kerangka kerja perangkat pendamping Windows Hello diimplementasikan sebagai layanan yang berjalan di Windows (disebut Layanan Autentikasi Pendamping dalam artikel ini). Layanan ini bertanggung jawab untuk menghasilkan token pembuka kunci yang perlu dilindungi oleh kunci HMAC yang disimpan di perangkat pendamping Windows Hello. Ini menjamin bahwa akses ke token pembuka kunci memerlukan kehadiran perangkat pendamping Windows Hello. Per setiap tuple (PC, pengguna Windows), akan ada token pembuka kunci unik.

Integrasi dengan Windows Hello Companion Device Framework memerlukan:

  • Aplikasi perangkat pendamping Windows Hello Platform Windows Universal (UWP) untuk perangkat pendamping, diunduh dari penyimpanan aplikasi Windows.
  • Kemampuan untuk membuat dua kunci HMAC 256 bit pada perangkat pendamping Windows Hello dan menghasilkan HMAC dengannya (menggunakan SHA-256).
  • Pengaturan keamanan pada desktop Windows 10 dikonfigurasi dengan benar. Layanan Autentikasi Pendamping akan mengharuskan PIN ini disiapkan sebelum perangkat pendamping Windows Hello dapat dicolokkan ke dalamnya. Pengguna harus menyiapkan PIN melalui opsi Masuk Akun > Pengaturan>.

Selain persyaratan di atas, aplikasi perangkat pendamping Windows Hello bertanggung jawab untuk:

  • Pengalaman pengguna dan pencitraan merek pendaftaran awal dan kemudian membatalkan pendaftaran perangkat pendamping Windows Hello.
  • Berjalan di latar belakang, menemukan perangkat pendamping Windows Hello, berkomunikasi ke perangkat pendamping Windows Hello dan juga Layanan Autentikasi Pendamping.
  • Penanganan kesalahan

Biasanya, perangkat pendamping dikirim dengan aplikasi untuk penyiapan awal, seperti menyiapkan band kebugaran untuk pertama kalinya. Fungsionalitas yang dijelaskan dalam dokumen ini dapat menjadi bagian dari aplikasi tersebut dan aplikasi terpisah tidak boleh diperlukan.

Sinyal pengguna

Setiap perangkat pendamping Windows Hello harus dikombinasikan dengan aplikasi yang mendukung tiga sinyal pengguna. Sinyal ini dapat berupa tindakan atau gerakan.

  • Sinyal niat: Memungkinkan pengguna untuk menunjukkan niatnya untuk membuka kunci dengan, misalnya, menekan tombol pada perangkat pendamping Windows Hello. Sinyal niat harus dikumpulkan di sisi perangkat pendamping Windows Hello.
  • Sinyal kehadiran pengguna: Membuktikan kehadiran pengguna. Perangkat pendamping Windows Hello mungkin, misalnya, memerlukan PIN sebelum dapat digunakan untuk membuka kunci PC (tidak bingung dengan PIN PC), atau mungkin memerlukan tekan tombol.
  • Sinyal disambiguasi: Membedakan desktop Windows 10 mana yang ingin dibuka pengguna ketika beberapa opsi tersedia untuk perangkat pendamping Windows Hello.

Sejumlah sinyal pengguna ini dapat digabungkan menjadi satu. Kehadiran pengguna dan sinyal niat harus diperlukan pada setiap penggunaan.

Pendaftaran dan komunikasi di masa mendatang antara pc dan perangkat pendamping Windows Hello

Sebelum perangkat pendamping Windows Hello dapat dicolokkan ke kerangka kerja perangkat pendamping Windows Hello, perangkat perlu didaftarkan ke kerangka kerja. Pengalaman untuk pendaftaran sepenuhnya dimiliki oleh aplikasi perangkat pendamping Windows Hello.

Hubungan antara perangkat pendamping Windows Hello dan perangkat desktop Windows 10 dapat menjadi satu dengan banyak (yaitu, satu perangkat pendamping dapat digunakan untuk banyak perangkat desktop Windows 10). Namun, setiap perangkat pendamping Windows Hello hanya dapat digunakan untuk satu pengguna di setiap perangkat desktop Windows 10.

Sebelum perangkat pendamping Windows Hello dapat berkomunikasi dengan PC, mereka perlu menyetujui transportasi yang akan digunakan. Pilihan tersebut diserahkan ke aplikasi perangkat pendamping Windows Hello; kerangka kerja perangkat pendamping Windows Hello tidak memberlakukan batasan apa pun pada jenis transportasi (USB, NFC, WiFi, BT, BLE, dll) atau protokol yang digunakan antara perangkat pendamping Windows Hello dan aplikasi perangkat pendamping Windows Hello di sisi perangkat desktop Windows 10. Namun, ini menyarankan pertimbangan keamanan tertentu untuk lapisan transportasi seperti yang diuraikan di bagian "Persyaratan Keamanan" dari dokumen ini. Penyedia perangkat bertanggung jawab untuk menyediakan persyaratan tersebut. Kerangka kerja tidak menyediakannya untuk Anda.

Model Interaksi Pengguna

Penemuan aplikasi perangkat pendamping Windows Hello, penginstalan, dan pendaftaran pertama kali

Alur kerja pengguna umum adalah sebagai berikut:

  • Pengguna menyiapkan PIN pada setiap perangkat desktop Windows 10 target yang ingin dibuka kuncinya dengan perangkat pendamping Windows Hello tersebut.
  • Pengguna menjalankan aplikasi perangkat pendamping Windows Hello di perangkat desktop Windows 10 mereka untuk mendaftarkan perangkat pendamping Windows Hello-nya dengan desktop Windows 10.

Catatan:

  • Kami merekomendasikan penemuan, unduhan, dan peluncuran aplikasi perangkat pendamping Windows Hello disederhanakan dan, jika memungkinkan, otomatis (misalnya, aplikasi dapat diunduh setelah mengetuk perangkat pendamping Windows Hello di pembaca NFC di sisi perangkat desktop Windows 10). Namun, ini adalah tanggung jawab perangkat pendamping Windows Hello dan aplikasi perangkat pendamping Windows Hello.
  • Di lingkungan perusahaan, aplikasi perangkat pendamping Windows Hello dapat disebarkan melalui MDM.
  • Aplikasi perangkat pendamping Windows Hello bertanggung jawab untuk menunjukkan kepada pengguna pesan kesalahan apa pun yang terjadi sebagai bagian dari pendaftaran.

Protokol pendaftaran dan de-pendaftaran

Diagram berikut menggambarkan bagaimana perangkat pendamping Windows Hello berinteraksi dengan Companion Authentication Service selama pendaftaran.

Diagram alur pendaftaran.

Ada dua kunci yang digunakan dalam protokol kami:

  • Kunci perangkat (devicekey): digunakan untuk melindungi token pembuka kunci yang diperlukan PC untuk membuka kunci Windows.
  • Kunci autentikasi (autentikasi): digunakan untuk saling mengautentikasi perangkat pendamping Windows Hello dan Layanan Autentikasi Pendamping.

Kunci perangkat dan kunci autentikasi ditukar pada waktu pendaftaran antara aplikasi perangkat pendamping Windows Hello dan perangkat pendamping Windows Hello. Akibatnya, aplikasi perangkat pendamping Windows Hello dan perangkat pendamping Windows Hello harus menggunakan transportasi yang aman untuk melindungi kunci.

Selain itu, perhatikan bahwa meskipun diagram di atas menampilkan dua kunci HMAC yang dihasilkan pada perangkat pendamping Windows Hello, aplikasi juga dapat menghasilkannya dan mengirimkannya ke perangkat pendamping Windows Hello untuk penyimpanan.

Memulai alur autentikasi

Ada dua cara bagi pengguna untuk memulai alur masuk ke desktop Windows 10 menggunakan kerangka kerja perangkat pendamping Windows Hello (yaitu, memberikan sinyal niat):

  • Buka tutup pada laptop, atau tekan bilah spasi atau gesek ke atas di PC.
  • Lakukan gerakan atau tindakan di sisi perangkat pendamping Windows Hello.

Ini adalah pilihan perangkat pendamping Windows Hello untuk memilih mana yang merupakan titik awal. Kerangka kerja perangkat pendamping Windows Hello akan menginformasikan aplikasi perangkat pendamping ketika opsi satu terjadi. Untuk opsi dua, aplikasi perangkat pendamping Windows Hello harus meminta perangkat pendamping untuk melihat apakah peristiwa tersebut telah diambil. Ini memastikan perangkat pendamping Windows Hello mengumpulkan sinyal niat sebelum pembuka kunci berhasil.

Penyedia kredensial perangkat pendamping Windows Hello

Ada penyedia kredensial baru di Windows 10 yang menangani semua perangkat pendamping Windows Hello.

Penyedia kredensial perangkat pendamping Windows Hello bertanggung jawab untuk meluncurkan tugas latar belakang perangkat pendamping melalui mengaktifkan pemicu. Pemicu diatur pertama kali ketika PC terbangun dan layar kunci ditampilkan. Kedua kalinya adalah ketika PC memasuki UI masuk dan penyedia kredensial perangkat pendamping Windows Hello adalah petak peta yang dipilih.

Pustaka pembantu untuk aplikasi perangkat pendamping Windows Hello akan mendengarkan perubahan status layar kunci dan mengirim peristiwa yang sesuai dengan tugas latar belakang perangkat pendamping Windows Hello.

Jika ada beberapa tugas latar belakang perangkat pendamping Windows Hello, tugas latar belakang pertama yang telah menyelesaikan proses autentikasi akan membuka kunci PC. Layanan autentikasi perangkat pendamping akan mengabaikan panggilan autentikasi yang tersisa.

Pengalaman di sisi perangkat pendamping Windows Hello dimiliki dan dikelola oleh aplikasi perangkat pendamping Windows Hello. Kerangka kerja perangkat pendamping Windows Hello tidak memiliki kontrol atas bagian pengalaman pengguna ini. Lebih khusus lagi, penyedia autentikasi pendamping menginformasikan aplikasi perangkat pendamping Windows Hello (melalui aplikasi latar belakangnya) tentang perubahan status dalam UI masuk (misalnya, layar kunci baru saja turun, atau pengguna hanya menghalau layar kunci dengan memukul spacebar), dan itu adalah tanggung jawab aplikasi perangkat pendamping Windows Hello untuk membangun pengalaman di sekitar itu (misalnya, setelah pengguna menekan bilah spasi dan menghaluskan layar buka kunci, mulai mencari perangkat melalui USB).

Kerangka Kerja perangkat pendamping Windows Hello akan menyediakan stok teks (dilokalkan) dan pesan kesalahan untuk dipilih oleh aplikasi perangkat pendamping Windows Hello. Ini akan ditampilkan di atas layar kunci (atau di UI masuk). Lihat bagian Menangani Pesan dan Kesalahan untuk detail selengkapnya.

Protokol autentikasi

Setelah tugas latar belakang yang terkait dengan aplikasi perangkat pendamping Windows Hello dimulai, ia bertanggung jawab untuk meminta perangkat pendamping Windows Hello untuk memvalidasi nilai HMAC yang dihitung oleh Layanan Autentikasi Pendamping dan membantu menghitung dua nilai HMAC:

  • Validasi HMAC Layanan = HMAC(kunci autentikasi, layanan nonce || nonce perangkat || sesi nonce).
  • Hitung HMAC kunci perangkat dengan nonce.
  • Hitung HMAC kunci autentikasi dengan nilai HMAC pertama yang digabungkan dengan nonce yang dihasilkan oleh Layanan Autentikasi Pendamping.

Nilai komputasi kedua digunakan oleh layanan untuk mengautentikasi perangkat dan juga mencegah serangan pemutaran ulang di saluran transportasi.

Diagram alur pendaftaran yang diperbarui.

Manajemen siklus hidup

Daftar sekali, gunakan di mana saja

Tanpa server backend, pengguna harus mendaftarkan perangkat pendamping Windows Hello mereka dengan setiap perangkat desktop Windows 10 secara terpisah.

Vendor perangkat pendamping atau OEM dapat menerapkan layanan web untuk menjelajah status pendaftaran di seluruh desktop Atau perangkat seluler Windows 10 pengguna. Untuk detail selengkapnya, lihat bagian Roaming, Revocation, dan Filter Service.

Manajemen PIN

Sebelum perangkat pendamping dapat digunakan, PIN perlu disiapkan pada perangkat desktop Windows 10. Ini memastikan pengguna memiliki cadangan jika perangkat pendamping Windows Hello mereka tidak berfungsi. PIN adalah sesuatu yang dikelola Windows dan aplikasi tersebut tidak pernah melihat. Untuk mengubahnya, pengguna menavigasi ke opsi Masuk Akun > Pengaturan>.

Manajemen dan kebijakan

Pengguna dapat menghapus perangkat pendamping Windows Hello dari desktop Windows 10 dengan menjalankan aplikasi perangkat pendamping Windows Hello pada perangkat desktop tersebut.

Perusahaan memiliki dua opsi untuk mengontrol kerangka kerja perangkat pendamping Windows Hello:

  • Mengaktifkan atau menonaktifkan fitur
  • Tentukan daftar izin perangkat pendamping Windows Hello yang diizinkan menggunakan loker aplikasi Windows

Kerangka kerja perangkat pendamping Windows Hello tidak mendukung cara terpusat untuk menyimpan inventarisasi perangkat pendamping yang tersedia, atau metode untuk memfilter lebih lanjut instans jenis perangkat pendamping Windows Hello yang diizinkan (misalnya, hanya perangkat pendamping dengan nomor seri antara X dan Y yang diizinkan). Namun, pengembang aplikasi dapat membangun layanan untuk menyediakan fungsionalitas tersebut. Untuk detail selengkapnya, lihat bagian Roaming, Revocation, dan Filter Service.

Pencabutan

Kerangka kerja perangkat pendamping Windows Hello tidak mendukung penghapusan perangkat pendamping dari perangkat desktop Windows 10 tertentu dari jarak jauh. Sebagai gantinya, pengguna dapat menghapus perangkat pendamping Windows Hello melalui aplikasi perangkat pendamping Windows Hello yang berjalan di desktop Windows 10 tersebut.

Namun, vendor perangkat pendamping dapat membangun layanan untuk menyediakan fungsionalitas pencabutan jarak jauh. Untuk detail selengkapnya, lihat bagian Roaming, Revocation, dan Filter Service.

Layanan roaming dan filter

Vendor perangkat pendamping dapat menerapkan layanan web yang dapat digunakan untuk skenario berikut:

  • Layanan filter untuk perusahaan: Perusahaan dapat membatasi kumpulan perangkat pendamping Windows Hello yang dapat bekerja di lingkungan mereka ke beberapa pilihan dari vendor tertentu. Misalnya, perusahaan Contoso dapat memesan 10.000 perangkat pendamping Model Y dari Vendor X dan memastikan hanya perangkat tersebut yang akan berfungsi di domain Contoso (dan bukan model perangkat lain dari Vendor X).
  • Inventori: Perusahaan dapat menentukan daftar perangkat pendamping yang ada yang digunakan di lingkungan perusahaan.
  • Pencabutan real time: Jika karyawan melaporkan bahwa perangkat pendampingnya hilang atau dicuri, layanan web dapat digunakan untuk mencabut perangkat tersebut.
  • Roaming: Pengguna hanya perlu mendaftarkan perangkat pendampingnya sekali dan bekerja di semua desktop Windows 10 dan Mobile-nya.

Menerapkan fitur-fitur ini memerlukan aplikasi perangkat pendamping Windows Hello untuk memeriksa dengan layanan web pada waktu pendaftaran dan penggunaan. Aplikasi perangkat pendamping Windows Hello dapat mengoptimalkan skenario masuk cache seperti mengharuskan pemeriksaan dengan layanan web hanya sekali sehari (dengan biaya memperpanjang waktu pencabutan hingga satu hari).

Model API kerangka kerja perangkat pendamping Windows Hello

Gambaran Umum

Aplikasi perangkat pendamping Windows Hello harus berisi dua komponen: aplikasi latar depan dengan UI yang bertanggung jawab untuk mendaftarkan dan membatalkan pendaftaran perangkat, dan tugas latar belakang yang menangani autentikasi.

Alur API keseluruhan adalah sebagai berikut:

  1. Mendaftarkan perangkat pendamping Windows Hello
    • Pastikan perangkat berada di dekatnya dan mengkueri kemampuannya (jika diperlukan)
    • Hasilkan dua kunci HMAC (baik di sisi perangkat pendamping atau sisi aplikasi)
    • Memanggil RequestStartRegisteringDeviceAsync
    • Panggilan FinishRegisteringDeviceAsync
    • Pastikan aplikasi perangkat pendamping Windows Hello menyimpan kunci HMAC (jika didukung) dan aplikasi perangkat pendamping Windows Hello membuang salinannya
  2. Daftarkan tugas latar belakang Anda
  3. Tunggu peristiwa yang tepat di tugas latar belakang
    • WaitingForUserConfirmation: Tunggu peristiwa ini jika tindakan/gerakan pengguna di sisi perangkat pendamping Windows Hello diperlukan untuk memulai alur autentikasi
    • CollectingCredential: Tunggu peristiwa ini jika perangkat pendamping Windows Hello bergantung pada tindakan/gerakan pengguna di sisi PC untuk memulai alur autentikasi (misalnya, dengan menekan bilah spasi)
    • Pemicu lain, seperti kartu pintar: Pastikan untuk mengkueri status autentikasi saat ini untuk memanggil API yang tepat.
  4. Terus informasikan kepada pengguna tentang pesan kesalahan atau langkah berikutnya yang diperlukan dengan memanggil ShowNotificationMessageAsync. Hanya panggil API ini setelah sinyal niat dikumpulkan
  5. Membuka
    • Pastikan niat dan sinyal kehadiran pengguna dikumpulkan
    • Memanggil StartAuthenticationAsync
    • Berkomunikasi dengan perangkat pendamping untuk melakukan operasi HMAC yang diperlukan
    • Panggil FinishAuthenticationAsync
  6. Membatalkan pendaftaran perangkat pendamping Windows Hello saat pengguna memintanya (misalnya, jika mereka telah kehilangan perangkat pendamping mereka)
    • Menghitung perangkat pendamping Windows Hello untuk pengguna yang masuk melalui FindAllRegisteredDeviceInfoAsync
    • Batalkan pendaftaran menggunakan UnregisterDeviceAsync

Pendaftaran dan de-pendaftaran

Pendaftaran memerlukan dua panggilan API ke Layanan Autentikasi Pendamping: RequestStartRegisteringDeviceAsync dan FinishRegisteringDeviceAsync.

Sebelum salah satu panggilan ini dilakukan, aplikasi perangkat pendamping Windows Hello harus memastikan bahwa perangkat pendamping Windows Hello tersedia. Jika perangkat pendamping Windows Hello bertanggung jawab untuk menghasilkan kunci HMAC (autentikasi dan kunci perangkat), aplikasi perangkat pendamping Windows Hello juga harus meminta perangkat pendamping untuk menghasilkannya sebelum melakukan salah satu dari dua panggilan di atas. Jika aplikasi perangkat pendamping Windows Hello bertanggung jawab untuk menghasilkan kunci HMAC, maka aplikasi tersebut harus melakukannya sebelum memanggil dua panggilan di atas.

Selain itu, sebagai bagian dari panggilan API pertama (RequestStartRegisteringDeviceAsync), aplikasi perangkat pendamping Windows Hello harus memutuskan kemampuan perangkat dan bersiap untuk meneruskannya sebagai bagian dari panggilan API; misalnya, apakah perangkat pendamping Windows Hello mendukung penyimpanan aman untuk kunci HMAC. Jika aplikasi perangkat pendamping Windows Hello yang sama digunakan untuk mengelola beberapa versi perangkat pendamping yang sama dan kemampuan tersebut berubah (dan memerlukan kueri perangkat untuk memutuskan), kami sarankan kueri ini terjadi sebelum panggilan API pertama dilakukan.

API pertama (RequestStartRegisteringDeviceAsync) akan mengembalikan handel yang digunakan oleh API kedua (FinishRegisteringDeviceAsync). Panggilan pertama untuk pendaftaran akan meluncurkan perintah PIN untuk memastikan pengguna ada. Jika tidak ada PIN yang disiapkan, panggilan ini akan gagal. Aplikasi perangkat pendamping Windows Hello dapat meminta apakah PIN disiapkan atau tidak melalui panggilan KeyCredentialManager.IsSupportedAsync juga. Panggilan RequestStartRegisteringDeviceAsync juga dapat gagal jika kebijakan telah menonaktifkan penggunaan perangkat pendamping Windows Hello.

Hasil panggilan pertama dikembalikan melalui enum SecondaryAuthenticationFactorRegistrationStatus:

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

Panggilan kedua (FinishRegisteringDeviceAsync) menyelesaikan pendaftaran. Sebagai bagian dari proses pendaftaran, aplikasi perangkat pendamping Windows Hello dapat menyimpan data konfigurasi perangkat pendamping dengan Companion Authentication Service. Ada batas ukuran 4K untuk data ini. Data ini akan tersedia untuk aplikasi perangkat pendamping Windows Hello pada waktu autentikasi. Data ini dapat digunakan, sebagai contoh, untuk terhubung ke perangkat pendamping Windows Hello seperti alamat MAC, atau jika perangkat pendamping Windows Hello tidak memiliki penyimpanan dan perangkat pendamping yang ingin menggunakan PC untuk penyimpanan, maka data konfigurasi dapat digunakan. Perhatikan bahwa setiap data sensitif yang disimpan sebagai bagian dari data konfigurasi harus dienkripsi dengan kunci yang hanya diketahui perangkat pendamping Windows Hello. Selain itu, mengingat bahwa data konfigurasi disimpan oleh layanan Windows, data tersebut tersedia untuk aplikasi perangkat pendamping Windows Hello di seluruh profil pengguna.

Aplikasi perangkat pendamping Windows Hello dapat memanggil AbortRegisteringDeviceAsync untuk membatalkan pendaftaran dan meneruskan kode kesalahan. Layanan Autentikasi Pendamping akan mencatat kesalahan dalam data telemetri. Contoh yang baik untuk panggilan ini adalah ketika terjadi kesalahan dengan perangkat pendamping Windows Hello dan tidak dapat menyelesaikan pendaftaran (misalnya, tidak dapat menyimpan kunci HMAC atau koneksi BT hilang).

Aplikasi perangkat pendamping Windows Hello harus menyediakan opsi bagi pengguna untuk membatalkan pendaftaran perangkat pendamping Windows Hello mereka dari desktop Windows 10 mereka (misalnya, jika mereka kehilangan perangkat pendamping mereka atau membeli versi yang lebih baru). Saat pengguna memilih opsi tersebut, aplikasi perangkat pendamping Windows Hello harus memanggil UnregisterDeviceAsync. Panggilan oleh aplikasi perangkat pendamping Windows Hello ini akan memicu layanan autentikasi perangkat pendamping untuk menghapus semua data (termasuk kunci HMAC) yang sesuai dengan Id perangkat tertentu dan AppId aplikasi pemanggil dari sisi PC. Panggilan API ini tidak mencoba menghapus kunci HMAC dari aplikasi perangkat pendamping Windows Hello atau sisi perangkat pendamping. Yang tersisa untuk diterapkan aplikasi perangkat pendamping Windows Hello.

Aplikasi perangkat pendamping Windows Hello bertanggung jawab untuk menunjukkan pesan kesalahan apa pun yang terjadi dalam fase pendaftaran dan de-pendaftaran.

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

Autentikasi

Autentikasi memerlukan dua panggilan API ke Layanan Autentikasi Pendamping: StartAuthenticationAsync dan FinishAuthencationAsync.

API inisiasi pertama akan mengembalikan handel yang digunakan oleh API kedua. Panggilan pertama kembali, antara lain, nonce yang - setelah digabungkan dengan hal-hal lain - perlu di-HMAC dengan kunci perangkat yang disimpan di perangkat pendamping Windows Hello. Panggilan kedua mengembalikan hasil HMAC dengan kunci perangkat dan berpotensi berakhir dengan autentikasi yang berhasil (yaitu, pengguna akan melihat desktop mereka).

API inisiasi pertama (StartAuthenticationAsync) dapat gagal jika kebijakan telah menonaktifkan perangkat pendamping Windows Hello setelah pendaftaran awal. Ini juga dapat gagal jika panggilan API dilakukan di luar status WaitingForUserConfirmation atau CollectingCredential (lebih lanjut tentang ini nanti di bagian ini). Ini juga dapat gagal jika aplikasi perangkat pendamping yang tidak terdaftar memanggilnya. SecondaryAuthenticationFactorAuthenticationStatus Enum meringkas kemungkinan hasil:

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

Panggilan API kedua (FinishAuthencationAsync) dapat gagal jika nonce yang disediakan dalam panggilan pertama kedaluwarsa (20 detik). Enum SecondaryAuthenticationFactorFinishAuthenticationStatus menangkap kemungkinan hasil.

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

Waktu dua panggilan API (StartAuthenticationAsync dan FinishAuthencationAsync) perlu selaras dengan bagaimana perangkat pendamping Windows Hello mengumpulkan niat, kehadiran pengguna, dan sinyal disambiguasi (lihat Sinyal Pengguna untuk detail selengkapnya). Misalnya, panggilan kedua tidak boleh dikirimkan hingga sinyal niat tersedia. Dengan kata lain, PC tidak boleh membuka kunci jika pengguna belum menyatakan niat untuk itu. Untuk membuat ini lebih jelas, asumsikan bahwa kedekatan Bluetooth digunakan untuk membuka kunci PC, maka sinyal niat eksplisit harus dikumpulkan, jika tidak, segera setelah pengguna berjalan dengan PC-nya dalam perjalanan ke dapur, PC akan membuka kunci. Selain itu, nonce yang dikembalikan dari panggilan pertama adalah batas waktu (20 detik) dan akan kedaluwarsa setelah periode tertentu. Akibatnya, panggilan pertama hanya harus dilakukan ketika aplikasi perangkat pendamping Windows Hello memiliki indikasi kehadiran perangkat pendamping yang baik, misalnya, perangkat pendamping dimasukkan ke port USB, atau diketuk pada pembaca NFC. Dengan Bluetooth, perawatan harus dilakukan untuk menghindari pengaruh pada baterai di sisi PC atau mempengaruhi aktivitas Bluetooth lainnya yang terjadi pada saat itu ketika memeriksa kehadiran perangkat pendamping Windows Hello. Selain itu, jika sinyal kehadiran pengguna perlu disediakan (misalnya, dengan mengetik di PIN), disarankan bahwa panggilan autentikasi pertama hanya dilakukan setelah sinyal tersebut dikumpulkan.

Kerangka kerja perangkat pendamping Windows Hello membantu aplikasi perangkat pendamping Windows Hello untuk membuat keputusan berdasarkan informasi tentang kapan harus melakukan dua panggilan di atas dengan memberikan gambaran lengkap di mana pengguna berada dalam alur autentikasi. Kerangka kerja perangkat pendamping Windows Hello menyediakan fungsionalitas ini dengan menyediakan pemberitahuan perubahan status kunci ke tugas latar belakang aplikasi.

alur perangkat pendamping

Detail dari masing-masing status ini adalah sebagai berikut:

Provinsi Deskripsi
WaitingForUserConfirmation Peristiwa pemberitahuan perubahan status ini diaktifkan ketika layar kunci turun (misalnya, pengguna menekan Windows + L). Sebaiknya jangan meminta pesan kesalahan apa pun yang berkaitan dengan kesulitan menemukan perangkat dalam status ini. Secara umum, kami sarankan untuk hanya menampilkan pesan saat sinyal niat tersedia. Aplikasi perangkat pendamping Windows Hello harus melakukan panggilan API pertama untuk autentikasi dalam status ini jika perangkat pendamping mengumpulkan sinyal niat (misalnya, mengetuk pembaca NFC, menekan tombol pada perangkat pendamping atau gerakan tertentu, seperti bertepuk tangan), dan tugas latar belakang aplikasi perangkat pendamping Windows Hello menerima indikasi dari perangkat pendamping bahwa sinyal niat terdeteksi. Jika tidak, jika aplikasi perangkat pendamping Windows Hello bergantung pada PC untuk memulai alur autentikasi (dengan meminta pengguna menggesek layar buka kunci atau menekan bilah ruang), aplikasi perangkat pendamping Windows Hello perlu menunggu status berikutnya (CollectingCredential).
CollectingCredential Peristiwa pemberitahuan perubahan status ini diaktifkan ketika pengguna membuka tutup laptop mereka, menekan tombol apa pun di keyboard mereka, atau menggesek ke layar buka kunci. Jika perangkat pendamping Windows Hello bergantung pada tindakan di atas untuk mulai mengumpulkan sinyal niat, maka aplikasi perangkat pendamping Windows Hello harus mulai mengumpulkannya (misalnya, melalui pop up pada perangkat pendamping yang menanyakan apakah pengguna ingin membuka kunci PC). Ini akan menjadi waktu yang tepat untuk memberikan kasus kesalahan jika aplikasi perangkat pendamping Windows Hello membutuhkan pengguna untuk memberikan sinyal kehadiran pengguna pada perangkat pendamping (seperti mengetik PIN pada perangkat pendamping Windows Hello).
SuspendingAuthentication Ketika aplikasi perangkat pendamping Windows Hello menerima status ini, itu berarti bahwa Layanan Autentikasi Pendamping telah berhenti menerima permintaan autentikasi.
CredentialCollected Ini berarti bahwa aplikasi perangkat pendamping Windows Hello lain telah memanggil API kedua dan bahwa Layanan Autentikasi Pendamping memverifikasi apa yang dikirimkan. Pada titik ini, Layanan Autentikasi Pendamping tidak menerima permintaan autentikasi lainnya kecuali yang saat ini dikirimkan tidak lulus verifikasi. Aplikasi perangkat pendamping Windows Hello harus tetap disetel hingga status berikutnya tercapai.
CredentialAuthenticated Ini berarti bahwa kredensial yang dikirimkan berfungsi. CredentialAuthenticated memiliki ID perangkat perangkat pendamping Windows Hello yang berhasil. Aplikasi perangkat pendamping Windows Hello harus memastikan untuk memeriksanya untuk melihat apakah perangkat terkait adalah pemenangnya. Jika tidak, aplikasi perangkat pendamping Windows Hello harus menghindari menampilkan alur autentikasi pasca apa pun (seperti pesan keberhasilan pada perangkat pendamping atau mungkin getaran pada perangkat tersebut). Perhatikan bahwa jika kredensial yang dikirimkan tidak berfungsi, status akan berubah menjadi status CollectingCredential.
StoppingAuthentication Autentikasi berhasil dan pengguna melihat desktop. Waktunya membunuh tugas latar belakangmu. Sebelum keluar dari tugas latar belakang, batalkan pendaftaran handler StageEvent secara eksplisit. Ini akan membantu tugas latar belakang keluar dengan cepat.

Aplikasi perangkat pendamping Windows Hello hanya boleh memanggil dua API autentikasi di dua status pertama. Aplikasi perangkat pendamping Windows Hello harus memeriksa skenario apa yang sedang dipicu oleh peristiwa ini. Ada dua kemungkinan: membuka kunci atau memposting buka kunci. Saat ini, hanya buka kunci yang didukung. Dalam rilis mendatang, skenario pasca membuka kunci mungkin didukung. Enum SecondaryAuthenticationFactorAuthenticationScenario menangkap dua opsi ini:

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

Sampel kode lengkap:

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

Mendaftarkan tugas latar belakang

Ketika aplikasi perangkat pendamping Windows Hello mendaftarkan perangkat pendamping pertama, aplikasi tersebut juga harus mendaftarkan komponen tugas latar belakangnya yang akan meneruskan informasi autentikasi antara perangkat dan layanan autentikasi perangkat pendamping.

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

Kesalahan dan pesan

Kerangka kerja perangkat pendamping Windows Hello bertanggung jawab untuk memberikan umpan balik kepada pengguna tentang keberhasilan atau kegagalan masuk. Kerangka kerja perangkat pendamping Windows Hello akan menyediakan stok teks (dilokalkan) dan pesan kesalahan untuk dipilih oleh aplikasi perangkat pendamping Windows Hello. Ini akan ditampilkan di UI masuk.

kesalahan perangkat pendamping

Aplikasi perangkat pendamping Windows Hello dapat menggunakan ShowNotificationMessageAsync untuk menampilkan pesan kepada pengguna sebagai bagian dari UI masuk. Panggil API ini saat sinyal niat tersedia. Perhatikan bahwa sinyal niat harus selalu dikumpulkan di sisi perangkat pendamping Windows Hello.

Ada dua jenis pesan: panduan dan kesalahan.

Pesan panduan dirancang untuk menunjukkan kepada pengguna cara memulai proses buka kunci. Pesan-pesan ini hanya ditampilkan kepada pengguna sekali di layar kunci, setelah pendaftaran perangkat pertama, dan tidak pernah ditampilkan di sana lagi. Pesan ini akan terus ditampilkan di bawah layar kunci.

Pesan kesalahan selalu ditampilkan dan akan ditampilkan setelah sinyal niat disediakan. Mengingat bahwa sinyal niat harus dikumpulkan sebelum menampilkan pesan kepada pengguna, dan pengguna akan memberikan niat itu hanya menggunakan salah satu perangkat pendamping Windows Hello, tidak boleh ada situasi di mana beberapa perangkat pendamping Windows Hello berlomba untuk menampilkan pesan kesalahan. Akibatnya, kerangka kerja perangkat pendamping Windows Hello tidak mempertahankan antrean apa pun. Saat penelepon meminta pesan kesalahan, pemanggil akan ditampilkan selama 5 detik dan semua permintaan lainnya untuk menampilkan pesan kesalahan dalam 5 detik tersebut dihilangkan. Setelah 5 detik berlalu, maka kesempatan muncul bagi pemanggil lain untuk menampilkan pesan kesalahan. Kami melarang penelepon untuk mengalihkan saluran kesalahan.

Panduan dan pesan kesalahan adalah sebagai berikut. Nama perangkat adalah parameter yang diteruskan oleh aplikasi perangkat pendamping sebagai bagian dari ShowNotificationMessageAsync.

Panduan

  • "Gesek ke atas atau tekan bilah spasi untuk masuk dengan nama perangkat."
  • "Menyiapkan perangkat pendamping Anda. Silakan tunggu atau gunakan opsi masuk lain."
  • "Ketuk nama perangkat ke pembaca NFC untuk masuk."
  • "Mencari nama perangkat ..."
  • "Colokkan nama perangkat ke port USB untuk masuk."

Kesalahan

  • "Lihat nama perangkat untuk instruksi masuk."
  • "Aktifkan Bluetooth untuk menggunakan nama perangkat untuk masuk."
  • "Aktifkan NFC untuk menggunakan nama perangkat untuk masuk."
  • "Sambungkan ke jaringan Wi-Fi untuk menggunakan nama perangkat untuk masuk."
  • "Ketuk nama perangkat lagi."
  • "Perusahaan Anda mencegah masuk dengan nama perangkat. Gunakan opsi masuk lain."
  • "Ketuk nama perangkat untuk masuk."
  • "Letakkan jari Anda pada nama perangkat untuk masuk."
  • "Gesek jari Anda pada nama perangkat untuk masuk."
  • "Tidak dapat masuk dengan nama perangkat. Gunakan opsi masuk lain."
  • "Terjadi kesalahan. Gunakan opsi masuk lain, lalu siapkan nama perangkat lagi."
  • "Coba lagi."
  • "Ucapkan Frase Sandi Lisan Anda ke dalam nama perangkat."
  • "Siap untuk masuk dengan nama perangkat."
  • "Gunakan opsi masuk lain terlebih dahulu, lalu Anda dapat menggunakan nama perangkat untuk masuk."

Menghitung perangkat terdaftar

Aplikasi perangkat pendamping Windows Hello dapat menghitung daftar perangkat pendamping terdaftar melalui panggilan FindAllRegisteredDeviceInfoAsync. API ini mendukung dua jenis kueri yang ditentukan melalui enum SecondaryAuthenticationFactorDeviceFindScope:

{
	User = 0,
	AllUsers,
}

Cakupan pertama mengembalikan daftar perangkat untuk pengguna yang masuk. Yang kedua mengembalikan daftar untuk semua pengguna di PC tersebut. Cakupan pertama harus digunakan pada waktu un-registration untuk menghindari tidak mendaftarkan perangkat pendamping Windows Hello pengguna lain. Yang kedua harus digunakan pada waktu autentikasi atau pendaftaran: pada waktu pendaftaran, enumerasi ini dapat membantu aplikasi menghindari mencoba mendaftarkan perangkat pendamping Windows Hello yang sama dua kali.

Perhatikan bahwa bahkan jika aplikasi tidak melakukan pemeriksaan ini, PC melakukan dan akan menolak perangkat pendamping Windows Hello yang sama agar tidak didaftarkan lebih dari sekali. Pada waktu autentikasi, menggunakan cakupan AllUsers membantu aplikasi perangkat pendamping Windows Hello mengalihkan alur pengguna: masuk pengguna A ketika pengguna B masuk (ini mengharuskan kedua pengguna telah menginstal aplikasi perangkat pendamping Windows Hello dan pengguna A telah mendaftarkan perangkat pendamping mereka dengan PC dan PC duduk di layar kunci (atau layar masuk)).

Persyaratan keamanan

Layanan Autentikasi Pendamping memberikan perlindungan keamanan berikut.

  • Malware pada perangkat desktop Windows 10 yang berjalan sebagai pengguna menengah atau kontainer aplikasi tidak dapat menggunakan perangkat pendamping Windows Hello untuk mengakses kunci kredensial pengguna (disimpan sebagai bagian dari Windows Hello) pada PC secara diam-diam.
  • Pengguna berbahaya pada perangkat desktop Windows 10 tidak dapat menggunakan perangkat pendamping Windows Hello milik pengguna lain di perangkat desktop Windows 10 tersebut untuk mendapatkan akses senyap ke kunci kredensial penggunanya (pada perangkat desktop Windows 10 yang sama).
  • Malware pada perangkat pendamping Windows Hello tidak dapat secara diam-diam mendapatkan akses ke kunci kredensial pengguna pada perangkat desktop Windows 10, termasuk memanfaatkan fungsionalitas atau kode yang dikembangkan khusus untuk kerangka kerja perangkat pendamping Windows Hello.
  • Pengguna berbahaya tidak dapat membuka kunci perangkat desktop Windows 10 dengan menangkap lalu lintas antara perangkat pendamping Windows Hello dan perangkat desktop Windows 10 dan memutarnya kembali nanti. Penggunaan nonce, authkey, dan HMAC dalam protokol kami menjamin perlindungan terhadap serangan pemutaran ulang.
  • Malware atau pengguna berbahaya pada PC rouge tidak dapat menggunakan perangkat pendamping Windows Hello untuk mendapatkan akses ke PC pengguna yang jujur. Hal ini dicapai melalui autentikasi bersama antara Layanan Autentikasi Pendamping dan perangkat pendamping Windows Hello melalui penggunaan autentikasi dan HMAC dalam protokol kami.

Kunci untuk mencapai perlindungan keamanan yang disebutkan di atas adalah melindungi kunci HMAC dari akses yang tidak sah dan juga memverifikasi kehadiran pengguna. Lebih khusus lagi, ia harus memenuhi persyaratan ini:

  • Memberikan perlindungan terhadap kloning perangkat pendamping Windows Hello
  • Memberikan perlindungan terhadap menguping saat mengirim kunci HMAC pada waktu pendaftaran ke PC
  • Pastikan sinyal kehadiran pengguna tersedia