O blog do Ajax Online está, digamos, online. Só falta eu aparecer por lá. O Tiago Neves deixou, recentemente, o artigo “Criptografia, um bicho de mais de 128 Kabeças” (link quebrado…), e de lá saiu a idéia para este post.
Importância da Criptografia
A Criptografia, “arte” de “esconder” dados, foi criada há muito tempo atrás. Uma das primeiras utilização de criptografia foi pelos hebreus, a Cifra de Atbash. Ela consistia em trocar a primeira letra do alfabeto pela última, a segunda pela penúltima e assim por diante. Para nós, óbvio. Para eles, útil e avançado.
A criptografia usada hoje em dia é muito mais sofisticada que essa. Ela pode usar várias técnicas diferentes, separadas ou juntas (criptografar um texto criptografado usando outra técnica pode ajudar).
Pense na seguinte situação (clichê do Tiago): você tem seus dados navegando pela rede, rumo ao seu destino. Então esses dados são abordados por um estranho, um lobo-mau da história, que os intercepta. Se esses dados forem confidenciais ou importantes, temos um problema.
Portanto, aí fica evidente a necessidade de criptografia.
Onde Utilizar
Em certas aplicações, a criptografia não é necessária. Enquetes, sugestão de texto, leitores de RSS ou qualquer coisa parecida, com criptografia embutida, ficarão mais lentos sem necessidade alguma. Qualquer um pode (e talvez deve) ver esses dados.
Caso você trabalhe com senhas (qualquer uma), ou dados pessoais de outras pessoas, a criptografia deve entrar em cena.
Obviamente, devemos enviar e receber os dados criptografados, e armazena-los assim também. Assim sendo, você precisa de um encriptador e um desencriptador em ambos os lados da aplicação: servidor e cliente. Eles precisam funcionar igualmente, então eles precisam ser portáveis.
Qual Utilizar
Como existem hackers por aí, quanto melhor for a sua criptografia, mais seguros estão seus dados. O problema é que o encriptador/desencriptador deve estar no servidor e cliente.
Para dados menos “críticos”, você pode criar uma criptografia que se adapte as suas necessidades. Como diz o Tiago, algo de pessoal sempre ajuda.
Fico devendo um script, não sou bom nisso. Pretendo implantar algo assim no A-FW. Assim que estiver OK disponibilizo o código.
Algumas Controvérsias
Peraí, mas se vamos encriptar/desencriptar no cliente, precisaremos da chave, certo? Então essa chave deve estar no código que está no cliente, ainda certo? Pense bem… Além disso, o código do encriptador está no cliente também, o que nos traz mais um problema.
Assim sendo, qualquer hacker que saiba o que é JavaScript (aliás, nem precisa ser hacker, qualquer um de nós mesmo) poderia descobrir o código. Isso não é bom não!
Por esse motivo, a criptografia deve ser bem pensada. Algo como envio da chave por Ajax, verificando o referer (foi o máximo que consegui). Se o referer estiver errado, nada de chave, ou uma chave errada! Chaves grandes, criptografias rápidas, mas complexas. Há muito a se pensar. Boa sorte!