Sistema de login criptografado em C [RESOLVIDO]

1. Sistema de login criptografado em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/06/2018 - 18:12h

Olá, ultimamente andei trabalhando em um simples sistema de login em C usando como banco de dados o MySQL, porém pesquisando um poco mais percebi que meu código, apesar de funcional, tinha muitas falhas. Essas falhas são as seguintes:

-> É suscetível a 'SQL Injection'
-> É suscetível a um ataque 'men in the middle' ('homem do meio'), pois a senha e o nome de usuário/email passavam a "seco", ou seja, sem estarem criptografadas antes de serem enviadas para o servidor.

Em relação ao código ser suscetível a uma injeção de código mysql malicioso eu diria que é facil de resolver, mas a parte difícel para mim seria a de implementar um sistema de criptografia, pois eu não sei como fazer isso :(

As únicas coisas que sei sobre criar um sistema de login seguro é que as senhas de usúario que estão no banco de dados devem está criptografadas e é ai que entra o 'X' da questão: Não faço a minima ideia de que tipo de criptografia vou usar nessas senhas e muito menos sei como será o processo de descriptografia para realizar a verificação da senha (se está correta ou não).

Então...alguém poderia me dar uma luz e me dizer como tudo isso funciona? Que API eu uso no C para realizar a encriptação ou desencriptação de uma senha ou nome de usúario?

OBS: Já sei o básico sobre criptografia, porém não sei como implementar as tecnicas em um código C.




  


2. Re: Sistema de login criptografado em C [RESOLVIDO]

Diego Mendes Rodrigues
diegomrodrigues

(usa Ubuntu)

Enviado em 03/06/2018 - 19:19h

Opa!

Então, existem vários pontos que você pode pensar se estiver pensando em segurança da informação.

Um deles, é que se o usuário e a senha de acesso ao MySQL (ou qualquer SGBD) estiverem dentro do seu código fonte em C, sendo que depois você compila seu programa, gerando um executável, independente de como estiver sua comunicação com o banco de dados, qualquer pessoa que tenha seu executável pode 'descompilar' o programa e ter os dados de acesso. Pensando nisso, uma solução é não colocar a senha disponível em lugar algum que possa ser acessível pelas pessoas, como usando um acesso integrado com o sistema operacional, ou integrado com o banco de dados (alguém vai ter que digitar uma senha), ou tem que deixar a aplicação em local que as pessoas não acessam, ou ainda deve fazer uma aplicação servidora acessível sem senha e ela acessa o banco de dados (claro que ela terá que controlar o acesso por conta própria).

Quanto ao armazenamento de senhas dos usuários no MySQL, você pode utilizar o MD5, AES, dentre outras criptografias (ou hash).

INSERT INTO usuarios (login, senha) VALUES ('usuario_1', MD5('abc123'));

INSERT INTO usuarios (login, senha) VALUES ('usuario_2', AES_ENCRYPT('abc123', 'chave'));

SELECT nome, CAST(AES_DECRYPT(senha,'Chave_para_descriptografar') as char) from pessoa WHERE id ='2';

Abraço,
Diego M. Rodrigues


3. Re: Sistema de login criptografado em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/06/2018 - 23:28h

Você está certo de não querer que a senha do usuário trafegue pela rede. Idealmente, não deveria trafegar nem com criptografia; sem, então, nem se fale!

Para algo simples, você pode utilizar a técnica de challenge/response (servidor envia dados aleatórios, que o cliente criptografa ou assina digitalmente usando a senha do usuário como chave, devolvendo tal resultado ao servidor, que verifica se a resposta bate com o esperado). O servidor terá de continuar guardando uma cópia da senha do usuário, mas tal senha pode ser armazenada no banco de dados de uma forma criptografada (e o próprio banco deve armazená-la num dispositivo com criptografia). Para que a senha não precise nem mesmo trafegar entre o SGBD e a aplicação, uma parte da verificação de C/R poderia até ser feita por uma stored procedure no banco.

Se você quiser sofisticar um pouco mais, procure estudar como funciona o Kerberos 5.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts