Mostrando postagens com marcador algoritmo. Mostrar todas as postagens
Mostrando postagens com marcador algoritmo. Mostrar todas as postagens

quinta-feira, 16 de abril de 2015

Advanced Encryption Standard - AES

Seguindo então na nossa cronologia, em 1997 o NIST iniciou o processo de substituição do DES, e abriu novamente um concurso para avaliar as propostas de novos algoritmos. Concurso este similar ao que o DES entrou como algoritmo padrão.

No início do concurso foram recebidas 21 propostas, mas para final 5 foram selecionadas. Os 5 algoritmos classificados para a final são:

  • Rijndael
  • MARS
  • RC6
  • Serpent
  • Twofish
Alguns desses algoritmos podem ser vistos hoje em dia. Não são o algoritmo padrão nacional dos Estados Unidos, mas ainda são fortes e usáveis hoje em dia. O famoso TrueCrypt e seu fork não autorizado VeraCrypt, utilizam os algoritmos Serpent e Twofish na criptografia de dados.

Como o título deste texto indica, o ganhador foi o AES, que se chamava Rijndael na época que o projeto foi submetido.

Esta seleção levou alguns anos para ser concluída, apenas em 2001 que o AES foi escolhido como padrão.

Algumas características que podemos ressaltar no algoritmo é o comprimento da chave que é grande e pode ser variado (128/192/156 bits), e que não utilizada a estrutura da cifra de Feistel.

Veja abaixo uma representação gráfica do AES, similar as usadas como demonstração do algoritmo DES nos posts anteriores dessa série:


Só de olhar já da pra ver que ele é um pouco mais complexo né?


AES Simplificado

Sim! O AES também tem uma versão simplificada. Mas dessa vez não vou me aprofundar como foi feito no DES/S-DES. Acredito que não tenha necessidade, as operações mudaram, mas o sentido da coisa continua o mesmo. Caso você tenha interesse em brincar com o AES ou o S-AES você já vai ter uma noção.

Vamos ver aqui apenas alguns detalhes superficiais do S-AES.

Este algoritmo foi desenvolvido por um professor da Universidade de Santa Clara, com o auxílio de seus alunos. Seu objetivo é similar ao S-DES, ou seja, apenas para uso educacional.

Veja abaixo a representação do S-AES e compare com a versão S-DES e com a versão AES:


O algoritmo S-AES utiliza chaves e blocos de texto de 16 bits.

Efeito Avalanche

O efeito avalanche também está presente no algoritmo AES. Do mesmo modo que no DES, o efeito avalanche acontece quando uma modificação em 1 bit afeta completamente a saída do algoritmo, e quanto mais rodadas maior é o impacto da mutação.


Possivelmente em um próximo texto eu volte a falar um pouco mais sobre AES e criptografia simétrica, mas não se preocupe, nada tão complexo e aprofundado como o exemplo do S-DES! ;)

Eu fico hoje por aqui e aguardo você novamente para a próxima etapa desta série!

quinta-feira, 9 de abril de 2015

Criptografando com o S-DES

Seguindo com a série de criptografia, neste post vamos criptografar uma mensagem em texto claro com o algoritmo S-DES. No testo anterior vimos que o algoritmo necessita de subchaves, e vimos também o algoritmo de como são geradas.

Neste texto vamos ver como funciona a função complexa (fK) do algoritmo S-DES, e no próximo post, vamos fazer o processo completo da criptografia pelo algoritmo.

A função complexa tanto do DES quanto do S-DES é similar, a diferença está no número de rodadas. Veja abaixo o conteúdo, de uma forma simplificada, da função complexa.


As operações são similares as que vimos no algoritmo de geração de subchaves, então não tem necessidade de explicar novamente cada uma das operações.

O algoritmo representado na imagem é o DES, que possui 16 rodadas, chaves de 56 bits e blocos de 64 bits. Sabemos que no caso do S-DES temos apenas 2 rodadas. Caso não se lembra confira a imagem abaixo do S-DES:



Pode-se ver no algoritmo que a primeira rodada é onde a chave K1 entra, e a segunda rodada onde a chave K2 entra.

Se expandirmos a função fK temos as seguintes operações:



Na imagem acima podemos ver a Permutação Inicial (IP), quais operações compõe o fK (E/P, S0, S1, P4 e XOR),  o funcionamento do SW, uma segunda função fK com a segunda chave, e por fim a Permutação Final (IP -1).

As caixas E/P, S0, S1 e P4 funcionam do mesmo modo que as caixas P10, P8 e LS-1 do texto anterior.

Veja abaixo a organização das caixas:




As caixas E/P e P4 são simples, como as outras já apresentadas. Basta substituir a entrada de acordo com a ordem apresentada na imagem acima. Por exemplo, se recebermos como entrada na caixa E/P o número (binário) "1101", na saída teremos os bits dispostos de acordo com a imagem do E/P. Neste caso seguiremos a ordem 4º bit, 1º bit, 2º bit, 3º bit, 2º bit, 3º bit, 4º bit e por fim o 1º bit novamente. Neste caso a saída seria "11101011".

Já no caso da caixa S0 e S1, comumente chamadas de Caixas-S, são um pouco diferentes. A entrada da caixa-S é sempre 4 bits. O primeiro e o último bit representam a linha na matriz e o segundo e o terceiro bit representam a coluna da matriz. O resultado das coordenadas em decimal representa a saída da caixa-S, que deve ser convertido em binário.

Vamos a um exemplo. Vou usar aqui como entrada da caixa S0 o número "1010". Sabendo que o primeiro e quarto bit formam a linha (1º = 1, 4º = 0, ou seja, 10 binário = 2 decimal), e o segundo e terceiro formam a coluna (2º = 0, 3º = 1, ou seja, 01 binário = 1 decimal), temos as coordenadas da matriz.

O valor na posição (2, 1) é 2, ou seja, a saída da caixa S0 neste exemplo é 2 decimal = 10 binário.

Lembre-se que as linhas e colunas começam em 0 e não 1. As 4 linhas/colunas são 0, 1, 2 e 3.

Seguindo com o algoritmo, após a permutação inicial (P1) de 8 bits, os 8 bits são divididos em 2 blocos de 4 bits, a primeira metade vai para o fim do algoritmo para o XOR e a segunda metade para a caixa E/P e para o SW para a próxima rodada. A saída de 8 bits do E/P passa por um XOR com a primeira subchave e seu resultado é dividido e 2 blocos de 4 bits que entrarão nas caixas-S S0 e S1.

Os 2 blocos de 2 bits como saída das caixas-S entram na caixa P4. O resultado de 4 bits da saída de P4 passa por um XOR com a primeira parte do bloco que foi dividido na permutação inicial (IP), que ainda não tinha sido usado.

A saída do XOR e o segundo bloco de 4 bits da permutação inicial entram no SW, que inverte a ordem das entradas e usa na segunda rodada da função complexa.

Após realizar novamente as operações da função complexa, sua saídas vão para a permutação final (IP -1) e a saída desta permutação é o texto cifrado.

Neste caso a teoria é muito mais difícil que a prática, mas a teoria é necessária. Caso não tenha entendido alguma coisa, releia e acompanhe o texto com as imagens de referência, seguindo o fluxo do algoritmo.

No próximo texto vamos fazer todo o processo de criptografia, usando as subchaves que criamos no texto anterior.

Caso não tenha entendido alguma coisa poste sua dúvida aqui no post ou no grupo do Facebook que responderei e explicarei novamente se for necessário.

quinta-feira, 2 de abril de 2015

Data Encryption Standard - DES

O algoritmo DES era inicialmente um projeto da IMB, chamado de LUCIFER, e olhem só, o projeto era dirigido por ninguém mais ninguém menos que Horst Feistel, nome familiar? :)

Como já comentei diversas vezes antes, a maioria destes algoritmos mais famosos tem seu código fonte público. Normalmente estes algoritmos usados hoje em dia são os ganhadores, ou os que mais se destacaram nas seleções do NIST dos projetos para um padrão nacional de criptografia, obviamente nos Estados Unidos, mas que foi amplamente adotado e teve presença mundial (ainda tem em alguns lugares).

A IBM então enviou seu projeto LUCIFER para a seleção do NIST, que na época se chamava NBS, estamos falando lá dos anos 70. O projeto foi o escolhido para se tornar o padrão nacional de criptografia para criptografar informações e documentos menos sigilosos.

O projeto foi muito criticado, várias suspeitas de enfraquecimento do algoritmo foram levantadas. Não querendo entrar em teorias da conspiração ou assuntos de espionagem (o que já é tecnicamente público) mas já entrando, no desenvolvimento do DES a NSA convenceu a IBM de que a chave poderia ser bem menor. Outra modificação que alegam é a alteração das Caixas-S do algoritmo.

Caixa-S é uma parte fundamental de um algoritmo de criptografia, a caixa-S é o bloco que mantém as operações do algoritmo.

Até teve um relato do Alan Konheim, desenvolvedor do DES:

"Enviamos as Caixas-S para Washington para avaliação, e quando voltaram estavam completamente diferentes."

Algum tempo depois, quando o poder computacional cresceu, se tornou simples quebrar o DES através de bruteforce. Para tentar resolver o problema foi criado o Triple DES, ou 3DES, mas outros problemas apareceram, o que fez o DES perder um pouco de espaço para outro algoritmo que veremos mais a frente, o AES.

Simplified DES


Agora sim vamos falar um pouco do algoritmo. Pare sua leitura e vá procurar no google sobre o algoritmo DES. Vou facilitar para você, apenas clique aqui.

É um algoritmo extremamente complexo né? Não temos como analisar tudo aquilo no ponto que estamos aprendendo como funciona a coisa. Para facilitar para todo mundo, inclusive seus alunos, o professor Edward Schaefer criou uma versão simplificada do DES, o S-DES. Com ele seus alunos poderiam estudar um algoritmo de criptografia de verdade e atual de uma forma mais simples. A funcionalidade básica é a mesma, mas o tamanho das chaves e blocos é menor para simplificar como o próprio nome já diz.

Este algoritmo usa blocos de 8 bits e chave de 10 bits para produzir um texto cifrado de 8 bits. É claro que com isso o algoritmo seria quebrado em segundos, por isso ele é apenas usado para questões de estudo.

Vamos agora dar uma olhada em como ficou o DES neste modelo simplificado:


Algumas coisas da imagem já vimos em textos passados, como por exemplo o uso de chaves (K1 e K2 nesse exemplo), algumas pode-se deduzir como entrada e saída, e algumas vou explicar. Não se preocupe se a explicação agora for superficial e não ajudar muito, nos próximos textos vamos ver na prática isso "funcionando" para ter uma noção do que é cada coisa.

IP = Permutação inicial
Fk = Função complexa (função necessária de acordo com a cifra de Feistel)
SW = Permutação simples
P10 = Permutação com 10 bits
P8 = Permutação com 8 bits
Shift = Substituição
IP-1= Permutação final ou permutação inicial inversa

Então aguardo você para o próximo texto para brincarmos um pouco com o algoritmo S-DES.

Até a próxima!

terça-feira, 10 de março de 2015

Características dos sistemas criptográficos

- Tipos de operações
     - Substituição
     - Transposição

- Números de chaves
     - Simétrica
     - Assimétrica

- Modo de processamento

     - Bloco
     - Stream

Tipos de operações

Os algoritmos criptográficos podem funcionar com duas formas de operações para cifrar o texto claro, substituição e transposição. Existem algoritmos, normalmente os clássicos, que utilizam apenas uma das duas operações. Algoritmos atuais utilizam das duas técnicas para maior complexidade do texto cifrado. De uma forma mais simples, para entendermos como os algoritmos criptográficos funcionam vamos supor que nosso algoritmo criptografa palavras, letra por letra.

Operações de substituição apenas substituem os blocos de lugar, sem alterar nada. Então, se nosso algoritmo quiser utilizar a operação de substituição para criptografar a palavra “SEGURANCA”, o texto cifrado será algo como “AGARESCUN”. Pode-se ver que nada foi alterado, apenas as letras foram embaralhadas.

Já no caso das operações de transposição o que acontece é o oposto. As letras não mudam de lugar, mas são substituídas por outras de acordo com alguma regra específica. Para exemplificar vamos utilizar a regra “substituir pela próxima letra”, isso quer dizer, A vira B, B vira C e assim por diante. Neste caso, nossa palavra em texto claro “SEGURANCA" seria transformada em “TFHVSBODB”.

Números de chaves

Veremos mais a fundo como isso funciona, mas basicamente a chave pode ser única ou ser um par.

Chaves únicas são chamadas de chaves simétricas, ou seja, uma mensagem é criptografada com uma chave e apenas essa chave pode decifrar a mensagem.

Os pares de chaves são chamados de chaves assimétricas. As duas chaves são diferentes mas matematicamente relacionadas. Diferente das chaves simétricas, as chaves assimétricas funcionam com as duas chaves, o que uma chave criptografa a outra decriptografa.

Existem muitas outras diferenças entre algoritmos simétricos e assimétricos, mas vamos ver estas de forma detalhada quando abordarmos os algoritmos específicos.

Modo de processamento

Aqui vemos dois modos de processamento do algoritmo. No modo de bloco o algoritmo vai “quebrar” o texto claro em pequenos pedaços ou blocos de tamanho específico. Após todo o processo das operações de substituição e transposição os blocos resultantes são concatenados para formar o texto cifrado.

O modo de stream ou fluxo não separa o texto em partes. Neste modo, todo o texto cifrado passa pelo algoritmo como um fluxo único de dados, bit a bit, ou byte a byte, de acordo com o algoritmo.

Hoje em dia os dois modos são utilizados, mas na grande maioria dos casos é utilizado o modo de bloco.

terça-feira, 17 de junho de 2014

É a primeira vez na história, em que um supercomputador conseguiu superar o teste de Turing, projetado para determinar se uma máquina tem capacidade de ter um pensamento próprio. O teste ocorreu no último domingo, quando Eugene Goostman, um software desenvolvido para responder como se fosse um adolescente de 13 anos, foi submetido a uma entrevista improvisada na Royal Society de Londres. As perguntas e as respostas foram enviadas através de mensagens escritas na tela, e um terço dos humanos que interrogaram a máquina não conseguiram descobrir que não se tratava de uma pessoa e sim de um interlocutor cibernético.



Esse acontecimento é um marco no campo da inteligência artificial, e aconteceu exatamente no 60° aniversário da morte de Alan Turing, matemático britânico responsável pelas bases para a informática moderna. E também o responsável pela criação do teste de Turing, o cientista afirmou certa vez, que se um computador fosse capaz de enganar um terço de seus interlocutores, fazendo-os acreditar que ele seria um humano, então ele estaria pensando por si próprio.

O software Eugene Goostman é uma criação dos engenheiros de informática Vladimir Veselov e Eugene Demchenko.

E você o que acha disso tudo? Seria apenas um inicio? Ou já fomos longe demais?



Nota: O Robô Ed já não fazia isso?

segunda-feira, 16 de junho de 2014

E ai pessoal! Meio deserto por aqui hehehe. Andei meio ocupado mas agora liberou um pouco e venho com um post sobre o assunto que manteve ocupado, programação.

Todos as pessoas que um dia estudaram, estudam ou irão estudar alguma coisa relacionada a computação vão cair na programação, e sem dúvida boa parte vai odiar. Mas porque todo mundo odeia programação? A maioria das pessoas que eu convivo respondem algo como: "Eu vou trabalhar com segurança e não ser programador". Esta resposta se estende para outras áreas como por exemplo gerencia de TI, manutenção e por incrível que pareça, desenvolvimento de jogos. Na verdade toda área que não tem como objetivo primário o desenvolvimento de sistemas acaba caindo nessa resposta, eu mesmo odiei programação por um bom tempo, e hoje ainda não gosto, mas aprendi a respeitar e valorizar sua importância. Num futuro próximo eu provavelmente goste de programação.

Hoje em dia eu sou a favor de que desde pequenos as pessoas tenham contato com programação e algoritmos, poderia ser uma matéria regular da escola como português e matemática, mesmo que no fim das contas a pessoa não venha a utilizar isso para nada, se tudo que aprendemos na escola fosse útil hoje seriamos todos físicos, filósofos, sociólogos, químicos e etc. As pessoas não precisam ser programadores experientes e desenvolverem sistemas complexos ou a próxima rede social de sucesso, mas é bom saber como um computador funciona, como pode funcionar, e quem sabe até resolver problemas um pouco mais complexos.

Um ponto positivo de saber o mínimo de programação (e ser forçado a estudar isso) é o aumento na capacidade de raciocínio lógico, isso quer dizer, programar incentiva a pensar, coisa rara hoje em dia. Quem trabalhou com suporte e/ou assistência técnica sabe como pensar poderia fazer a diferença, quem sabe até acabar com os terríveis chamados idiotas...


Agora, aos que tem boa vontade, que estão começando a estudar ou querem aprender programação, por onde começar? Simples, primeiro de tudo pegue algumas aulas de lógica de programação, matemática para programação (talvez não tão necessário) e algoritmos. Após isso recomendo que procure, pratique e teste diversas linguagens de programação. Eu por exemplo sempre odiei programação, e em todos os contatos foram sempre as mesmas linguagens, Delphi, C e derivados, e Java. Onde ia dava de cara normalmente com esses três. Depois de muito tentar e por algum motivo não aprender de modo nenhum a programar nessas linguagens resolvi procurar outras. Neste momento conheci PHP, Perl, Objective-C, Shell Script (é considerado uma linguagem de programação?), Python e outras. Tudo deu muito errado até Python, onde estou conseguindo aprender algo.

Obviamente aqui você já percebeu que eu vou fazer propaganda do Python, mas veja aqui o porque de Python ser uma boa linguagem de programação para começar.

A grande pergunta, porque estudar Python? Porque é simples e incrível! Pronto, já pode parar de ler e sair programando. :)

Agora, caso queira saber um pouco mais sobre leia até o final.

Além de ser incrível, Python é simples, isso quer dizer que você tem menos coisas para se preocupar e pode focar em "pensar como um programador". Por ser simples você não precisa perder tempo de estudo lendo e decorando a função de cada caracter, de cada estrutura. Python é bem legível, praticamente como ler um texto (em inglês, obvio).

Depois que você entender como programação funciona pode migrar para outra linguagem que atenda melhor seu uso, mas Python é um bom modo de começar, tanto é verdade que a NASA usa.

Pela estrutura ser mais simplificada, a curva de aprendizado é muito maior do que as outras linguagens, com um dia focado de estudo pode-se desenvolver um joguinho simples (ta, talvez um pouco mais de um dia). Mas para ilustrar o que eu estou tentando dizer vamos a um exemplo prático. Vamos fazer um simples programa que mostra na tela a frase "Hello World", a propósito, se você programa em qualquer linguagem e este não foi o seu primeiro programa você já começou errado :).

Em uma linguagem com uma estrutura um pouco mais robusta como C++ teríamos que fazer algo assim:
#include stdout
int main()
{
std::cout << "Hello, world!\n";
}

Já em Python podemos fazer assim:
print "Hello World" 

Simples, não?

Outra coisa interessante do Python é que você não necessita aprender a usar uma IDE, você pode escrever seu código em um arquivo de texto e executar ou simplesmente digitar diretamente no terminal interativo do Python.

Agora mais focado no pessoal que estuda segurança, você já usou o Backtrack ou alguma outra distro para pentest, forense e etc? Já parou para olhar a quantidade de ferramentas com o sufixo ".py"? Então, são todos desenvolvidos em Python. Ai você me pergunta, se já ta tudo lá, pra que eu preciso aprender Python? Simples, você pode contribuir com os projetos, alterar algo para seu uso, ou até criar suas próprias ferramentas. Como alguém uma vez me disse, "você nunca vai ser um profissional completo se não desenvolver suas próprias ferramentas para resolver seus próprios problemas."

Termino esse post com a seguinte situação, você precisa atacar/auditar uma certa máquina mas não tem nenhum exploit para ela, vai sentar e esperar sair um ou vai desenvolver seu próprio?

quinta-feira, 12 de dezembro de 2013

Kira Radinsky tem apenas 27 anos (Foto: Divulgação/ Technion)

SÃO PAULO - Assim como tantos jornais, revistas e outras publicações, o New York Times é uma poderosa fonte de informação de eventos passados. Contudo, será que ele poderia prever o futuro? A cientista israelense Kira Radinsky, mais conhecida como a “profeta da web”, diz que sim.
Com apenas 27 anos, Kira já é um prodígio na área de ciência e tecnologia. Ela desenvolveu um sistema único que alerta possíveis futuros desastres, epidemias e grandes eventos - tudo a partir de informações encontradas nos arquivos do jornal norte-americano.
Com um currículo de causar inveja a muitos, Kira entrou na faculdade com apenas 15 anos de idade e recebeu seu Ph.D. em Ciência da Computação aos 26. Ela também aparece na lista dos 35 maiores inventores com menos de 35 anos, realizado pelo MIT (Massachusetts Institute of Technology), que já incluiu nomes como Mark Zuckerberg, Larry Page e Sergey Brin.
Através do algoritmo, a cientista afirma ter previsto a primeira epidemia de cólera em muitos anos, as primeiras revoltas da Primavera Árabe e outros eventos mundiais que foram destaques do NYT. “Se uma tempestade surge dois anos depois de uma seca, poucas semanas depois [da enchente], a probabilidade de um surto de cólera é enorme, especialmente em países com baixo PIB e baixa concentração de água limpa”, exemplificou Kira ao site Fast Company.
Ela explica que, além do arquivo do jornal, o algoritmo também compila informações de redes sociais como o Twitter e até da Wikipédia. Os dados são processados para extrair padrões de causa e efeito que podem ser usados para prever eventos futuros.
Segundo Kira, tudo começou em 2007, quando brincava com o Google Trends (ferramenta do Google que mostra os mais populares termos buscados em um passado recente). Ela descobriu que podia prever um pouco do que as pessoas iriam procurar no buscador, com base em notícias de acontecimentos mundiais recentes. “Em seguida, ela se perguntou se poderia adaptar este mecanismo para prever, com mais probabilidade, outros fenômenos.”
Por agora, a israelense trabalha com o co-diretor do laboratório de pesquisa da Microsoft, Eric Horvitz, para aperfeiçoar a tecnologia. Segundo eles, a taxa de precisão está entre 70% e 90%. “Ele dá probabilidade, não uma certeza”, ressalta a cientista.

Fonte: Yahoo


Subscribe to RSS Feed Follow me on Twitter!