Os programadores que constroem sites / aplicativos da web devem entender a criptografia? Não tenho idéia de como a maioria dos algoritmos criptográficos funciona e realmente não entendo as diferenças entre md5 / des / aes / etc. Algum de vocês encontrou alguma necessidade de uma compreensão aprofundada da criptografia?
Eu não precisava disso, mas me pergunto se talvez esteja perdendo alguma coisa. Eu usei o salt + md5 hash para criptografar senhas e digo aos servidores da Web para usar SSL. Além disso, não posso dizer que usei muito mais, nem posso dizer com certeza como esses métodos são seguros. Eu os uso apenas porque outras pessoas afirmam que são seguras.
Você já encontrou a necessidade de usar criptografia na programação da web além desses dois exemplos simples?
fonte
Respostas:
Os programadores da Web devem saber que nunca devem tentar implementar eles mesmos criptografia.
Em particular, isso significa que nenhum especialista em não segurança deve tocar diretamente em nenhuma das primitivas criptográficas. Eles não deveriam estar pensando no nível do AES, SHA-1, etc. Em vez disso, deveriam estar usando funções de alto nível para criptografar e assinar mensagens, além de senhas "hash".
Por quê? Porque, caso contrário, as pessoas se enganam ao pensar que:
Apenas para estar na mesma página, nenhum dos itens acima está correto . Se você não conseguir isso, não deve tocar na criptografia com uma vara de 3 metros! (O AES-256 é uma ótima criptografia, mas somente se você o usar corretamente. "Não é o tamanho que importa, é o que você faz com ele." :-))
De que tipo de funções de alto nível estou falando? Eu, pessoalmente, recomendo o uso de uma biblioteca OpenPGP (para dados em repouso) ou SSL (para dados em movimento). Esses protocolos especificam rigidamente o uso correto de algoritmos assimétricos, simétricos e de hash. Por exemplo, com o OpenPGP:
EME-PKCS1-v1_5
). O preenchimento é extremamente importante para a RSA. ( Alguns acham que usar o preenchimento da versão 1.5 é bom. Outros acham que o OAEP é melhor. )Resumo: se você não é um especialista em segurança e pensa no nível da AES, SHA-1 ou MD5, não está conseguindo , você está fazendo errado . Use uma biblioteca criada por especialistas em segurança (como o Bouncy Castle), que implementa protocolos projetados por especialistas em segurança (como o OpenPGP para criptografia ou bcrypt ou scrypt para hash de senha), em vez de usar o seu.
Eu não sou um especialista em criptografia de forma alguma, mas sei o suficiente para não tentar criar meus próprios protocolos ad-hoc. Só para esclarecer, todo este post é material da Cryptography 101 . Portanto, se este post não fizer 100% de sentido para você, você definitivamente não deve chegar nem perto da criptografia.
fonte
Você não precisa saber nada além dos princípios básicos sobre criptografia (o que é um hash, o que é um sal, aproximadamente o quão difícil é quebrar essa criptografia ou aquilo e assim por diante), mas você precisa saber um pouco sobre segurança em geral.
As principais áreas de segurança que você definitivamente precisa conhecer como desenvolvedor web:
fonte
Lembro-me de ver essa palestra chamada O que todo engenheiro precisa saber sobre segurança e onde aprender , o palestrante é Neil Daswani e é um Google Tech Talk que ele deu, pode ser um bom lugar para começar!
Porém, não se aplica apenas aos programadores da Web, talvez a pergunta deva ser re-intitulada "O que os programadores devem saber sobre segurança?" pois eles não precisam saber mais do que o básico sobre criptografia (por mais interessante que seja)
fonte
A criptografia é útil em muitas situações. Um exemplo que usamos é criptografar um cookie de sessão criado e definido por um host Win / IIS para ser usado em um host LAMP.
Para implementar a criptografia (em oposição ao hash md5 / sha1), alguns termos básicos são importantes - como a diferença entre criptografia simétrica e assimétrica. Além de entender a diferença entre os dois, você deve desenvolver um entendimento do que você, como desenvolvedor da web, precisa fazer para armazenar e proteger adequadamente as chaves de descriptografia. Por exemplo, se o desenvolvimento de um aplicativo a ser implantado em um host sobre o qual você não tem controle administrativo total, como um host compartilhado, é implantado em um servidor em que todos os administradores são conhecidos e confiáveis.
fonte
Na minha opinião, você deve saber tudo sobre criptografia que alguém que está atacando seu código saberá. Você deve entender hashes, salt, a não aleatoriedade do aleatório, os principais algoritmos de criptografia (RSA, 3DES, AES etc.), SHA-1 / MD-5 / et al. Você não precisa memorizá-los, mas pelo menos deve saber a eficácia de um algoritmo de hash e como torná-lo mais forte. Você deve saber o que são colisões e falsos positivos. Você não deve poder recitar os algoritmos de criptografia, mas deve estar familiarizado com os benchmarks deles, quais são ideais para quais cenários. Você deve ser capaz de descrever e explicar a criptografia simétrica x assimétrica e quando usar cada uma. Você deve saber o que é PKI e como é usado. Você deve saber o que é uma autoridade de certificação e como ela interage com seus servidores.
Conhecer os meandros de tudo não é tão importante quanto conhecer os antecedentes. Quais são os parâmetros de referência de certas coisas (quão rápido, quão forte, pontos fracos, etc.).
Essas recomendações são para informações de nível sênior ou arquiteto. Se você é apenas um macaco da web remando um remo, não precisa saber nada disso. Seu arquiteto deve conhecer essas coisas. Se você está no comando do site, projetando-o, implementando-o, etc ..., deve familiarizar-se com todos esses conceitos e conversar com inteligência sobre eles. Você não precisa ensiná-lo, basta aceitar e disseminar informações sobre ele.
fonte
Você deve usar o bcrypt (Blowfish) para armazenar senhas em vez do MD5; é um algoritmo muito mais lento , o que significa que é muito mais difícil para um hacker adivinhar e verificar. Além disso, o bcrypt usa um fator de trabalho como parâmetro, o que significa que pode ficar ainda mais lento à medida que os computadores mais novos são introduzidos, para que ele tenha embutido à prova de futuro.
Consulte Como armazenar uma senha com segurança para obter mais informações.
fonte
Como uma resposta bastante geral a esse tipo de perguntas, sempre penso que você deve tentar ter um entendimento básico de qualquer coisa que esteja remotamente relacionada ao que você faz. É claro que você precisa de conhecimentos detalhados específicos sobre o que realmente está trabalhando. É muito difícil prever como uma determinada área evoluirá, o que estará "na moda" ou o que você precisará no futuro; portanto, manter uma ampla área de coisas das quais você pelo menos "ouviu falar" permanecerá muitas portas se abrem.
Quanto à minha experiência pessoal em programação na Web, achei noções básicas de criptografia assimétrica e essas coisas úteis para entender o que está acontecendo sob o capô. Eu poderia ter sobrevivido sem ele, mas devo dizer que gosto de criptografia e matemática; por que não?
fonte