Windows HelloWindows Hello

Este artigo descreve a nova tecnologia do Windows Hello que é fornecida como parte do sistema operacional Windows 10 e discute como os desenvolvedores podem implementar essa tecnologia para proteger seus aplicativos de Plataforma Universal do Windows (UWP) e serviços de back-end.This article describes the new Windows Hello technology that ships as part of the Windows 10 operating system and discusses how developers can implement this technology to protect their Universal Windows Platform (UWP) apps and backend services. Ele destaca os recursos específicos dessas tecnologias que ajudam a mitigar os riscos decorrentes das credenciais convencionais e orienta sobre como projetar e implantar essas tecnologias como parte de sua distribuição do Windows 10.It highlights specific capabilities of these technologies that help mitigate threats that arise from using conventional credentials and provides guidance about designing and deploying these technologies as part of a Windows 10 rollout.

Observe que este artigo se concentra no desenvolvimento de apps.Note that this article focuses on app development. Para obter informações sobre os detalhes da arquitetura e da implementação do Windows Hello, consulte o Guia do Windows Hello no TechNet.For information on the architecture and implementation details of Windows Hello, see the Windows Hello Guide on TechNet.

Para obter um exemplo de código completo, consulte Exemplo de código do Windows Hello no GitHub.For a complete code sample, see the Windows Hello code sample on GitHub.

Para obter um tutorial passo a passo sobre como criar um app UWP usando o Windows Hello e o serviço de autenticação de backup, consulte os artigos Aplicativo de logon do Windows Hello e Serviço de logon do Windows Hello.For a step-by-step walkthrough on creating a UWP app using Windows Hello and the backing authentication service, see the Windows Hello login app and Windows Hello login service articles.

1 Introdução1 Introduction

Uma pressuposição fundamental sobre a segurança das informações é que um sistema pode identificar quem o está usando.A fundamental assumption about information security is that a system can identify who is using it. Identificar um usuário permite que o sistema decida se o usuário está identificado corretamente (um processo conhecido como autenticação) e, em seguida, determine o que um usuário devidamente autenticado deve ser capaz de fazer (autorização).Identifying a user allows the system to decide whether the user is identified appropriately (a process known as authentication), and then decide what a properly authenticated user should be able to do (authorization). A esmagadora maioria dos sistemas de computador implantados em todo o mundo depende de credenciais de usuário para tomar decisões sobre autenticação e autorização, o que significa que esses sistemas dependem de senhas reutilizáveis criadas pelo usuário como base da segurança.The overwhelming majority of computer systems deployed throughout the world depend on user credentials for making authentication and authorization decisions, which means that these systems depend on reusable, user-created passwords as the basis for their security. A máxima bastante citada de que a autenticação pode envolver "algo que você conhece, algo que você tem ou algo que você é" destaca o problema com precisão: uma senha reutilizável é um fator de autenticação por si, logo, quem sabe a senha pode representar o usuário que a possui.The oft-cited maxim that authentication can involve "something you know, something you have, or something you are" neatly highlights the issue: a reusable password is an authentication factor all by itself, so anyone who knows the password can impersonate the user who owns it.

1.1 Problemas com as credenciais tradicionais1.1 Problems with traditional credentials

Desde meados dos anos 1960, quando Fernando Corbató e sua equipe do Massachusetts Institute of Technology defenderam a introdução da senha, os usuários e administradores precisam lidar com o uso de senhas para a autenticação e autorização de usuários.Ever since the mid-1960s, when Fernando Corbató and his team at the Massachusetts Institute of Technology championed the introduction of the password, users and administrators have had to deal with the use of passwords for user authentication and authorization. Com o tempo, as melhores opções para armazenamento e uso de senhas progrediram um pouco (com hash seguro e salting, por exemplo), mas ainda há dois problemas.Over time, the state of the art for password storage and use has advanced somewhat (with secure hashing and salting, for example), but we are still faced with two problems. As senhas são fáceis de clonar e fáceis de roubar.Passwords are easy to clone and they are easy to steal. Além disso, falhas de implementação podem torná-las inseguras, e os usuários têm dificuldades para equilibrar conveniência e segurança.In addition, implementation faults may render them insecure, and users have a hard time balancing convenience and security.

1.1.1 Roubo de credenciais1.1.1 Credential theft

O maior risco das senhas é simples: um invasor pode roubá-las facilmente.The biggest risk of passwords is simple: an attacker can steal them easily. Todos os locais em que uma senha é inserida, processada ou armazenada são vulneráveis.Every place a password is entered, processed, or stored is vulnerable. Por exemplo, um invasor pode roubar uma coleção de senhas ou hashes de um servidor de autenticação espiando o tráfego de rede para um servidor de aplicativos, implantando malware em um aplicativo ou em um dispositivo, registrando em log pressionamentos de teclas do usuário em um dispositivo ou observando quais caracteres um usuário digita.For example, an attacker can steal a collection of passwords or hashes from an authentication server by eavesdropping on network traffic to an application server, by implanting malware in an application or on a device, by logging user keystrokes on a device, or by watching to see which characters a user types. Esses são apenas os métodos de ataque mais comuns.These are just the most common attack methods.

Outro risco relacionado é o de repetição da credencial, em que um invasor captura uma credencial válida espiando uma rede insegura e a reproduz posteriormente para representar um usuário válido.Another related risk is that of credential replay, in which an attacker captures a valid credential by eavesdropping on an insecure network, and then replays it later to impersonate a valid user. A maioria dos protocolos de autenticação (inclusive Kerberos e OAuth) protege contra ataques de reprodução incluindo um carimbo de data/hora no processo de troca de credenciais, mas essa tática só protege o token que o sistema de autenticação emitiu, e não a senha que o usuário fornece para receber o tíquete inicialmente.Most authentication protocols (including Kerberos and OAuth) protect against replay attacks by including a time stamp in the credential exchange process, but that tactic only protects the token that the authentication system issues, not the password that the user provides to get the ticket in the first place.

1.1.2 Reutilização de credenciais1.1.2 Credential reuse

A abordagem comum para o uso de um endereço de email como nome de usuário piora um problema ruim.The common approach of using an email address as the username makes a bad problem worse. Um invasor que recupera com êxito o par nome de usuário/senha de um sistema comprometido pode acabar tentando usar esse mesmo par em outros sistemas.An attacker who successfully recovers a username–password pair from a compromised system can then try that same pair on other systems. Essa tática funciona surpreendentemente com frequência para permitir que invasores passem de um sistema comprometido para outros sistemas.This tactic works surprisingly often to allow attackers to springboard from a compromised system into other systems. O uso de endereços de email como nomes de usuário leva a mais problemas, os quais exploraremos posteriormente neste guia.The use of email addresses as usernames leads to additional problems that we will explore later in this guide.

1.2 Solucionando problemas com credenciais1.2 Solving credential problems

Resolver os problemas que as senhas trazem é complicado.Solving the problems that passwords pose is tricky. Apenas apertar políticas de senha não será suficiente: os usuários podem simplesmente reciclar, compartilhar ou anotar as senhas.Tightening password policies alone will not do it; users may just recycle, share, or write down passwords. Embora a educação do usuário seja crítica para a segurança da autenticação, ela sozinha não elimina o problema.Although user education is critical for authentication security, education alone does not eliminate the problem either.

O Windows Hello substitui senhas com forte autenticação por dois fatores (2FA) ao verificar credenciais existentes e criar uma credencial específica para o dispositivo, protegida por PIN ou liberação biométrica.Windows Hello replaces passwords with strong two-factor authentication (2FA) by verifying existing credentials and by creating a device-specific credential that a biometric or PIN-based user gesture protects.

2 O que é o Windows Hello?2 What is Windows Hello?

Windows Hello é o nome que Microsoft deu ao novo sistema biométrico de entrada inserido no Windows 10.Windows Hello is the name Microsoft has given to the new biometric sign-in system built into Windows 10. Como foi integrado diretamente no sistema operacional, o Windows Hello permite a identificação de face ou impressão digital para desbloquear os dispositivos dos usuários.Because it is built directly into the operating system, Windows Hello allows face or fingerprint identification to unlock users’ devices. A autenticação acontece quando o usuário fornece seu identificador biométrico exclusivo para acessar as credenciais específicas do dispositivo. Dessa maneira, alguém que roubar o dispositivo não conseguirá fazer logon, a menos que tenha o PIN.Authentication happens when the user supplies his or her unique biometric identifier to access the device-specific credentials, which means that an attacker who steals the device can’t log on to it unless that attacker has the PIN. O repositório seguro de credenciais do Windows protege os dados biométricos no dispositivo.The Windows secure credential store protects biometric data on the device. Ao usar o Windows Hello para desbloquear um dispositivo, o usuário autorizado tem acesso à experiência do Windows e a todos os aplicativos, dados, sites e serviços.By using Windows Hello to unlock a device, the authorized user gains access to all of his or her Windows experience, apps, data, websites, and services.

O autenticador Windows Hello é conhecido como Hello.The Windows Hello authenticator is known as a Hello. O Hello é exclusivo para a combinação de um dispositivo separado e um usuário específico.A Hello is unique to the combination of an individual device and a specific user. Ele não usa perfil móvel entre dispositivos, não é compartilhado com um servidor ou aplicativo de chamada e não pode ser facilmente extraído de um dispositivo.It does not roam across devices, is not shared with a server or calling app, and cannot easily be extracted from a device. Se vários usuários compartilharem um dispositivo, cada um deles precisará configurar a própria conta.If multiple users share a device, each user needs to set up his or her own account. Cada conta recebe um Hello exclusivo para esse dispositivo.Every account gets a unique Hello for that device. Você pode pensar em um Hello como um token que pode usar para desbloquear (ou liberar) uma credencial armazenada.You can think of a Hello as a token you can use to unlock (or release) a stored credential. O Hello em si não autentica você para um app ou serviço, mas libera credenciais que podem fazer isso.The Hello itself does not authenticate you to an app or service, but it releases credentials that can. Em outras palavras, o Hello não é uma credencial de usuário, e sim um segundo fator do processo de autenticação.In other words, the Hello is not a user credential but it is a second factor for the authenticating process.

2.1 Autenticação do Windows Hello2.1 Windows Hello authentication

O Windows Hello oferece uma maneira robusta para um dispositivo reconhecer um usuário individual, o que resolve a primeira parte do caminho entre um usuário e um serviço solicitado ou item de dados.Windows Hello provides a robust way for a device to recognize an individual user, which addresses the first part of the path between a user and a requested service or data item. Porém, depois que o dispositivo tiver reconhecido o usuário, ele ainda precisará autenticá-lo para determinar se deve conceder acesso a um recurso solicitado.After the device has recognized the user, it still must authenticate the user before determining whether to grant access to a requested resource. O Windows Hello oferece 2FA forte, que está totalmente integrada ao Windows e substitui senhas reutilizáveis por uma combinação de um dispositivo específico e um gesto biométrico ou um PIN.Windows Hello provides strong 2FA that is fully integrated into Windows and replaces reusable passwords with the combination of a specific device, and a biometric gesture or PIN.

No entanto, o Windows Hello não é apenas uma renovação dos sistemas de 2FA tradicionais.Windows Hello is not just a replacement for traditional 2FA systems, though. Conceitualmente, ele é semelhante a cartões inteligentes: a autenticação é realizada usando-se primitivos criptográficos em vez de comparações de cadeias de caracteres, e o material da chave do usuário permanece seguro em um hardware à prova de adulterações.It is conceptually similar to smart cards: authentication is performed by using cryptographic primitives instead of string comparisons, and the user’s key material is secure inside tamper-resistant hardware. O Windows Hello não exige componentes de infraestrutura extras necessários para a implantação do cartão inteligente.Windows Hello does not require the extra infrastructure components required for smart card deployment, either. Em particular, você não precisa de uma PKI (Infraestrutura de Chave Pública), caso não tenha uma no momento.In particular, you do not need a Public Key Infrastructure (PKI) to manage certificates, if you do not currently have one. O Windows Hello combina as principais vantagens da tecnologia de cartão inteligente (a flexibilidade de implantação para cartões inteligentes virtuais e a segurança robusta para cartões inteligentes físicos) sem qualquer uma das suas desvantagens.Windows Hello combines the major advantages of smart cards—deployment flexibility for virtual smart cards and robust security for physical smart cards—without any of their drawbacks.

2.2 Como funciona o Windows Hello2.2 How Windows Hello works

Quando o usuário configura o Windows Hello na máquina, é gerado um novo par de chaves pública/privada no dispositivo.When the user sets up Windows Hello on his or her machine, it generates a new public–private key pair on the device. O Trusted Platform Module (TPM) gera e protege essa chave privada.The trusted platform module (TPM) generates and protects this private key. Se o dispositivo não tiver um chip TPM, a chave privada será criptografada e protegida por software.If the device does not have a TPM chip, the private key is encrypted and protected by software. Além disso, os dispositivos habilitados para TPM geram um bloco de dados que pode ser usado para atestar que uma chave está associada ao TPM.In addition TPM-enabled devices generate a block of data that can be used to attest that a key is bound to TPM. Essas informações de atestado podem ser usadas na solução para decidir se o usuário recebeu um nível de autorização diferente, por exemplo.This attestation information can be used in your solution to decide if the user is granted a different authorization level for example.

Para habilitar o Windows Hello em um dispositivo, o usuário deve ter sua conta do Azure Active Directory ou da Microsoft conectada nas configurações do Windows.To enable Windows Hello on a device, the user must have either their Azure Active Directory account or Microsoft Account connected in Windows settings.

2.2.1 Como as chaves são protegidas2.2.1 How keys are protected

Sempre que o material de chave é gerado, ele deve ser protegido contra ataques.Any time key material is generated, it must be protected against attack. A maneira mais robusta de fazer isso é por meio de hardware especializado.The most robust way to do this is through specialized hardware. Há um longo histórico de uso de módulos de segurança de hardware (HSMs) para gerar, armazenar e processar chaves para aplicativos críticos de segurança.There is a long history of using hardware security modules (HSMs) to generate, store, and process keys for security-critical applications. Os cartões inteligentes são um tipo especial de HSM, da mesma forma que os dispositivos compatíveis com o padrão TPM do Trusted Computing Group.Smart cards are a special type of HSM, as are devices that are compliant with the Trusted Computing Group TPM standard. Sempre que possível, a implementação do Windows Hello aproveita o hardware do TPM onboard para gerar, armazenar e processar chaves.Wherever possible, the Windows Hello implementation takes advantage of onboard TPM hardware to generate, store, and process keys. No entanto, o Windows Hello e o Windows Hello for Work não exigem TPM onboard.However, Windows Hello and Windows Hello for Work do not require an onboard TPM.

Sempre que possível, a Microsoft recomenda o uso de hardware do TPM.Whenever feasible, Microsoft recommends the use of TPM hardware. O TPM oferece proteção contra diversos ataques conhecidos e possíveis, incluindo ataques de força bruta ao PIN.The TPM protects against a variety of known and potential attacks, including PIN brute-force attacks. O TPM também fornece uma camada adicional de proteção após o bloqueio de uma conta.The TPM provides an additional layer of protection after an account lockout as well. Quando o TPM tiver bloqueado o material da chave, o usuário precisará redefinir o PIN.When the TPM has locked the key material, the user must reset the PIN. A redefinição do PIN significa que todas as chaves e certificados criptografados com o material de chave antigo serão removidos.Resetting the PIN means that all keys and certificates encrypted with the old key material will be removed.

2.2.2 Autenticação2.2.2 Authentication

Quando um usuário deseja acessar o material da chave protegido, o processo de autenticação começa com o usuário inserindo um PIN ou um gesto biométrico para desbloquear o dispositivo, um processo às vezes chamado de "liberação da chave".When a user wants to access protected key material, the authentication process begins with the user entering a PIN or biometric gesture to unlock the device, a process sometimes called "releasing the key".

Um aplicativo jamais pode usar as chaves de outro aplicativo, e ninguém nunca pode usar as chaves de outro usuário.An application can never use the keys from another application, nor can someone ever use the keys from another user. Essas chaves são usadas para assinar solicitações enviadas para o provedor de identidade ou o IDP, em busca do acesso a recursos especificados.These keys are used to sign requests that are sent to the identity provider or IDP, seeking access to specified resources. Os aplicativos podem usar APIs específicas para solicitar operações que exijam material da chave para determinadas ações.Applications can use specific APIs to request operations that require key material for particular actions. O acesso por meio dessas APIs não requer uma validação explícita por meio de um gesto do usuário, e o material da chave não é exposto ao app solicitante.Access through these APIs does require explicit validation through a user gesture, and the key material is not exposed to the requesting application. Em vez disso, o app solicita uma ação específica, como assinar uma parte de dados, e a camada do Windows Hello lida com o trabalho real e retorna os resultados.Rather, the application asks for a specific action like signing a piece of data, and the Windows Hello layer handles the actual work and returns the results.

2.3 Preparar para implementar o Windows Hello2.3 Getting ready to implement Windows Hello

Agora que temos uma compreensão básica de como o Windows Hello funciona, vamos dar uma olhada em como implementá-lo nos próprios apps.Now that we have a basic understanding of how Windows Hello works, let us take a look at how to implement them in our own applications.

Existem cenários diferentes que podemos implementar usando o Windows Hello.There are different scenarios we can implement using Windows Hello. Por exemplo, basta fazer logon no app em um dispositivo.For example, just logging on to your app on a device. O outro cenário comum seria autenticar usando um serviço.The other common scenario would be to authenticate against a service. Em vez de usar um nome de logon e uma senha, você usará o Windows Hello.Instead of using a logon name and password, you will be using Windows Hello. Nos capítulos a seguir, abordaremos a implementação de alguns cenários diferentes, inclusive como autenticar usando os serviços com o Windows Hello e como fazer a conversão de um sistema de nome de usuário e senha de logon existente em um sistema do Windows Hello.In the following chapters, we will discuss implementing a couple of different scenarios, including how to authenticate against your services with Windows Hello, and how to convert from an existing username/password system to a Windows Hello system.

3 Implementar o Windows Hello3 Implementing Windows Hello

Neste capítulo, começamos com um cenário de ambiente intacto, sem nenhum sistema de autenticação existente, e explicamos como implementar o Windows Hello.In this chapter, we begin with a greenfield scenario with no existing authentication system, and we explain how to implement Windows Hello.

A próxima seção aborda como migrar de um sistema de nome de usuário/senha existente.The next section covers how to migrate from an existing username/password system. No entanto, mesmo que esse capítulo seja o mais interessante para você, convém procurá-lo para obter uma compreensão básica do processo e do código necessário.However, even if that chapter interests you more, you may want to look through this one to get a basic understanding of the process and the code required.

3.1 Registro de novos usuários3.1 Enrolling new users

Começamos com um serviço totalmente novo que usará o Windows Hello e um novo usuário hipotético que está pronto para se inscrever em um novo dispositivo.We begin with a brand new service that will use Windows Hello, and a hypothetical new user who is ready to sign up on a new device.

A primeira etapa é verificar se o usuário pode usar o Windows Hello.The first step is to verify that the user is able to use Windows Hello. O app verifica as configurações do usuário e os recursos de máquina para assegurar que pode criar chaves de ID de usuário.The app verifies user settings and machine capabilities to make sure it can create user ID keys. Se o app determinar que o usuário ainda não habilitou o Windows Hello, ele pede para o usuário configurá-lo antes de usar o app.If the app determines the user has not yet enabled Windows Hello, it prompts the user to set this up before using the app.

Para habilitar o Windows Hello, o usuário precisa configurar somente um PIN nas configurações do Windows, a menos que o configure durante a experiência imediata (OOBE).To enable Windows Hello, the user just needs to set up a PIN in Windows settings, unless the user set it up during the Out of Box Experience (OOBE).

As linhas de código a seguir mostram uma maneira simples de verificar se o usuário está configurado para o Windows Hello.The following lines of code show a simple way to check if the user is set up for Windows Hello.

var keyCredentialAvailable = await KeyCredentialManager.IsSupportedAsync();
if (!keyCredentialAvailable)
{
    // User didn't set up PIN yet
    return;
}

A próxima etapa é solicitar ao usuário as informações para se inscrever no serviço.The next step is to ask the user for information to sign up with your service. Você pode optar por solicitar ao usuário o nome, o sobrenome e o endereço de email e um nome de usuário exclusivo.You may choose to ask the user for first name, last name, email address, and a unique username. Também é possível usar o endereço de email como o identificador exclusivo, como você quiser.You could use the email address as the unique identifier; it is up to you.

Neste cenário, usamos o endereço de email como o identificador exclusivo do usuário.In this scenario, we use the email address as the unique identifier for the user. Depois que o usuário se inscrever, você deverá considerar o envio de um email de validação para garantir que o endereço seja válido.Once the user signs up, you should consider sending a validation email to ensure the address is valid. Isso proporciona um mecanismo para redefinir a conta, se necessário.This gives you a mechanism to reset the account if necessary.

Caso o usuário tenha configurado o PIN, o aplicativo criará a KeyCredential do usuário.If the user has set up his or her PIN, the app creates the user’s KeyCredential. O aplicativo também obtém as informações de atestado da chave opcionais para adquirir uma prova criptográfica de que a chave foi gerada do TPM.The app also gets the optional key attestation information to acquire cryptographic proof that the key is generated on the TPM. A chave pública gerada e, como opção, o atestado são enviados ao servidor back-end para registrar o dispositivo que está sendo usado.The generated public key, and optionally the attestation, is sent to the backend server to register the device being used. Cada par de chaves geradas em cada dispositivo será exclusivo.Every key pair generated on every device will be unique.

O código para criar a KeyCredential é semelhante a este:The code to create the KeyCredential looks like this:

var keyCreationResult = await KeyCredentialManager.RequestCreateAsync(
    AccountId, KeyCredentialCreationOption.ReplaceExisting);

O RequestCreateAsync é a parte que cria as chaves pública e privada.The RequestCreateAsync is the part that creates the public and private key. Se o dispositivo tiver o chip TPM certo, as APIs solicitarão o chip TPM para criar as chaves pública e privada e armazenar o resultado; se não houver chip TPM disponível, o SO criará o par de chaves no código.If the device has the right TPM chip, the APIs will request the TPM chip to create the private and public key and store the result; if there is no TPM chip available, the OS will create the key pair in code. Não existe uma maneira do aplicativo acessar as chaves privadas criadas diretamente.There is no way for the app to access the created private keys directly. Parte da criação dos pares de chaves também são as informações de atestado resultantes.Part of the creation of the key pairs is also the resulting Attestation information. (Consulte a próximo seção para obter mais informações sobre o atestado.)(See the next section for more information about attestation.)

Depois que as informações do par de chaves e de atestado forem criadas no dispositivo, a chave pública, as informações de atestado opcional e o identificador exclusivo (como o endereço de email) precisam ser enviados para o serviço de registro back-end e armazenadas no back-end.After the key pair and attestation information are created on the device, the public key, the optional attestation information, and the unique identifier (such as the email address) need to be sent to the backend registration service and stored in the backend.

Para permitir que o usuário acesse o aplicativo em vários dispositivos, o serviço back-end precisa ser capaz de armazenar diversas chaves para o mesmo usuário.To allow the user to access the app on multiple devices, the backend service needs to be able to store multiple keys for the same user. Como cada chave é exclusiva para cada dispositivo, armazenaremos todas essas chaves conectadas ao mesmo usuário.Because every key is unique for every device, we will store all these keys connected to the same user. Um identificador de dispositivo é usado para ajudar a otimizar a parte do servidor durante a autenticação de usuários.A device identifier is used to help optimize the server part when authenticating users. Falaremos sobre isso mais detalhadamente no próximo capítulo.We talk about this in more detail in the next chapter.

Um esquema de banco de dados de amostra para armazenar essas informações no back-end pode ter esta aparência:A sample database schema to store this information at the backend might look like this:

Esquema do banco de dados de amostra do Windows Hello

A lógica do registro pode ter esta aparência:The registration logic might look like this:

Lógica de registro do Windows Hello

As informações de registro que você coleta podem incluir muito mais informações de identificação do que incluímos neste cenário simples.The registration information you collect may of course include a lot more identifying information than we include in this simple scenario. Por exemplo, se seu aplicativo acessa um serviço protegido, como para bancos, você precisará solicitar comprovação de identidade e outros itens como parte do processo de inscrição.For example, if your app accesses a secured service such as one for banking, you would need to request proof of identity and other things as part of the sign-up process. Depois que todas as condições forem atendidas, a chave pública do usuário será armazenada no back-end e usada para validar na próxima vez em que o usuário utilizar o serviço.Once all the conditions are met, the public key of this user will be stored in the backend and used to validate the next time the user uses the service.

using System;
using System.Runtime;
using System.Threading.Tasks;
using Windows.Storage.Streams;
using Windows.Security.Credentials;

static async void RegisterUser(string AccountId)
{
    var keyCredentialAvailable = await KeyCredentialManager.IsSupportedAsync();
    if (!keyCredentialAvailable)
    {
        // The user didn't set up a PIN yet
        return;
    }

    var keyCreationResult = await KeyCredentialManager.RequestCreateAsync(AccountId, KeyCredentialCreationOption.ReplaceExisting);
    if (keyCreationResult.Status == KeyCredentialStatus.Success)
    {
        var userKey = keyCreationResult.Credential;
        var publicKey = userKey.RetrievePublicKey();
        var keyAttestationResult = await userKey.GetAttestationAsync();
        IBuffer keyAttestation = null;
        IBuffer certificateChain = null;
        bool keyAttestationIncluded = false;
        bool keyAttestationCanBeRetrievedLater = false;

        keyAttestationResult = await userKey.GetAttestationAsync();
        KeyCredentialAttestationStatus keyAttestationRetryType = 0;

        if (keyAttestationResult.Status == KeyCredentialAttestationStatus.Success)
        {
            keyAttestationIncluded = true;
            keyAttestation = keyAttestationResult.AttestationBuffer;
            certificateChain = keyAttestationResult.CertificateChainBuffer;
        }
        else if (keyAttestationResult.Status == KeyCredentialAttestationStatus.TemporaryFailure)
        {
            keyAttestationRetryType = KeyCredentialAttestationStatus.TemporaryFailure;
            keyAttestationCanBeRetrievedLater = true;
        }
        else if (keyAttestationResult.Status == KeyCredentialAttestationStatus.NotSupported)
        {
            keyAttestationRetryType = KeyCredentialAttestationStatus.NotSupported;
            keyAttestationCanBeRetrievedLater = true;
        }
    }
    else if (keyCreationResult.Status == KeyCredentialStatus.UserCanceled ||
        keyCreationResult.Status == KeyCredentialStatus.UserPrefersPassword)
    {
        // Show error message to the user to get confirmation that user
        // does not want to enroll.
    }
}

3.1.1 Atestado3.1.1 Attestation

Durante a criação do par de chaves, também existe uma opção para solicitar as informações de atestado, que são geradas pelo chip do TPM.When creating the key pair, there is also an option to request the attestation information, which is generated by the TPM chip. Essas informações opcionais podem ser enviadas para o servidor como parte do processo de inscrição.This optional information can be sent to the server as part of the sign-up process. O atestado da chave TPM é um protocolo que prova criptograficamente que uma chave está associada ao TPM.TPM key attestation is a protocol that cryptographically proves that a key is TPM-bound. Esse tipo de atestado pode ser usado para garantir que uma determinada operação criptográfica ocorreu no TPM de um computador específico.This type of attestation can be used to guarantee that a certain cryptographic operation occurred in the TPM of a particular computer.

Ao receber a chave RSA gerada, a instrução de atestado e o certificado AIK, o servidor verifica as seguintes condições:When it receives the generated RSA key, the attestation statement, and the AIK certificate, the server verifies the following conditions:

  • A assinatura do certificado AIK é válida.The AIK certificate signature is valid.
  • O certificado AIK está encadeado até uma raiz confiável.The AIK certificate chains up to a trusted root.
  • O certificado AIK e a cadeia está habilitada para EKU OID "2.23.133.8.3" (o nome amigável é "Certificado de chave de identidade de atestado").The AIK certificate and its chain is enabled for EKU OID "2.23.133.8.3" (friendly name is "Attestation Identity Key Certificate").
  • A hora do certificado AIK é válida.The AIK certificate is time valid.
  • Todos os certificados CA de emissão na cadeia têm hora válida e não são revogados.All issuing CA certificates in the chain are time-valid and not revoked.
  • A instrução de atestado está formada corretamente.The attestation statement is formed correctly.
  • A assinatura no blob KeyAttestation usa uma chave pública AIK.The signature on KeyAttestation blob uses an AIK public key.
  • A chave pública incluída no blob KeyAttestation corresponde à chave RSA pública que o cliente enviou com a instrução de atestado.The public key included in the KeyAttestation blob matches the public RSA key that client sent alongside the attestation statement.

Seu aplicativo pode atribuir ao usuário um nível de autorização diferente, dependendo dessas condições.Your app might assign the user a different authorization level, depending on these conditions. Por exemplo, se uma dessas verificações falhar, talvez o usuário não seja registrado ou poderá haver um limite para o que o usuário pode fazer.For instance, if one of these checks fail, it might not enroll the user or it might limit what the user can do.

3.2 Logon com o Windows Hello3.2 Logging on with Windows Hello

Depois de ser registrado no sistema, o usuário poderá usar o app.Once the user is enrolled in your system, he or she can use the app. Dependendo do cenário, você pode pedir para os usuários se autenticarem antes que possam começar a usar o aplicativo ou apenas pedir para que eles se autentiquem assim que começarem a usar os serviços back-end.Depending on the scenario, you can ask users to authenticate before they can start using the app or just ask them to authenticate once they start using your backend services.

3.3 Forçar o usuário a fazer logon novamente3.3 Force the user to sign in again

Para alguns cenários, talvez você queira que o usuário comprove que ele é a pessoa que está atualmente conectada, antes de acessar o aplicativo ou, às vezes, antes de executar uma determinada ação dentro do aplicativo.For some scenarios, you may want the user to prove he or she is the person who is currently signed in, before accessing the app or sometimes before performing a certain action inside of your app. Por exemplo, antes de um aplicativo bancário envie o comando para transferir dinheiro ao servidor, você deseja assegurar que o usuário, e não alguém que encontrou um dispositivo conectado, está tentando executar uma transação.For example, before a banking app sends the transfer money command to the server, you want to make sure it is the user, rather than someone who found a logged-in device, attempting to perform a transaction. Você pode forçar o usuário a entrar novamente no aplicativo usando a classe UserConsentVerifier.You can force the user to sign in again in your app by using the UserConsentVerifier class. A linha de código a seguir forçará o usuário a inserir as credenciais.The following line of code will force the user to enter their credentials.

A linha de código a seguir forçará o usuário a inserir as credenciais.The following line of code will force the user to enter their credentials.

UserConsentVerificationResult consentResult = await UserConsentVerifier.RequestVerificationAsync("userMessage");
if (consentResult.Equals(UserConsentVerificationResult.Verified))
{
    // continue
}

Obviamente, você também pode usar o mecanismo de resposta de desafio do servidor, descrito no próximo capítulo, com o servidor que exige que o usuário insira o próprio código PIN ou as credenciais biométricas.Of course, you can also use the challenge response mechanism from the server, which requires a user to enter his or her PIN code or biometric credentials. Isso depende do cenário que você como desenvolvedor precisa implementar.It depends on the scenario you as a developer need to implement. Esse mecanismo é descrito na seção a seguir.This mechanism is described in the following section.

3.4 Autenticação no back-end3.4 Authentication at the backend

Quando o aplicativo tenta acessar serviços no back-end protegido, o serviço envia um desafio para o aplicativo.When the app attempts to access a protected backend service, the service sends a challenge to the app. O aplicativo usa a chave privada do usuário para assinar o desafio e o reenvia para o servidor.The app uses the private key from the user to sign the challenge and sends it back to the server. Como o servidor armazenou a chave pública para esse usuário, ele usa APIs criptográficas padrão para se assegurar de que a mensagem tenha sido assinada mesmo com a chave privada correta.Since the server has stored the public key for that user, it uses standard crypto APIs to make sure the message was indeed signed with the correct private key. No cliente, a entrada é feita pelas APIs do Windows Hello: o desenvolvedor jamais terá acesso à chave privada de nenhum usuário.On the client, the signing is done by the Windows Hello APIs; the developer will never have access to any user’s private key.

Além de verificar as chaves, o serviço também pode verificar o atestado de chave e definir se existe alguma limitação invocada em relação à maneira como as chaves são armazenadas no dispositivo.In addition to checking the keys, the service can also check the key attestation and discern if there are any limitations invoked on how the keys are stored on the device. Por exemplo, quando o dispositivo usa o TPM para proteger as chaves, isso é mais seguro do que dispositivos armazenando as chaves sem o TPM.For example, when the device uses TPM to protect the keys, it is more secure than devices storing the keys without TPM. A lógica do back-end pode decidir, por exemplo, que o usuário só tem permissão para transferir uma determinada quantidade de dinheiro quando nenhum TPM for usado para reduzir os riscos.The backend logic could decide, for example, that the user is only allowed to transfer a certain amount of money when no TPM is used to reduce the risks.

O atestado só está disponível para dispositivos com um chip do TPM versão 2.0 ou superior.Attestation is only available for devices with a TPM chip that’s version 2.0 or higher. Assim, você precisa levar em conta que essas informações nem sempre podem estar disponíveis em todos os dispositivos.Therefore, you need to take into account that this information might not be available on every device.

O fluxo de trabalho do cliente pode parecer com o seguinte gráfico:The client workflow might look like the following chart:

Fluxo de trabalho do cliente do Windows Hello

Quando o app chama o serviço no back-end, o servidor envia um desafio.When the app calls the service on the backend, the server sends a challenge. O desafio é assinado com o seguinte código:The challenge is signed with the following code:

var openKeyResult = await KeyCredentialManager.OpenAsync(AccountId);

if (openKeyResult.Status == KeyCredentialStatus.Success)
{
    var userKey = openKeyResult.Credential;
    var publicKey = userKey.RetrievePublicKey();
    var signResult = await userKey.RequestSignAsync(message);

    if (signResult.Status == KeyCredentialStatus.Success)
    {
        return signResult.Result;
    }
    else if (signResult.Status == KeyCredentialStatus.UserPrefersPassword)
    {

    }
}

A primeira linha, KeyCredentialManager.OpenAsync, pedirá para o SO abrir o identificador de chave.The first line, KeyCredentialManager.OpenAsync, will ask the OS to open the key handle. Caso isso seja feito com êxito, você pode assinar a mensagem de desafio usando o método KeyCredential.RequestSignAsync que levará o SO a solicitar ao usuário o PIN ou a biometria por meio do Windows Hello.If that is done successfully, you can sign the challenge message with the KeyCredential.RequestSignAsync method will trigger the OS to request the user’s PIN or biometrics through Windows Hello. Em nenhum momento o desenvolvedor tem acesso à chave privada do usuário.At no time will the developer have access to the private key of the user. Isso tudo é mantido seguro por meio das APIs WinRT.This is all kept secure through the APIs.

As APIs solicitam que o SO assine o desafio com a chave privada.The APIs request the OS to sign the challenge with the private key. Em seguida, o sistema solicita ao usuário um código PIN ou um logon biométrico configurado.The system then asks the user for a PIN code or a configured biometric logon. Quando as informações corretas são inseridas, o sistema pode pedir ao chip do TPM para executar as funções de criptografia e assinar o desafio.When the correct information is entered, the system can ask the TPM chip to perform the cryptographic functions and sign the challenge. (Ou use a solução de software de fallback, se nenhum TPM estiver disponível).(Or use the fallback software solution, if no TPM is available). O cliente precisa enviar o desafio assinado de volta ao servidor.The client must send the signed challenge back to the server.

Um fluxo de desafio – resposta básico é mostrado neste diagrama de sequência:A basic challenge–response flow is shown in this sequence diagram:

Resposta do desafio do Windows Hello

Em seguida, o servidor precisa validar a assinatura.Next, the server must validate the signature. Quando você solicita a chave pública e a envia para o servidor a ser usado para validação futura, ela está em um blob publicKeyInfo com codificação ASN. 1.When you request the public key and send it to the server to use for future validation, it is in an ASN.1-encoded publicKeyInfo blob. Se você examinar o exemplo de código do Windows Hello no GitHub, verá que há classes auxiliares para encapsular funções crypt32 para converter o blob. 1 codificado pelo ASN em um blob CNG, que é mais comumente usado.If you look at the Windows Hello code sample on GitHub, you will see that there are helper classes to wrap Crypt32 functions to translate the ASN.1-encoded blob to a CNG blob, which is more commonly used. O blob contém o algoritmo de chave pública, que é o RSA, e a chave pública RSA.The blob contains the public key algorithm, which is RSA, and the RSA public key.

No exemplo, o motivo pelo qual convertemos o blob. 1 codificado pelo ASN em um blob CNG é para que ele possa ser usado com a CNG (/windows/desktop/SecCNG/cng-portal) e com a API BCrypt.In the sample, the reason we convert the ASN.1-encoded blob to a CNG blob is so that it can be used with CNG (/windows/desktop/SecCNG/cng-portal) and the BCrypt API. Se você pesquisar o blob CNG, ele indicará a estrutura de BCRYPT_KEY_BLOBrelacionada.If you look up the CNG blob, it will point you to the related BCRYPT_KEY_BLOB structure. Essa superfície de API pode ser usada para autenticação e criptografia em aplicativos do Windows.This API surface can be used for authentication and encryption in Windows applications. O ASN. 1 é um padrão documentado para a comunicação de estruturas de dados que podem ser serializadas e é comumente usado em criptografia de chave pública e com certificados.ASN.1 is a documented standard for communicating data structures that can be serialized, and it's commonly used in public key cryptography and with certificates. É por isso que as informações de chave pública são retornadas dessa maneira.That's why the public key information is returned in this manner. A chave pública é uma chave RSA; e esse é o algoritmo que o Windows Hello usa ao assinar dados.The public key is an RSA key; and that's the algorithm that Windows Hello uses when it signs data.

Depois que tiver o blob CNG, você precisará validar o desafio assinado em relação à chave pública do usuário.Once you have the CNG blob, you need to validate the signed challenge against the public key of the user. Como todos usam o próprio sistema ou tecnologia back-end, não existe maneira genérica de implementar essa lógica.Since everyone uses his or her own system or backend technology, there is no generic way to implement this logic. Sempre usamos SHA256 como o algoritmo de hash e Pkcs1 para SignaturePadding, logo, certifique-se de que seja o que você usa ao validar a resposta assinada do cliente.We are using SHA256 as the hash algorithm and Pkcs1 for SignaturePadding, so make sure that’s what you use when you validate the signed response from the client. Mais uma vez, refira-se ao exemplo como uma maneira de fazer isso em .NET 4.6 no servidor, mas em geral será algo parecido com isto:Again, refer to the sample for a way to do it on your server in .NET 4.6, but in general it will look something like this:

using (RSACng pubKey = new RSACng(publicKey))
{
    retval = pubKey.VerifyData(originalChallenge, responseSignature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

Lemos a chave pública armazenada, que é uma chave RSA.We read the stored public key, which is an RSA key. Validamos a mensagem de desafio assinada com a chave pública e, em caso de check-out, autorizamos o usuário.We validate the signed challenge message with the public key and if this checks out, we authorize the user. Caso o usuário seja autenticado, o aplicativo pode chamar os serviços back-end como normais.If the user is authenticated, the app can call the backend services as normal.

O código completo pode parecer algo como o seguinte:The complete code might look something like the following:

using System;
using System.Runtime;
using System.Threading.Tasks;
using Windows.Storage.Streams;
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Security.Credentials;

static async Task<IBuffer> GetAuthenticationMessageAsync(IBuffer message, String AccountId)
{
    var openKeyResult = await KeyCredentialManager.OpenAsync(AccountId);

    if (openKeyResult.Status == KeyCredentialStatus.Success)
    {
        var userKey = openKeyResult.Credential;
        var publicKey = userKey.RetrievePublicKey();
        var signResult = await userKey.RequestSignAsync(message);
        if (signResult.Status == KeyCredentialStatus.Success)
        {
            return signResult.Result;
        }
        else if (signResult.Status == KeyCredentialStatus.UserCanceled)
        {
            // Launch app-specific flow to handle the scenario 
            return null;
        }
    }
    else if (openKeyResult.Status == KeyCredentialStatus.NotFound)
    {
        // PIN reset has occurred somewhere else and key is lost.
        // Repeat key registration
        return null;
    }
    else
    {
        // Show custom UI because unknown error has happened.
        return null;
    }
}

Implementar o mecanismo de resposta de desafio correto está fora do escopo deste documento, mas esse tópico é algo que precisa de muita consideração para criar um mecanismo seguro que impeça coisas como ataques de reprodução ou man-in-the-middle.Implementing the correct challenge–response mechanism is outside the scope of this document, but this topic is something that requires attention in order to successfully create a secure mechanism to prevent things like replay attacks or man-in-the-middle attacks.

3.5 Registro de outro dispositivo3.5 Enrolling another device

Hoje em dia, é bastante comum que os usuários tenham vários dispositivos com os mesmos apps instalados.Nowadays, it is common for users to have multiple devices with the same apps installed. Como isso funciona quando se usa o Windows Hello com vários dispositivos?How does this work when using Windows Hello with multiple devices?

Ao usar o Windows Hello, cada dispositivo criará um conjunto de chaves pública e privada exclusivo.When using Windows Hello every device will create a unique private and public key set. Isso significa que, caso você queira que um usuário possa usar vários dispositivos, o back-end deve ser capaz de armazenar várias chaves públicas desse usuário.This means that if you want a user to be able to use multiple devices, your backend must be able to store multiple public keys from this user. Consulte o diagrama de banco de dados na seção 2.1 para obter um exemplo da estrutura da tabela.Refer to the database diagram in section 2.1 for an example of the table structure.

Registrar outro dispositivo é praticamente o mesmo que registrar um usuário pela primeira vez.Registering another device is almost the same as registering a user for the first time. Você ainda precisa ter certeza de que o usuário que se registra para esse novo dispositivo é realmente o usuário que diz ser.You still need to be sure the user registering for this new device is really the user he or she claims to be. É possível fazer isso com qualquer mecanismo de autenticação de dois fatores usado atualmente.You can do so with any two-factor authentication mechanism that is used today. Existem várias maneiras de fazer isso de maneira segura.There are several ways to accomplish this in a secure way. Tudo isso depende do cenário.It all depends on your scenario.

Por exemplo, caso ainda use o nome de logon e a senha, você pode usar isso para autenticar o usuário e solicitar o uso de um dos métodos de verificação, como SMS ou email.For example, if you still use login name and password you can use that to authenticate the user and ask them to use one of their verification methods like SMS or email. Caso não tenha um nome de logon e uma senha, você também pode usar um dos dispositivos já registrados e enviar uma notificação para o aplicativo nesse dispositivo.If you don’t have a login name and password, you can also use one of the already registered devices and send a notification to the app on that device. O aplicativo autenticador MSA é um exemplo disso.The MSA authenticator app is an example of this. Em resumo, você deve usar um mecanismo 2FA comum para registrar dispositivos extras para o usuário.In short, you should use a common 2FA mechanism to register extra devices for the user.

O código para registrar o novo dispositivo é exatamente o mesmo do registro do usuário pela primeira vez (dentro do aplicativo).The code to register the new device is exactly the same as registering the user for the first time (from within the app).

var keyCreationResult = await KeyCredentialManager.RequestCreateAsync(
    AccountId, KeyCredentialCreationOption.ReplaceExisting);

Para facilitar ainda mais para o usuário reconhecer quais dispositivos estão registrados, você pode optar por enviar o nome do dispositivo ou outro identificador como parte do registro.To make it easier for the user to recognize which devices are registered, you can choose to send the device name or another identifier as part of the registration. Isso também é útil, por exemplo, caso você queira implementar um serviço no back-end onde os usuários possam cancelar o registro de dispositivos quando um dispositivo é perdido.This is also useful, for example, if you want to implement a service on your backend where users can unregister devices when a device is lost.

3.6 Como usar várias contas no aplicativo3.6 Using multiple accounts in your app

Além de oferecer suporte a vários dispositivos para uma única conta, também é comum dar suporte a várias contas em um único aplicativo.In addition to supporting multiple devices for a single account, it is also common to support multiple accounts in a single app. Por exemplo, talvez você esteja se conectando a várias contas do Twitter de dentro de seu app.For example, maybe you are connecting to multiple Twitter accounts from within your app. Com o Windows Hello, é possível criar vários pares de chaves e oferecer suporte a várias contas dentro do app.With Windows Hello, you can create multiple key pairs and support multiple accounts inside your app.

Uma maneira de fazer isso é armazenar o nome do usuário ou o identificador exclusivo descrito no capítulo anterior e colocá-lo no armazenamento isolado.One way of doing this is keeping the username or unique identifier described in the previous chapter in isolated storage. Assim, sempre que você criar uma nova conta, coloque a ID da conta no armazenamento isolado.Therefore, every time you create a new account, you store the account ID in isolated storage.

Na interface do usuário do aplicativo, você dá ao usuário a opção de escolher uma das contas criadas antes ou se inscrever usando uma nova.In the app UI, you allow the user to either choose one of the previously created accounts or sign up with a new one. O fluxo de criação de uma nova conta é o mesmo, conforme descrito antes.The flow of creating a new account is the same as described before. Escolher uma conta é uma questão de listar as contas armazenadas na tela.Choosing an account is a matter of listing the stored accounts on the screen. Depois que o usuário seleciona uma conta, use a ID da conta para fazer logon do usuário no aplicativo:Once the user selects an account, use the account ID to log on the user in your app:

var openKeyResult = await KeyCredentialManager.OpenAsync(AccountId);

O restante do fluxo é o mesmo, conforme descrito antes.The rest of the flow is the same as described earlier. Para ser claro, todas essas contas são protegidas pelo mesmo PIN ou gesto biométrico, já que neste cenário, todas são usadas em um único dispositivo com a mesma conta do Windows.To be clear, all these accounts are protected by the same PIN or biometric gesture since in this scenario they are being used on a single device with the same Windows Account.

4 Migrar de um sistema atual para o Windows Hello4 Migrating an Existing System to Windows Hello

Nesta seção, vamos abordar um aplicativo Plataforma Universal do Windows existente e um sistema back-end que usa um banco de dados que armazena o nome de usuário e a senha com hash.In this short section, we will address an existing Universal Windows Platform app and backend system that uses a database that stores the username and hashed password. Esses apps coletam credenciais do usuário quando o app é iniciado e fornecem as credenciais quando o sistema back-end retorna o desafio de autenticação.These apps collect credentials from the user when the app starts and use them when the backend system returns the authentication challenge.

Aqui, descreveremos quais partes precisam ser alteradas ou substituídas para que o Windows Hello funcione.Here, we will describe what pieces need to be changed or replaced to make Windows Hello work.

Já descrevemos a maioria das técnicas nos capítulos anteriores.We have already described most of the techniques in the earlier chapters. Adicionar o Windows Hello ao seu sistema atual envolve a adição de alguns fluxos diferentes na parte de registro e autenticação do código.Adding Windows Hello to your existing system involves adding a couple of different flows in the registration and authentication part of your code.

Uma abordagem é permitir que o usuário escolher quando atualizar.One approach is to let the user choose when to upgrade. Depois que o usuário faz logon no app e você detecta que o app e o sistema operacional são capazes de oferecer suporte ao Windows Hello, é possível perguntar ao usuário se ele deseja atualizar credenciais para usar esse sistema mais moderno e seguro.After the user logs on to the app and you detect that the app and OS are capable of supporting Windows Hello, you can ask the user if he or she wants to upgrade credentials to use this modern and more secure system. É possível usar o código a seguir para verificar se o usuário é capaz de usar o Windows Hello.You can use the following code to check whether the user is capable of using Windows Hello.

var keyCredentialAvailable = await KeyCredentialManager.IsSupportedAsync();

A interface do usuário pode ter esta aparência:The UI might look something like this:

interface do usuário do Windows Hello

Caso o usuário decida começar a usar o Windows Hello, crie a KeyCredential conforme descrito antes.If the user elects to start using Windows Hello, you create the KeyCredential described before. O servidor de registro back-end adiciona a chave pública e a instrução de atestado opcional ao banco de dados.The backend registration server adds the public key and optional attestation statement to the database. Como o usuário já está autenticado com nome de usuário e senha, o servidor pode vincular as novas credenciais às informações do usuário atual no banco de dados.Because the user is already authenticated with username and password, the server can link the new credentials to the current user information in the database. O modelo de banco de dados pode ser igual ao exemplo descrito anteriormente.The database model could be the same as the example described earlier.

Caso o aplicativo consiga criar a KeyCredential dos usuários, ele colocará a ID de usuário no armazenamento isolado de maneira que o usuário possa escolher essa conta na lista depois que o aplicativo for reiniciado.If the app was able to create the users KeyCredential, it stores the user ID in isolated storage so the user can pick this account from the list once the app is started again. Desse ponto em diante, o fluxo segue exatamente os exemplos descritos nos capítulos anteriores.From this point on, the flow exactly follows the examples described in earlier chapters.

A etapa final na migração para um cenário do Windows Hello completo é desabilitar a opção de nome de logon e senha no app e remover as senhas com hash armazenadas no banco de dados.The final step in migrating to a full Windows Hello scenario is disabling the logon name and password option in the app and removing the stored hashed passwords from your database.

5 Resumo5 Summary

O Windows 10 apresenta um nível mais alto de segurança que também é simples de colocar em prática.Windows 10 introduces a higher level of security that is also simple to put into practice. O Windows Hello oferece um novo sistema de entrada biométrica que reconhece o usuário e combate ativamente iniciativas de contornar a identificação apropriada.Windows Hello provides a new biometric sign-in system that recognizes the user and actively defeats efforts to circumvent proper identification. Assim, ele pode oferecer diversas camadas de chaves e certificados que nunca podem ser reveladas ou usadas fora de um módulo de plataforma confiável.It can then deliver multiple layers of keys and certificates that can never be revealed or used outside the trusted platform module. Além disso, uma camada adicional de segurança está disponível por meio do uso opcional de chaves e certificados de identidade de atestado.In addition, a further layer of security is available through the optional use of attestation identity keys and certificates.

Como um desenvolvedor, você pode usar essas orientações sobre design e implantação dessas tecnologias para adicionar facilmente uma autenticação segura às implementações do Windows 10 para proteger aplicativos e serviços back-end.As a developer, you can use this guidance on design and deployment of these technologies to easily add secure authentication to your Windows 10 rollouts to protect apps and backend services. O código necessário é mínimo e fácil de entender.The code required is minimal and easy to understand. O Windows 10 faz o trabalho pesado.Windows 10 does the heavy lifting.

As opções de implementação flexível permitem que o Windows Hello substitua ou funcione com o sistema de autenticação atual.Flexible implementation options allow Windows Hello to replace or work alongside your existing authentication system. A experiência de implantação é suave e econômica.The deployment experience is painless and economical. Nenhuma infraestrutura adicional é necessária para implantar a segurança do Windows 10.No additional infrastructure is needed to deploy Windows 10 security. Com o Windows Hello integrado ao sistema operacional, o Windows 10 oferece a solução mais segura para os problemas de autenticação dos desenvolvedores modernos.With Microsoft Hello built in to the operating system, Windows 10 offers the most secure solution to the authentication problems facing the modern developer.

Missão cumprida!Mission accomplished! Você acabou de tornar a Internet um lugar seguro!You just made the Internet a safer place!

6 Recursos6 Resources

6.1 Artigos e código de exemplo6.1 Articles and sample code

6.2 Terminologia6.2 Terminology

TermoTerm DefiniçãoDefinition
AIKAIK Uma chave de identidade de atestado é usada para fornecer essa prova criptográfica (atestado de chave do TPM) assinando as propriedades da chave não migrável e fornecendo as propriedades e a assinatura à parte confiável para verificação.An attestation identity key is used to provide such a cryptographic proof (TPM key attestation) by signing the properties of the non-migratable key and providing the properties and signature to the relying party for verification. A assinatura resultante é chamada de "instrução de atestado".The resulting signature is called an “attestation statement.” Como a assinatura é criada usando-se a chave privada do AIK – que só pode ser usada no TPM que a criou – a parte confiável pode confiar que a chave atestada é realmente não migrável e não pode ser usada fora desse TPM.Since the signature is created using the AIK private key—which can only be used in the TPM that created it—the relying party can trust that the attested key is truly non-migratable and cannot be used outside that TPM.
Certificado AIKAIK Certificate Um certificado AIK é usado para atestar a presença de um AIK dentro de um TPM.An AIK certificate is used to attest to the presence of an AIK within a TPM. Ele também é usado para atestar que outras chaves certificadas pelo AIK têm origem nesse TPM específico.It is also used to attest that other keys certified by the AIK originated from that particular TPM.
IDPIDP IDP é um provedor de identidade.An IDP is an identity provider. Um exemplo é a compilação IDP da Microsoft para contas da Microsoft.An example is the IDP build by Microsoft for Microsoft Accounts. Sempre que precisa se autenticar usando um MSA, um aplicativo pode chamar o IDP MSA.Every time an application needs to authenticate with an MSA, it can call the MSA IDP.
PKIPKI A infraestrutura de chave pública é usada geralmente para apontar para um ambiente hospedado pela própria organização e responsável pela criação de chaves, revogação de chaves etc.Public key infrastructure is commonly used to point to an environment hosted by an organization itself and being responsible for creating keys, revoking keys, etc.
TPMTPM O trusted platform module (TPM) pode ser usado para criar pares de chaves pública/privada criptográficas de maneira que a chave privada jamais possa ser revelada ou usada fora do TPM (ou seja, a chave é não migrável).The trusted platform module can be used to create cryptographic public/private key pairs in such a way that the private key can never be revealed or used outside the TPM (that is, the key is non-migratable).
Atestado de chave de TPMTPM Key Attestation Um protocolo que prova criptograficamente que uma tecla está associada ao TPM.A protocol that cryptographically proves that a key is TPM-bound. Esse tipo de atestado pode ser usado para garantir que uma determinada operação criptográfica ocorreu no TPM de um computador específico.This type of attestation can be used to guarantee that a certain cryptographic operation occurred in the TPM of a particular computer