ASP.NET Blog Engine – Parte 3
Hoje finalizamos a série de artigos sobre a criação de uma ferramenta de gerenciamento de blogs apresentando recursos para fortalecer a segurança do acesso aos blogs criados, através do uso de senhas criptografadas. Em se tratando de desenvolvimento de software o assunto de criptografia é complexo porque envolve vários conceitos como chaves públicas e privadas, hashing, armazenamento, etc.
Por outro lado, o .NET disponibiliza muitos recursos para facilitar este trabalho, então neste artigo alguns destes serão expostos para que o desenvolvedor consiga iniciar o desenvolvimento neste assunto e através do exemplo prático, conhecer uma forma de implementar criptografia de senhas. Continuando com o projeto dos artigos anteriores, este vai ser modificado para que ao ser criado um novo blog os dados do usuário e senha sejam criptografados.

Em que situação o tema é útil
O tema de segurança e criptografia está entre os mais importantes para desenvolvedores principalmente na Web, que é um ambiente hostil e sujeito a todo tipo de ataque. Com este artigo serão passados os passos iniciais para proteger senhas com o C# em uma situação real. Os aspectos e conceitos envolvidos requerem muita atenção e são um pouco complexos para quem está dando os primeiros passos. No artigo serão dados os primeiros passos e apresentados os caminhos a serem seguidos para um código e aplicação seguros.

Aplicações executadas no ambiente da Internet estão sujeitas a muitos problemas de segurança. Para dar alguns exemplos, é importante assegurar que os dados que são usados e manipulados por esta estejam seguros. Assim, informações como senhas, números de cartão de crédito e dados de login são fortes candidatos a serem alvo de ataques e os primeiros que precisam ser protegidos pelos desenvolvedores para evitar problemas para os seus usuários e dores de cabeça para ele próprio.

Esta proteção passa pela correta construção da aplicação para que os dados armazenados na base de dados não sejam acessados indevidamente, além de envolver aspectos como o tratamento de erros que possam ocorrer para que detalhes da implementação do código não sejam expostos, limitação de dados que podem ser digitados nos campos e também com um eficiente controle do acesso sendo feito através da definição de senhas fortes e usuários com acesso restritos, evitando ataques típicos como HTML, script e SQL injection. Estes ataques são feitos por usuários mal intencionados que digitam códigos deste tipo para tentar expor alguma vulnerabilidade da aplicação. Tais ataques podem ser facilmente bloqueados e envolvem medidas simples como delimitar o tamanho dos campos texto para aceitarem um número limitado de caracteres e a utilização de consultas SQL parametrizadas, ao invés de utilizar concatenação de strings

Tais medidas de proteção são apenas os primeiros passos que devem ser dados e são muito difundidos em sites e blogs sobre segurança. Neste artigo será tratado outro aspecto envolvido na tarefa de tornar a aplicação mais segura e confiável – a proteção dos dados através do uso do recurso de criptografia. Aqui serão exibidos os principais conceitos para que um programador com pouca ou nenhuma experiência sobre o assunto seja capaz de iniciar o conhecimento destes recursos e possa saber quais os próximos passos a ser dado.

Criptografia

Esta palavra é composta por dois termos:

· Cripto (kryptós em grego) que significa escondido

· Grafia (gráphein em grego) que significa escrita escondida ou escrita codificada. Em informática refere-se a ocultar uma informação alterando a sua grafia por outra escondida.

A criptografia não é um recurso novo e tem suas primeiras aplicações na troca de informação entre membros do exército que a usavam para enviar mensagens para soldados em campo, evitando desta forma que os dados caíssem no conhecimento do inimigo.

Uma das maneiras mais primitivas para realização desta tarefa é deslocar as letras em um número determinado de caracteres. Vamos dar um exemplo, considere uma palavra qualquer: INTERNET.

Consideremos então deslocar cada letra em dez caracteres. Se a letra Z for atingida, recomeçamos o alfabeto, logo, teremos como resultado da criptografia: RWCNAWNC. Onde:

I - R

N - W

T - C

E - N

R - A

N - W

E - N

T - C

Logicamente, este tipo de criptografia é muito rudimentar e fácil de ser quebrado, e por isso com o tempo o mesmo foi sendo aperfeiçoado. Considere neste exemplo, um algoritmo que apelidaremos de 10 x 7, onde para cada caractere em uma posição par usaremos um deslocamento de dez caracteres e para caracteres em posição ímpar um deslocamento de sete caracteres:

I - O

N - W

T - Z

E - N

R - X

N - W

E - K

T - C

Se você prestou atenção nestes exemplos e está acompanhando o raciocínio deve ter percebido que este tipo de tarefa possui duas características importantes. Primeiro: quanto mais complicada a regra de criptografia, mais tempo se levará para gerar o resultado codificado ou para retornar ao seu significado original. Segundo: este tipo de tarefa “pede” para ser feito por computador já que envolve cálculos matemáticos, como nestes dois exemplos, mesmo que bem rudimentares, precisamos realizar contas para se chegar ao valor criptografado.

Outro aspecto importante que pode ser percebido neste exemplo é que havia uma regra para gerar o código e consequentemente conhecer o seu significado original. No primeiro exemplo a regra era deslocar os caracteres dez posições. Assim, para conhecer o texto original, seria necessário retornar dez caracteres.

A regra pode ser comparada com um algoritmo de programação onde estão especificados os passos que precisam ser seguidos para gerar o texto codificado e decodificado. Logo, para criptografar textos em programação o primeiro aspecto a ser considerado é qual o algoritmo será usado. Existem vários algoritmos, cada um com um grau de complexidade maior ou menor.

No exemplo outro ponto que podemos considerar é que usamos um conjunto de caracteres – no caso o alfabeto – que nos gerou o texto codificado. Este conjunto de caracteres que foi usado para gerar o código pode ser chamado de chave. Simplificando, uma chave é um conjunto de caracteres que é usado para ajudar a compor o texto criptografado. Vamos mudar o algoritmo de criptografia: vamos atribuir valores numéricos para cada caractere correspondente a sua posição na palavra e outra coluna correspondente a posição da letra no alfabeto, assim, a palavra original fica da seguinte forma:

I - 0 - 08

N - 1 - 13

T - 2 - 19

E - 3 - 04

R - 4 - 17

N - 5 - 13

E - 6 - 04

T - 7 - 19

Vamos determinar que iremos escrever a palavra usando dois bytes (dois caracteres) representando a sua posição na palavra, desta forma teríamos: 08 13 19 04 17 13 04 19.

...
Quer ler esse conteúdo completo? Tenha acesso completo