BR1E - Novo projeto Open Source brasileiro

12 respostas
A

Pessoal, venho aqui hoje apresentar o BR1E, um novo projeto Open Source brasileiro no SorceForge.net

Este projeto é voltado para a criptografia, a diferença dele para os outros métodos de criptografia (MD5, SHA-1, etc.) é que ele é inquebrável. OK, vocês devem estar dando risada da minha cara por eu acreditar que nunca ninguém vai conseguir quebrar essa criptografia. Muitos devem estar pensando, se conseguiram quebrar o MD5 e os SHA-* (que por sinal são teses de doutorado) por que não vão quebrar o BR1E?

Simples: Porque não tem como :smiley: . Entenda por que no link: http://br1e.sourceforge.net/comofunciona.htm

Resumindo o projeto: ele faz a mesma coisa que o MD5, os SHA-* e todos os outros, a diferença é que é impossível saber o texto original. Ele também gera um hash de 512 bits (pelos cálculos, impossível de acontecer colisão (textos diferentes gerando o mesmo código))

Se vocês puderem dar umas testadas, meu amigo que criou o projeto disse que ia ser bem-vindo.

Atenção: é aconselhável, até o projeto sair do BETA, não usar a classe para fins profissionais, tendo em vista que ele ainda pode apresentar bugs.
Regras: O projeto só vai sair do BETA após 95% das pessoas que o testarem declararem que confiam nele. O mínimo exigido para começar a medir a confiança do software é 100 avaliações enviadas para o e-mail que está na sessão Contato do site (provavelmente não vai demorar muito, já tem umas 40 avaliações).

O tutorial que mostra como usar ele no Java e a classe que criptografa podem ser encontrados na sessão Downloads do site.

Recruta-se voluntários:
O projeto está precisando de ajuda, por enquanto só aquele meu amigo que ta fazendo e corrigindo o projeto. Se alguém tiver com vontade de ajudar no projeto, pode saber mais em:
http://br1e.sourceforge.net/contribuir.htm

Vlw galera, até a próxima! :wink:

12 Respostas

Luca

Olá

O link mostra logo no topo: Cessão: A Mágica

Isto é português cifrado?

[]s
Luca (só quero ajudar, o projeto não deve ser mostrado ao mundo com coisas deste tipo)

maquiavelbona

O que me impede de fazer um ataque de colisao dado que é um cifra e nao hash propriamente dito? Alias, eh uma cifra com poucas repeticoes, que consigo construir facilmente 2 textos iguais vindos de textos diferentes ( é um hash, estou pouco me danando o texto original, sabendo o tamanho do texto original posso fingir ter o texto original mas na verdade tenho uma cópia mal feita). Nao sou um bom cripto-analista mas acho que os coleguinhas doutores em criptologia tambem gastaram um tempo estudando uma maneira de fazer algoritmos rapido sem colocar valores pseudo-aleatorios.
Lembrando que seu algoritmo não é destrutivo, a informacao ainda está lá, com um pouco de esforco, o texto pode ser recuperado.

Até!

A

maquiavelbona:
O que me impede de fazer um ataque de colisao dado que é um cifra e nao hash propriamente dito? Alias, eh uma cifra com poucas repeticoes, que consigo construir facilmente 2 textos iguais vindos de textos diferentes ( é um hash, estou pouco me danando o texto original, sabendo o tamanho do texto original posso fingir ter o texto original mas na verdade tenho uma cópia mal feita). Nao sou um bom cripto-analista mas acho que os coleguinhas doutores em criptologia tambem gastaram um tempo estudando uma maneira de fazer algoritmos rapido sem colocar valores pseudo-aleatorios.
Lembrando que seu algoritmo não é destrutivo, a informacao ainda está lá, com um pouco de esforco, o texto pode ser recuperado.

Até!

Luca : vlw, qualquer ajuda, mesmo que crítica é bem vinda.

maquinavelbona:
Realmente, sabendo o tamanho do texto original daria pra ficar uns 9 dias de brute force, vc ia descobrir, mas como você vai saber o tamanho do texto original? Isso é um hash, não importa o tamanho do texto, sempre vai ser o mesmo tamanho de código.
Você poderia me dizer: mas se eu tentar reverter conforme os códigos utilizados para “cifrar” (que na verdade é só uma troca)?
te respondo: vai na página e tenda descrifrar aquela união de duas letras lá, você consegue? Só naquele exemplo eram possíveis de existir 6 letras diferentes, como você ia saber qual delas é a certa?

A, e outra coisa, quanto tempo você acha que levaria para fazer um ataque de colisão como você mesmo falou sabendo que são possíveis 102 caracteres diferentes e que o tamanho do hash é de 128 dígitos? (levando em conta que você também não saiba o tamanho do texto, pode ser que seja uma letra como pode ser um seja um texto.

Admita, é impossível você regredir um texto cifrado sabendo que determinado numeros de caracteres pode assumir várias letras e apenas 1 está certa (ou mais de uma) sem usar brute force. Se você descobrisse ao menos o tamanho entre cada letra representada, mas não é possível pois tem umas grandes como o D (que agora não lembro o código) e também tem algumas pequenas como o A = 1.

Tenta lá teus ataques de colisão, quando terminar pede para os teus netos me falarem se conseguiu ou não.

Realmente, tua idéia funcionaria perfeitamente, mas ia demorar…

vlw pelos questionamentos, são coisas assim que fazem um software melhorar!

maquiavelbona

Usando o mesmo fato que você coloca em A Magica, podemos pegar um exemplo mais simples: Com o texto codificado “[telefone removido]”, quantas possibilidades existiriam? Digamos, poucas, mesmo ignorando o tamanho do texto. Fazer um ataque de substituição nesse algoritmo não seria menos traumático do que fazer num baseado em SHA1 ( que seria algo, que nem é tão comprovado, em 2^52 operacoes) supondo chaves de tamanho semelhante.
Outra coisa que torna seu algoritmo razoavelmente fraco é a aparente escolha de valores aleatorios para as chaves, mas que por conter poucas sobreposicoes torna a previsão usando um algoritmo baseado em String Matching, bastante possível. Alias, usando um algorimo baseado no Boyer-Moore ou algum outro algoritmo tão eficiente quanto, daria para recuperar os trechos.
Um terceiro ponto que coloquei é que o algoritmo não é destrutivo, como o md5 e sha1. Torna ataques baseados em dicionarios possiveis.

Bem, acho que isso já dá para comecar. Não achei source mas pelo descompilado já deu para ter uma idéia.

Até!

[adendo]
Achei outras informacoes que procurava para ajudar:
http://en.wikipedia.org/wiki/Knuth–Morris–Pratt_algorithm (algoritmo KMP de busca de padroes)
http://en.wikipedia.org/wiki/String_searching_algorithm ( tem um resumo de como abusar do seu algoritmo sabendo que é um texto de finitas combinacoes)

[/adendo]

G

Já deu uma olhada nisso? http://en.wikipedia.org/wiki/NIST_hash_function_competition

A

maquiavelbona:
Usando o mesmo fato que você coloca em A Magica, podemos pegar um exemplo mais simples: Com o texto codificado “[telefone removido]”, quantas possibilidades existiriam? Digamos, poucas, mesmo ignorando o tamanho do texto. Fazer um ataque de substituição nesse algoritmo não seria menos traumático do que fazer num baseado em SHA1 ( que seria algo, que nem é tão comprovado, em 2^52 operacoes) supondo chaves de tamanho semelhante.
Outra coisa que torna seu algoritmo razoavelmente fraco é a aparente escolha de valores aleatorios para as chaves, mas que por conter poucas sobreposicoes torna a previsão usando um algoritmo baseado em String Matching, bastante possível. Alias, usando um algorimo baseado no Boyer-Moore ou algum outro algoritmo tão eficiente quanto, daria para recuperar os trechos.
Um terceiro ponto que coloquei é que o algoritmo não é destrutivo, como o md5 e sha1. Torna ataques baseados em dicionarios possiveis.

Bem, acho que isso já dá para comecar. Não achei source mas pelo descompilado já deu para ter uma idéia.

Até!

[adendo]
Achei outras informacoes que procurava para ajudar:
http://en.wikipedia.org/wiki/Knuth–Morris–Pratt_algorithm (algoritmo KMP de busca de padroes)
http://en.wikipedia.org/wiki/String_searching_algorithm ( tem um resumo de como abusar do seu algoritmo sabendo que é um texto de finitas combinacoes)

[/adendo]

tenho um analisador de código que eu mesmo criei e esse código que vc postou dá isso:

Caracteres encontrados no código “[telefone removido]”:
0: 5 vezes
a: 2 vezes
o: 5 vezes
v: 1 vez
A: 2 vezes
E: 2 vezes
O: 5 vezes
V: 3 vezes
Ó: 2 vezes

Não sei se eu entendi muito bem mas vc sugere que eu torne maior as substituições, ex:

em vez de C ser substituído por “46846846” ele deve ser substituído por “4984486418646546527852792572578927852”

é isso?

Se for, obrigado pelo ideia, realmente, é bem melhor se a possibilidade de caracteres for maior.

Se você quiser saber mais sobre o código, provavelmente ainda hoje vou estar disponibilizando para download o código completo da classe que faz a criptografia e também vou postar um jar que analisa o código pronto e diz quantas possibilidades de caracteres tem nele.

Vou dar uma olhada também nos teus links, vamos ver se eles ajudam.

vlw, até!

A

GradeBook:
Já deu uma olhada nisso? http://en.wikipedia.org/wiki/NIST_hash_function_competition

bah, quem sabe um dia o BR1E não vai estar alí na lista como um campeão ahsahsahsahs
Não custa nada sonhar :smiley:

maquiavelbona

alexcostars:

tenho um analisador de código que eu mesmo criei e esse código que vc postou dá isso:

Caracteres encontrados no código “[telefone removido]”:
0: 5 vezes
a: 2 vezes
o: 5 vezes
v: 1 vez
A: 2 vezes
E: 2 vezes
O: 5 vezes
V: 3 vezes
Ó: 2 vezes

Não sei se eu entendi muito bem mas vc sugere que eu torne maior as substituições, ex:

em vez de C ser substituído por “46846846” ele deve ser substituído por “4984486418646546527852792572578927852”

é isso?


Sim e nao. Mesmo que ele tenha uma quantidade muito maior de repeticoes de textos, ainda ha um numero finito de possibilidades(finite set of patterns), fazendo do algoritmo fraco. Olhando a conta que voce fez, convenhamos que forcar na mao todas as possibilidades ainda eh possivel, mesmo que voce me mande um texto de 20MB, ainda para um computador testar todas as possibilidades eh tranquilo.

Na pagina da wikipedia do NIST tem alguns algoritmos abertos a leitura, de uma olhada neles.

Ate!

A


Sim e nao. Mesmo que ele tenha uma quantidade muito maior de repeticoes de textos, ainda ha um numero finito de possibilidades(finite set of patterns), fazendo do algoritmo fraco. Olhando a conta que voce fez, convenhamos que forcar na mao todas as possibilidades ainda eh possivel, mesmo que voce me mande um texto de 20MB, ainda para um computador testar todas as possibilidades eh tranquilo.

Na pagina da wikipedia do NIST tem alguns algoritmos abertos a leitura, de uma olhada neles.

Ate!

Neste ponto eu concordo completamente como você, é como eu disse no post acima, se você sabe todas as letras possíveis você pode conseguir o texto original usando um brute force (mesmo que isso demore).
O que eu quero dizer é que você sempre terá que usar o brute force para tentar descobrir o texto original, você nunca poderá fazer, por exemplo, o que estes sites aqui fazem:
Crie uma chave MD5 neste site:


Agora vá neste outro site e cole a chave no campo de texto e clique em Submit
http://gdataonline.com/seekhash.php

Resumindo, você nunca poderá descobrir um cálculo que possa reverter qualquer código para o texto normal, você sempre terá que fazer tudo de novo com o brute force.

Não sou nenhum doutor em informática ou matemática (estou apenas no 3º ano do EM) mas acredito que é quase impossível (se não impossível) desenvolver uma criptografia como esta que crie possibilidades infinitas de caracteres sem ter um cálculo que possa ser revertido como é feito no site gdataonline.

Pelo jeito a única opção que me resta é tentar criar substituições gigantescas para dificultar a vida dos brute forces.

OBS: dei umas pesquisadas sobre o Algoritmo Knuth-Morris-Pratt, ta loko, bota coisa complicada :smiley: . Esses sim são inteligentes (na verdade não sei se são mesmo pois não entendi muito da teoria deles :? )

Vlw, at+

T

Criptografia não é questão de confiança de alguns leigos; talvez, com muito esforço, possa ser questão de confiança de alguns criptógrafos.
Se uma pessoa conseguir quebrar, não adianta nada 99,9% das pessoas confiarem nela.
Mesmo o algoritmo RSA (cuja força se baseia, na verdade, na crença de que um determinado problema matemático é “difícil”), está sujeito a muitos questionamentos, e é por isso que batalhões de criptógrafos tentam provar (ou desprovar) que o algoritmo é ou não seguro em um determinado grau de confiança.
Talvez fosse interessante submeter o algoritmo a algum criptógrafo profissional, para sabermos se ele realmente é razoável e se baseia em pressupostos sólidos. Não cheguei a ver como é que funciona - sou péssimo para ler código dos outros.

maquiavelbona

thingol:

Não cheguei a ver como é que funciona - sou péssimo para ler código dos outros.

Se baseia num dicionário de tamanho variado e com poucas repetições não aleatórias.

Três considerações sobre brute-force:

  • Não existe algoritmo a prova de brute-force, e sim algoritmo que em tempo cabível seja resistente;
  • Se você deixar uma máquina eternamente gerando hashs com strings sequencialmente, vai acabar gerando um dicionário, é o caso dos sites que você me retornou;
  • Brute-force se baseia num teorema matemático famoso, então não faz sentido ficar discutindo sobre esse método sendo que os criptoanalistas verificam por outras maneiras mais eficientes.

Infelizmente colega, seu algoritmo é fraco. Ah, sobre conjunto infinito de padrões, um exemplo é regex.

Até!

wbjava

Muito interessante,

vou baixar o projeto para testar.

flw!

Criado 14 de agosto de 2009
Ultima resposta 19 de ago. de 2009
Respostas 12
Participantes 6