Microsoft NTLM
Desafio/resposta do Windows (NTLM) é o protocolo de autenticação usado em redes que incluem sistemas que executam o sistema operacional Windows e em sistemas autônomos.
O pacote de segurança Microsoft Kerberos adiciona maior segurança do que o NTLM aos sistemas em uma rede. Embora o Microsoft Kerberos seja o protocolo de escolha, o NTLM ainda é suportado. O NTLM também deve ser usado para autenticação de logon em sistemas autônomos. Para obter mais informações sobre o Kerberos, confira Microsoft Kerberos.
As credenciais de NTLM são baseadas nos dados obtidos durante o processo de logon interativo e consistem em um nome de domínio, um nome de usuário e um hash unidirecional da senha do usuário. O NTLM usa um protocolo criptografado de desafio/resposta para autenticar um usuário, sem enviar a senha do usuário pela conexão. Em vez disso, o sistema que solicita a autenticação deve executar um cálculo que comprova que ele tem acesso às credenciais de NTLM protegidas.
A autenticação NTLM interativa em uma rede normalmente envolve dois sistemas: um sistema cliente, em que o usuário está solicitando autenticação, e um controlador de domínio, em que as informações relacionadas à senha do usuário são mantidas. A autenticação não interativa, que pode ser necessária para permitir que um usuário já conectado acesse um recurso, como um aplicativo de servidor, normalmente envolve três sistemas: um cliente, um servidor e um controlador de domínio que faz os cálculos de autenticação em nome do servidor.
As etapas a seguir apresentam um esboço da autenticação não interativa NTLM. A primeira etapa fornece as credenciais NTLM do usuário e ocorre apenas como parte do processo de autenticação interativa (logon).
(Somente autenticação interativa) Um usuário acessa um computador cliente e fornece um nome de domínio, nome de usuário e senha. O cliente calcula um hash criptográfico da senha e descarta a senha real.
O cliente envia o nome de usuário para o servidor (em texto simples).
O servidor gera um número aleatório de 8 bytes, chamado de desafio ou nonce, e o envia ao cliente.
O cliente criptografa esse desafio com o hash da senha do usuário e retorna o resultado para o servidor. Isso é chamado de resposta.
O servidor envia os três itens a seguir para o controlador de domínio:
- Nome de usuário
- Desafio enviado ao cliente
- Resposta recebida do cliente
O controlador de domínio usa o nome de usuário para recuperar o hash da senha do usuário do banco de dados do Gerenciador de Contas de Segurança. Ele usa esse hash de senha para criptografar o desafio.
O controlador de domínio compara o desafio criptografado que ele calculou (na etapa 6) com a resposta calculada pelo cliente (na etapa 4). Se forem idênticos, a autenticação será bem-sucedida.
Seu aplicativo não deve acessar o pacote de segurança NTLM diretamente; em vez disso, ele deve usar o pacote de segurança Negotiate. Negotiate permite que seu aplicativo aproveite os protocolos de segurança mais avançados se eles forem suportados pelos sistemas envolvidos na autenticação. Atualmente, o pacote de segurança Negotiate seleciona entre Kerberos e NTLM. Negotiate seleciona Kerberos, a menos que ele não possa ser usado por um dos sistemas envolvidos na autenticação.