Segurança

18 respostas
D

Como eu devo lidar com controle de senhas e algoritmos de criptografia para evitar o envio destes nos *.class .

Nos programas em delphi, eu gero esta parte em dll, como eu devo fazer ?

18 Respostas

D

Sendo mais especifico:

Se eu tenho um algoritmo que não pode ser um fonte aberto, como eu faço pra isso não ser decompilado ? Neste caso eu tenho um algoritmo de criptografia juntamente com a chave, como eu posso fazer isso ?

urubatan

você pode colocar a string criptografada em um arquivo properties ou em uma variavel do teu sistema e utilizara api de criptografia do java para descriptografa-la :slight_smile:

D

e o algoritmo, eu criptografo tambem ?

urubatan

utiliza um dos algoritmos padrões da API
tem DES, 3DES, …

D

Se eu usar criptografia sempre haverá uma chave para descriptografar (isso já é bem claro) e esta chave estará no código fonte, certo ?? Eu sempre criptografo e envio a chave para descriptografar … no meu caso, eu desenvolvo softwares para terceiros … eu tenho que enviar as classes onde se tem os comandos de login dos usuários … aí que tá o problema … eu não posso deixar estas classes abertas, se não o pessoal de sistema vai saber como quebrar as senhas dos usuários … e isso não pode acontecer de forma alguma … hoje , estes comandos estão dentro de dll, inclusive a chave … o que eu devo fazer ?

Bani

Nesse caso específico de controle de senha, não é tão necessário assim ter a chave para descriptografá-la…
Você pode fazer a comparação entre senhas já criptografas:
Ex.:
Você armazena a senha criptografada, e aí na hora que o usuário envia você criptografa essa informação, e compara ambos na versão criptografada.

D

Isso serve, é o que já utilizo …
Mas e senha para se fazer conexão ao banco de dados ?

O assunto está ficando complicado demais …
O que eu preciso é mais especifico ainda …

urubatan

eu acho que o que temos aqui é um pqeueno problema de entendimento :slight_smile:

de onde você tirou que por estas senhas hoje estarem em uma DLL elas estão seguras??

tente pegar o edit do dos e abrir a dll, você vai ver todas as strings que estão ali, da mesma maneira que o .class

o que você pode fazer para isto é o seguinte,
as senhas do banco de dados, pede para o usuário por exemplo, isto eu acho uma pessima ideia estar hardcoded na aplicação :slight_smile:

mesmo por que até em um .exe com o edit do dos você ve todas as trings dele :slight_smile:

as senhas dos usuários, em vez de criptografia, utilize um hash md5 por exemplo que é irreversivel, ai em vez de descompacta-las, você compara as senhas criptografadas como sugeriu a Bani,

e se você precisa mesmo guardar a senha do banco de dados, a unica maneira menos insegura que conheço é tanto em java quanto em uma linguagem que vai gerar um .exe (sei que ta ficando chato, e que eu ja disse isto, mas as strings ficam abertas em um .exe também :slight_smile:

não guardar a senha em uma string, e sim em um array com um monte de lixo no meio, e se possivel ja criptografado :slight_smile:

por exemplo.

byte pwd = {0,20, … }

onde tem um monte de lixo entre as letras, que ja vai ter mais lixo ainda por que na maioria das linguagens um array destes é guardado no executavel como inteiros, isto é, quatro bytes pelo menos para cada byte/caracter da tua palavra

ai depois você passa isto para uma função, por exemplo

string password = descramble(pwd);

e esta função conhece os padrões que você utilizou neste array para guardar a senha :slight_smile:

ai não existe uma chave criptografica guardada no .class .exe .dll ou o que for, só um algoritmo inventado na hora para guardar uma seguencia de inteiros/bytes que estara perdida em algum lugar no seu executavel, .class ou dll que como eu ja disse, neste caso não faz a menor diferença :slight_smile:

D

isso eu faço dentro da dll a senha criptografada e o algoritmo para tazer a senha … mas se for em .class , eu posso decompilar e tazer o algoritmo e , com o algoritmo eu trago a senha …
to achando impossivel de implementar com um minimo de segurança …

urubatan

tu ja descompilou algum .class??
ele fica simplesmente ininteligivel,
é quase o mesmo que abrir uma dll ou um .exe com um disassembler que gere o codigo novamente em c :slight_smile:
fica pouca coisa mais claro que isto :slight_smile:

Bani

Sobre descompilar o class e ele ficar initeligível eu discordo…
Às vezes quando estou com preguiça de pegar o source e quero só dar uma olhadinha rápida no código, simplesmente descompilo o class e fica ótimo! Só faltam os comentários mesmo…
Mas se você usar um obfuscator no class já fica bem mais difícil de descompilar mesmo.

urubatan

:slight_smile:
ou eu estava utilizando o descompilador errado ou então tinham utilizado um obfuscator nos poucos .class que ja descompilei até hoje :slight_smile:

qual descompilador você utiliza??

Bani

Eu tenho 2, o JAD, que é um bem simplesinho, e o DJ Java Decompiler, que já tem uma interface gráfica e vários recursos.
Mas ambos tem produzido bons resultados. Normalmente só um caracter ou outro sai errado.

Adler_Medrado

DEUS SEJA LOUVADO!

Esse DJ aí só dá uma mexida na estrutura do código, coloca umas coisas pra lá, outras pra cá e etc. Mas quem sabe java entende tudo que está ali dentro.

C

Galera esta discussão nos informou muito bem sobre o problema de segurança mas após isso eu pergunto tem algo freeware que pelo menos ajuda a proteger o código?

cv1

Voce pode confiar que o seu sistema eh tao seguro quanto o codigo dele. Mesmo pq, codigo pode ser descompilado, codigo pode ser alterado em run-time, codigo pode ser zoado de todo tipo de jeito.

Algoritmos bons de criptografia (daqueles que nego passa uma década inventando) não :wink:

Hempx

Acho que java tem KeyStore justamente para guarda secretkey…

OutLaw

Solução para isso é apenas uma open-soucer :lol:

Criado 8 de janeiro de 2003
Ultima resposta 9 de jun. de 2004
Respostas 18
Participantes 8