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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top