Melhor maneira de criar uma chave de API criptográfica
-
27-09-2019 - |
Pergunta
Eu tenho uma API aberta no meu aplicativo para o qual gostaria de fornecer o Access Key's. As informações recebidas serão um ID de usuário, ID do recurso e um valor para atualizar. Queria uma chave de API por recurso.
De preferência, gostaria de validar a autenticidade de uma solicitação recebida usando apenas os dados fornecidos e não verificando qualquer tipo de banco de dados (muito simples, muito rápido!)
Se eu usasse o MD5 para gerar a chave da API a partir do ID do recurso, ID do usuário e um sal, pode parecer algo assim ...
authentic_request = md5(user_id + resource_id + salt) == api_key
Minha pergunta é realmente uma sobre como eu deveria ser paranóico. Algo como o exposto, com apenas o velho MD5, basta? Outra opção seria usar o OpenSSL gerar a chave contra um PEM e, em seguida, talvez o MD5 o resultado para mantê -lo conciso, isso soa excessivamente paranóico ou até adiciona uma camada de segurança na realidade?
Quaisquer idéias ou até alternativas recebidas com gratidão!
Obrigado
Solução
Esta é efetivamente uma implementação simplista de um Código de autenticação de mensagem baseado em hash.
Supondo que você vai dar essas chaves com base no (user_id, resource_id)
Emparelhar e manter o valor que você está ligando salt
Segredo, e você não está esperando uma tentativa séria de ataque, isso deve funcionar. No entanto, as melhores práticas determinam que você deve usar um algoritmo mais seguro do que a mera concatenação para combinar a chave e os dados, e um algoritmo de digestão mais forte, como o SHA-1; Existe um algoritmo de combinação HMAC-SHA1 padrão que funcionaria muito bem para isso.
O terceiro valor é realmente uma chave, não um sal; A posse dessa chave é o que permite a geração e a validação do código de autenticação.
Outras dicas
Depende do que você está tentando proteger. Por si só, isso impedirá o uso indevido casual da sua API, mas não impedirá ataques de reprodução. Se alguém estiver cheirando seu tráfego, verá a chave e poderá acessar o recurso reutilizando -o. Adicionar SSL à solução impediria esse tipo de ataque.
Enquanto você está nisso, você também pode mudar o MD5 para SHA-256.