Algorítimo de criptografia... qual usar?

Delphi

02/05/2004

Amigos,

Há algum tempo venho pensando em adotar algumas práticas mais profissionais de segurança sobre os dados das minhas aplicações...

Procurei por componentes de criptografia e consegui alguns, mas não entendo nada (no sentido literal da palavra) sobre o assunto e o componente que me parece ser o melhor é capaz de trabalhar com diversos algorítimos e não faço idéia de qual eh o melhor...

Estes são os algorítimos disponíveis neste componente (Free com Source) :

Vcs poderiam ajudar-me nesta escolha ou indicar onde encontro material sobre o assunto para que eu possa estudar e optar por um deles?

Desde já agradeço.
[]´s
Vinicius.


Vinicius2k

Vinicius2k

Curtidas 0

Respostas

Cebikyn

Cebikyn

02/05/2004

Depende da segurança que vc quer ter... o Rijndael foi adotado como padrão de criptografia avançada (Advanced Encryption Standard - AES), e é bem eficiente, esse algoritmo belga é o mesmo do Winzip 9.0. O Blowfish é rápido e forte, foi criado por Bruce Schneier, um especialista no assunto bastante conceituado. O 3 DES é um algoritmo do governo americano que foi testado durante anos e não apresentou falhas, consiste em usar um mesmo algoritmo (DES) três vezes com chaves diferentes.

A segunda palheta de componentes aparentemente contém apenas componentes para estrair o Hash de arquivos, como o MD4, MD5 e SHA, o Hash serve para identificar se o arquivo (ou mesmo um texto) sofreu alguma modificação (no caso de textos, é como são comparadas as senhas, afinal um programa decente não compara a senha digitada com a armazenada, ele armazena o Hash, ou checksum, e compara ele com o hash do que foi digitado). E é claro que não é possível gerar o arquivo ou texto a partir do Hash.

Os demais algoritmos eu não conheço, mas posso assegurar que usando Rijndael ou blowfish seus arquivos estarão seguros.


GOSTEI 0
Maxadens

Maxadens

02/05/2004

Me interessei pelos componentes. sera que poderia passar o link de onde adquiriu estes componentes?

Obrigado!

Ronaldo


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Obrigado Cebis ! Estou estudando agora como utilizá-los.
Vc poderia me explicar apenas mais duas coisas :
[list:0a775ae649][*:0a775ae649]o tamanho do bloco e tamanho máximo da chave influenciam diretamente sobre a velocidade de processamento do algorítimo e na segurança ? por exemplo o Blowfish tem BlockSize de 64 e MaxKeySize de 448, já o Rijndael tem BlockSize de 128 e MaxKeySize de 256...

[*:0a775ae649]na mesma linha de raciocício da questão anterior, porém sobre os hashes... o tamanho do hash influencia? o HashSize do MD5 é 128, já o do SHA varia de 160 a 512... de forma leiga suspeito que o SHA seja ´melhor´, digamos assim, do que o MD5, mas me parece que o MD5 é mais utilizado...[/list:u:0a775ae649]
Mais uma vez obrigado.

T+


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Me interessei pelos componentes. sera que poderia passar o link de onde adquiriu estes componentes?


Claro ! http://www.torry.net/vcl/security/strong/dcpcrypt.zip

T+


GOSTEI 0
Cebikyn

Cebikyn

02/05/2004

...o tamanho do bloco e tamanho máximo da chave influenciam diretamente sobre a velocidade de processamento do algorítimo e na segurança ? por exemplo o Blowfish tem BlockSize de 64 e MaxKeySize de 448, já o Rijndael tem BlockSize de 128 e MaxKeySize de 256...


O tamanho do bloco influencia na velocidade, quanto maior o bloco, mais memória ele vai consumir e mais rápido vai ser o processamento (e não sei se acontece nos seus componentes, mas em algumas implementações, pode ocorrer de alguns bytes finais do arquivo não serem criptografados por não formarem um bloco completo). A chave também influencia na segurança (maior chave -> maior segurança). Mas vc não precisa se preocupar muito com a velocidade, que na maioria dos algoritmos atuais é muito boa.

...na mesma linha de raciocício da questão anterior, porém sobre os hashes... o tamanho do hash influencia? o HashSize do MD5 é 128, já o do SHA varia de 160 a 512... de forma leiga suspeito que o SHA seja ´melhor´, digamos assim, do que o MD5, mas me parece que o MD5 é mais utilizado...


Influencia, mas é uma coisa com que vc não deve se preocupar, a chance de vc achar dois arquivos com o mesmo Hash no MD5 é de 1 em 2^64 (dois elevado a 64, algo da ordem de quintilhões), já a de achar um arquivo que tenha um certo hash é de 1 em 2^128 (passa de 30 zeros...). E o SHA é uma variação melhorada do MD4, e algumas pessoas não confiam muito nele (não há evidencias de que não se possa confiar), por isso o MD5 é o mais popular. E realmente o hash maior dá uma segurança maior.


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Mais uma vez, obrigado Cebis !
Precisando, pode contar ! :wink:
T+


GOSTEI 0
Edukobra

Edukobra

02/05/2004

Pessoal, baixei os componentes, mas não consegui usa-los.
Alguém poderia me dizer um exemplo simples de como criptografar por exemplo um edit, ou dbedit ?
Obrigado.


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Bem, tbm estou estudando sua utilização e melhor do que me arriscar a lhe dar um exemplo é sugerir-lhe que faça como eu...
Leia atentamente a documentação (pasta docs no diretorio de instalação) que tbm conta com alguns exemplos de utilização.
T+


GOSTEI 0
Edukobra

Edukobra

02/05/2004

Vi os exemplos e quando fui rodar percebi alguns bugs, como não entendo muito bem peço a ajuda de vcs.
Vcs detectaram algum bug ?


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Amigos,

Passei esta semana fazendo downloads e testando alguns componentes de cryptografia, basicamente, todos os que estão no Torry e mais alguns...

Acredito ter chegado à conclusão de qual componente usar : LockBox ( http://www.torry.net/vcl/security/strong/tplockbox.zip ) me parece um projeto compentente e estável (versão 2.07 e OpenSource), e não faz os ´milhares´ de algorítimos que o DCPCrypt (que foi objeto deste tópico) faz, mas faz o sufiente : Hashes MD5, SHA-1, LMD e ELF , e os Ciphers DES, 3DES, Blowfish, Rijndael e RSA... menos opções e mais bem feitas, na minha opinião.

É muito simples de utilizar e muito rápido. Instala sem problemas em todos os Delphi, C++ e Kylix (ao contrário do DCPCrypt que gera vários warnings na instalação no Delphi 7) e é VCL/CLX. Acho que peca na documentação, mas os exemplos são bem claros.

Sobre os bugs encontrados pelo colega edukobra no DCPCrypt, encontrei vários e desisti dele logo no início da semana.

Espero ter contribuído com os colegas que pretendem utilizar alguma forma de cryptografia.

Abraços.
Vinicius


GOSTEI 0
Cebikyn

Cebikyn

02/05/2004

Acredito ter chegado à conclusão de qual componente usar : LockBox ( http://www.torry.net/vcl/security/strong/tplockbox.zip ) me parece um projeto compentente e estável (versão 2.07 e OpenSource)


Eu uso esse, mas ele não foi sempre Open Source, ele começou como um projeto comercial, da Turbo Power (que fechou...), daí virou Open Source, o site onde pode ser obtida a última versão (por enquanto ainda é a 2.07) e também onde estão os fóruns dos componentes é: http://sourceforge.net/projects/tplockbox


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

o site onde pode ser obtida a última versão (por enquanto ainda é a 2.07) e também onde estão os fóruns dos componentes é: http://sourceforge.net/projects/tplockbox

Obrigado por mais essa dica Cebis ! com ela percebi q falei besteira aqui...
Acho que peca na documentação, mas os exemplos são bem claros.
Ele tem uma documentação excelente...

T+


GOSTEI 0
Anderson_blumenau

Anderson_blumenau

02/05/2004

aí cebis, tens algum material bom sobre o assunto pra me disponibilzar?


GOSTEI 0
Elias Jr

Elias Jr

02/05/2004

Saudações gente,
olá Vinicius, também estou partindo pra criptografia em minhas aplicações e, assim como você, estou utilizando a paleta LockBox. Estou realizando testes com os componentes MD5 e RSA (achei o RSA melhor mas é mais complicado). O Hash MD5 é simples, só estou com problemas para fazer o reconhecimento das senhas (estou testando 20 senhas de tamanhos e caracteres variados numa tabela). Quanto à algum conteúdo, achei alguns exemplos legais de MD5 e RSA no site do ActiveDelphi. Basta dar uma procurada por lá. Espero poder contar com vocês pra tirar qualquer dúvida e ajudar no que for preciso.


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Tópico bem antigo esse... :D

Olá Elias, eu estou trabalhando, ainda com o LockBox, com Hash MD5 e Cipher Rijndael...
Na verdade, pesquisei um pouco na net e fiquei com a indicação do Cebis pq não tive tempo de estudar detalhadamente as outras opções...

Quais os problemas que vc está tendo com o Hash MD5 ? Talvez possamos ajudá-lo...

T+


GOSTEI 0
Elias Jr

Elias Jr

02/05/2004

Olá Vinicius,
meu único problema é que naum estou conseguindo fazer a verificação do hash da senha digitada pelo usuário. Após cadastrar o usuário com a senha já criptografada, o usuário tenta logar-se no sistema mas naum consigo fazer esta confirmação. Você poderia me ajudar nisso? Valeu cara.


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Elias,

Vc precisa entender bem as diferenças... um Hash não é um Cipher...
O Hash obtido de uma string, ou arquivo, etc, não pode ser desfeito : o texto nunca volta ao original.

Se vc usou um mecanismo de para hashear a senha cadastrada e gravá-la no banco de dados, vc precisa usar o mesmo mecanismo para hashear o a senha informada e comparar os dois hashes : o gravado e o informado...

É um tipo de validação direfente de quando se usa criptografia...

Não é isso que vc está se confundindo ?

T+


GOSTEI 0
Elias Jr

Elias Jr

02/05/2004

Elias, Vc precisa entender bem as diferenças... um Hash não é um Cipher... O Hash obtido de uma string, ou arquivo, etc, não pode ser desfeito : o texto nunca volta ao original. Se vc usou um mecanismo de para hashear a senha cadastrada e gravá-la no banco de dados, vc precisa usar o mesmo mecanismo para hashear o a senha informada e comparar os dois hashes : o gravado e o informado... É um tipo de validação direfente de quando se usa criptografia... Não é isso que vc está se confundindo ? T+


Olá cara,
compreendo o que vc falou e é justamente isso que eu estou fazendo...primeiro dou um hash na senha ao cadastrar o usuário e depois pego a string digitada no edit e dou outro hash pra fazer a comparação. Vai aí o código (implementado de um exemplo que peguei):
password := MD5Hash(edsenha.text);
   if ds.dataset.locate(´nome´,nome, []) = false then
   begin
     showmessage(´Registro não encontrado´);
     exit;
   end
   else begin
     if password = table.FieldByName(´senha´).asstring then
     begin
       showmessage(´Senha OK!´);
       exit;
     end
     else
       showmessage(´Senha Errada!´);
       exit;
     end;

Este é só um testezinho que fiz...


GOSTEI 0
Gandalf.nho

Gandalf.nho

02/05/2004

Eu uso atualmente um pacote chamado [b:6ef7167d50]Delphi Encryption Compendium Part I[/b:6ef7167d50] que usa apenas um componente para vários tipos de padrões de criptografia (atualmente 40 Ciphers e 23 Hashs) e é freeware. Um dos lugares onde ele pode ser encontrado é no Torry´s [url]http://www.torry.net/vcl/security/strong/chipher.zip[/url]
Ele vem com um demo bem exemplificado.


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Elias,

Exiba num ShowMessage, por exemplo, o hash da senha digitada e o conteúdo salvo no BD...
Meu palpite é que o texto que originou o hash salvo é diferente do texto que origina o hash digitado...
Propriedades Charcase dos TEdits originais e digitado, por exemplo, pode fazer os hashs serem completamente diferentes...
Outra possibilidade é que vc tenha no BD dois nomes iguais, com senhas diferentes... o locate encontrará o primeiro, então a comparação pode não ser bem sucedida, dependendo da senha digitada...

Se não for isso, esta função q vc está utilizando (MD5Hash) eu nunca utilizei... e não sei se seria sua, mas esta é a minha função para hashear strings com o MD5, baseada nas units do LockBox :
function HashMD5Str(S: String): String;
var MD5Digest: TMD5Digest;
begin
  StringHashMD5(MD5Digest, S);
  Result:= BufferToHex(MD5Digest, SizeOf(MD5Digest));
end;


T+


GOSTEI 0
Cebikyn

Cebikyn

02/05/2004

aí cebis, tens algum material bom sobre o assunto pra me disponibilzar?


Sim. Vc pode visitar a seção de criptografia do meu LinkBlog, onde vc encontrará os links com as minhas fontes mais recentes:

http://www.linkblog.com.br/usuarios/cebikyn/criptografia

Ou ainda o meu site sobre criptografia (em construção...):

http://paginas.terra.com.br/informatica/cebikyn/seguranca/index.htm

Precisando de ajuda é só pedir!


GOSTEI 0
Motta

Motta

02/05/2004

Gostei deste livro , uma boa literatura inicial

SEGURANCA DE DADOS COM CRIPTOGRAFIA METODOS E ALGORITMOS
DANIEL BALPARDA DE CARVALHO

ISBN: 8586846384
Editora: BOOK EXPRESS
Número de páginas: 252
Encadernação: Brochura
Lançamento: 11/04/2000

http://www.siciliano.com.br/livro.asp?orn=LSE&Tipo=2&ID=143253


GOSTEI 0
Cebikyn

Cebikyn

02/05/2004

Apenas um aviso sobre os Hashes MD:

O Hash MD4 foi quebrado, e como o MD5 é da mesma família, deve ser considerado inseguro. Como alternativa, deve-se usar SHA-1 e RipeMD-160. Sendo que o último gera hashes de 160bits, contra os 128 do MD5.

Nota: 160 bits quer dizer que existem 2^160 (dois elevado à 160ª potência) hashes diferentes. Por analogia, 128 bits representam 2^128 hashes diferentes. Não há com o q se preocupar, esses números sãoo bem grandes...


GOSTEI 0
Delphi32

Delphi32

02/05/2004

Agora eu fiquei com uma dúvida:

Imagine que eu queira gravar numa tabela usuários do meu banco o nome de usuário e senha criptografado. O que seria melhor para isso? Usar um cypher ou um Hash?

Até!


GOSTEI 0
Delphi32

Delphi32

02/05/2004

sobe...


GOSTEI 0
Vinicius2k

Vinicius2k

02/05/2004

Para o nome do usuário, particularmente, não vejo necessidade... mas se quiser use um cypher, pq um hash não é recuperável, logo, vc não vai poder obter uma lista de usuários...
Para a senha use um hash, sem dúvida...

T+


GOSTEI 0
Delphi32

Delphi32

02/05/2004

Só mais uma dúvida: Em qual pacote encontro o RipeMD-160?


GOSTEI 0
Delphi32

Delphi32

02/05/2004

ops... encontrei no DCPCrypt...

Valeu!


GOSTEI 0
Delphi32

Delphi32

02/05/2004

err... só tem um problema... aparentemente com o RipeMD-160 não é possível ´hashear´ uma string. Ou é?


GOSTEI 0
Bruno Belchior

Bruno Belchior

02/05/2004

tem um ótimo site sobre o assunto que retrata toda a lógica [url]www.numaboa.com[/url]


GOSTEI 0
Anderson_blumenau

Anderson_blumenau

02/05/2004

muito bom


GOSTEI 0
Alessandro

Alessandro

02/05/2004

Olá, sei que o post já é antigo, mas se desejar códigos para referência em C# deixo aqui o link de um repositório meu no GitHub: https://github.com/alecgn/crypthash
O repositório/projeto basicamente possui um Console App feito em .NET Core e uma DLL feita em .NET Standard, com suporte a criptografia simétrica autenticada (AES 256 bits em modo CBC com autenticação HMACSHA256) e hash (MD5, SHA1, SHA256, SHA512 e BCrypt), para textos e arquivos, inclusive com funcionalidade de verificação de integridade/checksum de arquivos e textos. Lá no README do repositório tem links para baixar já compilado em modo auto-contido, ou seja, executa sem a necessidade de ter o framework instalado... Abraços!
GOSTEI 0
Alessandro

Alessandro

02/05/2004

Olá, sei que o post já é antigo, mas se desejar códigos para referência em C# deixo aqui o link de um repositório meu no GitHub: https://github.com/alecgn/crypthash
O repositório/projeto basicamente possui um Console App feito em .NET Core e uma DLL feita em .NET Standard, com suporte a criptografia simétrica autenticada (AES 256 bits em modo CBC com autenticação HMACSHA256) e hash (MD5, SHA1, SHA256, SHA512 e BCrypt), para textos e arquivos, inclusive com funcionalidade de verificação de integridade/checksum de arquivos e textos. Lá no README do repositório tem links para baixar já compilado em modo auto-contido, ou seja, executa sem a necessidade de ter o framework instalado... Abraços!
GOSTEI 0
POSTAR