Estou usando o Auth0 para lidar com a autenticação no meu aplicativo da web. Estou usando o ASP.NET Core v1.0.0 e Angular 2 rc5 e não sei muito sobre autenticação / segurança em geral.
Nos documentos Auth0 para ASP.NET Core Web Api , há duas opções para o algoritmo JWT: RS256 e HS256. Esta pode ser uma pergunta idiota, mas:
Qual é a diferença entre RS256 e HS256? Quais são alguns casos de uso (se aplicável)?
jwt
auth0
asp.net-core-webapi
Rico Kahler
fonte
fonte
Respostas:
Ambas as opções se referem a qual algoritmo o provedor de identidade usa para assinar o JWT. A assinatura é uma operação criptográfica que gera uma "assinatura" (parte da JWT) que o destinatário do token pode validar para garantir que o token não tenha sido violado.
O RS256 (RSA Signature with SHA-256 ) é um algoritmo assimétrico e usa um par de chaves pública / privada: o provedor de identidade possui uma chave privada (secreta) usada para gerar a assinatura e o consumidor da JWT recebe uma chave pública para validar a assinatura. Como a chave pública, ao contrário da chave privada, não precisa ser mantida em segurança, a maioria dos provedores de identidade facilita a obtenção e o uso pelos consumidores de identidades (geralmente por meio de um URL de metadados).
O HS256 ( HMAC com SHA-256), por outro lado, envolve uma combinação de uma função de hash e uma chave (secreta) compartilhada entre as duas partes usadas para gerar o hash que servirá como assinatura. Como a mesma chave é usada para gerar a assinatura e validá-la, é necessário ter cuidado para garantir que a chave não seja comprometida.
Se você estiver desenvolvendo o aplicativo que consome as JWTs, poderá usar o HS256 com segurança, pois terá controle sobre quem usa as chaves secretas. Se, por outro lado, você não tiver controle sobre o cliente ou não tiver como garantir uma chave secreta, o RS256 será mais adequado, pois o consumidor precisa conhecer apenas a chave pública (compartilhada).
Como a chave pública geralmente é disponibilizada nos pontos de extremidade de metadados, os clientes podem ser programados para recuperar a chave pública automaticamente. Se for esse o caso (como acontece com as bibliotecas do .Net Core), você terá menos trabalho a fazer na configuração (as bibliotecas buscarão a chave pública do servidor). As chaves simétricas, por outro lado, precisam ser trocadas fora da banda (garantindo um canal de comunicação seguro) e atualizadas manualmente se houver uma substituição da chave de assinatura.
O Auth0 fornece pontos de extremidade de metadados para os protocolos OIDC, SAML e WS-Fed, onde as chaves públicas podem ser recuperadas. Você pode ver esses pontos de extremidade nas "Configurações avançadas" de um cliente.
O ponto de extremidade de metadados OIDC, por exemplo, assume a forma de
https://{account domain}/.well-known/openid-configuration
. Se você navegar para esse URL, verá um objeto JSON com uma referência ahttps://{account domain}/.well-known/jwks.json
, que contém a chave pública (ou chaves) da conta.Se você observar as amostras do RS256, verá que não precisa configurar a chave pública em nenhum lugar: ela é recuperada automaticamente pela estrutura.
fonte
Na criptografia, existem dois tipos de algoritmos usados:
Algoritmos simétricos
Uma única chave é usada para criptografar dados. Quando criptografados com a chave, os dados podem ser descriptografados usando a mesma chave. Se, por exemplo, Mary criptografa uma mensagem usando a chave "meu segredo" e a envia para John, ele poderá descriptografar a mensagem corretamente com a mesma chave "meu segredo".
Algoritmos assimétricos
Duas chaves são usadas para criptografar e descriptografar mensagens. Enquanto uma chave (pública) é usada para criptografar a mensagem, a outra chave (privada) só pode ser usada para descriptografá-la. Portanto, John pode gerar chaves públicas e privadas e enviar apenas a chave pública para Mary para criptografar sua mensagem. A mensagem só pode ser descriptografada usando a chave privada.
Cenário HS256 e RS256
Esses algoritmos NÃO são usados para criptografar / descriptografar dados. Em vez disso, são usados para verificar a origem ou a autenticidade dos dados. Quando Mary precisa enviar uma mensagem aberta para Jhon e ele precisa verificar se a mensagem é certamente de Mary, HS256 ou RS256 podem ser usadas.
O HS256 pode criar uma assinatura para uma determinada amostra de dados usando uma única chave. Quando a mensagem é transmitida junto com a assinatura, a parte receptora pode usar a mesma chave para verificar se a assinatura corresponde à mensagem.
O RS256 usa par de chaves para fazer o mesmo. Uma assinatura só pode ser gerada usando a chave privada. E a chave pública deve ser usada para verificar a assinatura. Nesse cenário, mesmo que Jack encontre a chave pública, ele não pode criar uma mensagem de falsificação com uma assinatura para representar Mary.
fonte
Há uma diferença no desempenho.
Simplificando,
HS256
é cerca de 1 ordem de magnitude mais rápida queRS256
na verificação, mas cerca de 2 ordens de magnitude mais rápida queRS256
na emissão (assinatura).Não se prenda aos números reais, pense neles com respeito um ao outro.
[Program.cs]
fonte
resposta curta, específica para OAuth2,
fonte