segunda-feira, 25 de agosto de 2014

Integridade em chamadas VoIP com ZRTP

O ZRTP(Z e Real Time Protocol) é um protocolo de comunicação VoIP, ele utiliza em sua base um sistema de negociação de chaves Diffie-Hellman para criptografar as chamadas.
A criptografia do ZRTP é realizada nos endpoints, celulares, computadores, tablets, etc. Dois métodos são utilizados para realizar verificação. No primeiro é gerado uma sequência de 4 letras e números, que devem ser iguais nas duas pontas. No Segundo, é aberto um canal de voz para os usuários falarem as chaves e realizado a identificação por voz da pessoa.
Figura 1: Simulação de aplicação do ZRTP.

Para iniciar o processo de comunicação uma mensagem Hello é enviada a um endpoint, essa mensagem vai ser capaz de informar se o outro endpoint suporta o protocolo. Na mensagem é enviada a configuração da sessão SRTP, além disso é repassado um ZRTP ID de 96-bits.
O Hello é respondido com um HelloACK, um hash é utilizado para autenticar a mensagem, e dessa forma evitar man-in-the-middle. Uma a resposta autenticada os dispositivos são conectados e a comunicação por voz pode ser iniciada.

Segue um vídeo exibindo uma comunicação VoIP utilizando o ZRTP com o software Jitsi.

Referências:
  1. http://www.gehirn.com.br/blog/criptografia-e-testes/
  2. http://www.madeira.eng.br/liberty/download_file.php?attachment_id=178

sábado, 16 de agosto de 2014

Bitcoin

O que é?

O bitcoin é uma moeda virtual, baseada em criptografia. Foi criada por Satoshi Nakamoto e ganhou notoriedade por sua forma livre de transferência, sendo totalmente independente de uma autoridade central. Por isso, acabou se tornando uma moeda popular no mercado negro.
O bitcoin roda numa rede peer-to-peer, dessa forma circular independente de um servidor. A moeda pode ser transferida por computadores e smartphones sem a necessidade de uma instituição financeira.
As moedas são armazenadas em carteiras, as carteiras, por sua vez, podem ser mantidas nos próprios computadores do usuário ou em servidores que disponibilizam o serviço de armazenamento, funcionando com uma espécie de banco.
Atualmente, o bitcoin já pode ser usados em diversas empresas: bares, escritórios, bicicletárias, oficinas etc.

Carteira e a Criptografia

As carteiras são as responsáveis pela possibilidade de transação e armazenamento da moeda, cada carteira possui dois números, um representa uma chave publica e o outro uma chave privada. Donos de carteiras podem ter várias chaves, correspondendo ao número de moedas. Quando é realizado uma transação um usuário adiciona a chave publica de outro usuário na moeda e assina as moedas com sua própria chave privada, algo semelhante ao usado em certificados digitais. Para consolidar a transação, é comunicado a outros nós na rede P2P sobre a mesma, a rede atua na validação e confirmação da transação.

Mineração

Os bitcoins são gerando através a partir do programa de geração de moedas. Todos os nós da rede competem entre si para ser o primeiro a achar uma solução para um problema criptográfico envolvendo o lote escolhido para minerar, todo processo funciona como uma especie de tentativa e erro.

Conclusão

Essa postagem teve como principio apresentar mais uma aplicação da criptografia assimétrica, vemos como o uso de chaves publicas e privadas possibilitam a transação de dinheiro virtual, garantindo a integridade e confiabilidade as moedas.


Referencias:

  1. http://g1.globo.com/tecnologia/noticia/2014/02/moeda-virtual-bitcoin-comeca-ganhar-espaco-no-comercio-brasileiro.html
  2. http://www.techtudo.com.br/artigos/noticia/2014/01/bitcoin-carteiras-bitcoin.html
  3. http://pt.wikipedia.org/wiki/Bitcoin#Informa.C3.A7.C3.B5es_t.C3.A9cnicas
  4. http://jovemnerd.com.br/nerdcast/nerdcast-393-ouro-diamantes-e-bitcoins/

quinta-feira, 14 de agosto de 2014

Padrão OpenPGP

O OpenPGP é um padrão aberto de criptografia é baseado no programa de encriptação e descriptografia de chave pública, PGP, criado por Phil Zimmermann em 1991.

O padrão surgiu como uma consequência do sucesso obtido pelo PGP, quando vários programadores demonstraram interesse em desenvolver programas compatíveis. Concedida a licença e permissão do uso do nome pela PGP Inc., a IETF (Internet Engineering Task Force) criou o padrão OpenPGP, definido através da normativa técnica RFC 2440.

A partir disso, a FSF (Fundação para o Software Livre) desenvolveu seu próprio software criptográfico, o GnuPG, que ganhou preferência de muitos usuários por ser código aberto, enquanto o PGP, que a princípio era livre, tornou-se pago em suas últimas versões.

Como usar o OpenPGP

Para entender o funcionamento e a utilização da criptografia assíncrona no OpenPGP, vamos entender como ele funciona.

No OpenPGP cada usuário gera, em seu computador, seu par de chaves: uma pública e uma secreta correspondente. Enquanto a chave secreta fica apenas com o usuário criador, a chave pública é compartilhada.

A criptografia funciona da seguinte maneira: qualquer arquivo criptografado pela chave pública só pode ser criptografado através do uso da chave secreta, dessa forma o arquivo se mantém ilegível para aqueles que não detém a chave secreta válida.

Já a assinatura de um arquivo segue o fluxo contrário da criptografia: o usuário assina o arquivo com sua chave secreta e, dessa forma, quem tem posse da chave pública consegue verificar a autenticidade do arquivo enviado. Para manter a segurança da informação, qualquer alteração em um arquivo assinado torna a assinatura inválida.

No ato de criptografar, é sempre preferível que também seja feito a assinatura. Assim, pode ser confirmado tanto a autenticidade do remetente quanto a confidencialidade da informação.

Para obter a chave pública é preciso entrar em contato com alguém que já a tenha, podendo ser o próprio usuário criador. De outra maneira, é possível obter uma chave pública através de um servidor de chaves, que contém as chaves públicas de muitos usuários. Para confirmar a autenticidade de uma chave pública é necessário verificar sua assinatura.

A vericidade da chave pública verificada diretamente com o usuário dono é feita a partir da impressão digital, código que se deduz através de cada chave. Se duas chaves são correspondentes, elas terão a mesma impressão digital.  Por outro lado, verificar a assinatura é conferir quem assinou aquela chave pública, ou seja, qual o usuário atesta sua validade. Exemplo: se a chave obtida do usuário C é assinada pelos usuários A e B, que por sua vez são usuários que tiveram impressões digitais válidas, então você pode deduzir que a chave do usuário C também será válida.

É dessa forma que é gerada a cadeia de confiança do OpenPGP: a partir do grau de confiança que você definiu para os seus contatos, é calculado o grau de confiabilidade da chave obtida - a partir de suas assinaturas e das impressões digitais de seus assinantes. Retornando ao exemplo anterior: para que a chave do usuário C seja confiável, você antes deve ter marcado como confiáveis (a partir de suas impressões digitais, por exemplo) os usuários A e B.

Quando uma chave está sendo usada de maneira indevida, é possível revogá-la e torná-la inválida. Para tanto, é possível acessar os chaveiros, que mantém as chaves públicas, utilizando a chave secreta, e revogar a chave que queira invalidar. Caso não seja possível acessar os chaveiros, a opção é utilizar um certificado de revogação, que deve ser criado junto com o par de chaves pública e secreta. É possível também escolher um de seus contatos como revogador de chaves.

Depois que uma chave é revogada, é necessário informar a todos os contatos, afim de torná-la inválida também para eles. A maneira mais eficiente seria através de um servidor, usado para manter o chaveiro: uma vez atualizado o status da sala (se ela foi revogada) em seu servidor, o usuário que acessa as chaves públicas através deste servidor também terá sua chave revogada.

Por fim, para utilizar o OpenPGP para criptografar seus dados, basta instalar um software que utilize o padrão (como o GnuPG) e escolher os programas ou arquivos que farão uso desta ferramenta. Assim, é possível manter a comunicação na internet mais protegida e confiável.

Referências e links úteis:
http://www.cripto.info/oqueepgp.shtml
http://www.cripto.info/pgpem10licoes.shtml
http://pt.wikipedia.org/wiki/PGP
http://pt.wikipedia.org/wiki/OpenPGP
http://pt.wikipedia.org/wiki/FSF
http://pt.wikipedia.org/wiki/IETF




Certificado Digital e Criptografia

Assinatura Digital

Para um melhor entendimento vamos iniciar nossos estudos explicando o conceito de Assinatura Digital.
A assinatura digital permitir comprovar e autenticar documentos eletrônicos. O objetivo aqui é representar a legitimidade de uma assinatura comum, usando meios virtuais. Para isso, é utilizado um esquema criptográfico, para proteção dos dados, e uma entidade nacional, que realiza a verificação da veracidade da assinatura, no Brasil esse órgão é o Instituto Nacional de Tecnologia da Informação e organizações autorizadas pelo mesmo.
A assinatura utiliza basicamente criptografia assimétrica, ou seja, todo o esquema de proteção funciona em cima de chaves publicas e privadas. Caso você tenha uma chave pública, vai haver apenas a possibilidade de acessar um documento recebido e repassar essa informação. Já se você for detentor de uma chave privada, vai ser possível emitir dados com uma identidade própria.

Certificado Digital

Finalizado o entendimento da assinatura vamos compreender como funciona o certificado digital. O certificado é um documento eletrônico com assinatura digital, pode ser utilizado por empresas, instituições, pessoas etc.
O certificado, por exemplo, permite garantir a autenticidade de um site, largamente utilizado em paginas de banco, e-commerce, órgãos governamentais ,redes sociais e correios de emails.
Todos os certificados devem estar associados a uma entidade regulamentadora, que podem ser uma Autoridade Certificadora (AC) ou uma Autoridade de Registro (AR). Uma AC tem a função de associar uma identidade a uma chave e "inserir" esses dados em um certificado digital. Para tanto, o solicitante deve fornecer documentos que comprovem sua identificação. Já uma AR tem uma função intermediária, já ela pode solicitar certificados digitais a uma AC, mas não pode emitir esse documento diretamente.

Figura 1: Árvore de Certificação

Conclusão

Como vimos, o certificado e a assinatura são dois exemplos de aplicações onde pode ser encontrado o uso de criptografia assimétrica. Onde chaves publicas e chaves privadas são utilizadas com algoritmos de criptografia, como o RSA, que é amplamente utilizado para certificados.
Vemos a importância desse modo de criptografia quando processos bancários e compras onlines podem ser feitas com segurança.

Referências:
  1. http://www.infowester.com/assincertdigital.php
  2. http://www.tecmundo.com.br/web/941-o-que-e-assinatura-digital-.htm
  3. Figura 1: http://www.infowester.com/assincertdigital.php

terça-feira, 12 de agosto de 2014

Criptografia em RSA - O Algoritmo mais usado atualmente

Nessa postagem falaremos do RSA, o mais usado algoritmo de criptografia assimétrica atualmente, mostrando um pouco como ele funciona e dando exemplos bem simples.

O RSA foi inventado em 1977 pelos professores do MIT: Ronald L. Rivest, Adi Shamir, e Leonard Adleman que controlavam a empresa RSA Security. Essa empresa é a detentora da patente do algoritmo RSA nos EUA. Mas se restringe a esse país, não se aplicando a outros que desenvolvam programas que usem o RSA, o que permite que o usemos livremente.

O RSA é usado para envio de informação de forma segura usando uma chave pública e uma privada (criptografia assimétrica). Um exemplo seria eu mandar uma mensagem criptografada por mim para um amigo. Se eu usasse uma criptografia de uma chave única privada para isso, teria de enviar para meu amigo a chave que usei na criptografia de forma segura, o que é um grande problema nesse tipo de comunicação. A criptografia simétrica não resolveria esse caso e o RSA é um dos algoritmos de chave assimétrica que resolveriam esse problema como mostra a imagem abaixo.



Desta forma eu não precisaria enviar minha chave para meu amigo, o que é uma vantagem, porém seriam necessárias 3 viagens e eu não estaria criptografando a mensagem diretamente, mas sim o "recipiente que a envolveu", nesse caso do exemplo a "caixa com os cadeados".

RSA e seu funcionamento

RSA é um algoritmo de criptografia assimétrica, então usa duas chaves: uma pública e uma privada, onde a pública pode ser distribuida livremente para que qualquer remetente possa usa-la para me enviar uma mensagem criptografada, mas só sendo possivel descriptografá-las com minha chave privada que é guardada comigo em segredo.

Seguindo com essa idéia, para eu enviar uma mensagem para meu amigo, como no exemplo anterior, eu só precisaria enviá-la usando a chave pública dele e somente ele poderia abrí-la usando sua chave privada guardada com ele em segredo.

Esse algoritmo se baseia na teoria dos números, uma clássica área matemática, e se fundamenta na dificuldade em fatorar um número em seus componentes primos (números divisíveis por eles mesmos e pelo número 1 numa divisão exata e sem restos).
"Apesar dessa função ser inversível, se multiplicarmos números primos muito grandes, a quantidade de números que precisaremos testar para descobrir a entrada vai ser tão grande, que torna esse trabalho impraticável. Por isso, para que essa função seja segura, devemos estar certos de que os dois números escolhidos são realmente primos e que sejam números muito grandes. Por exemplo, quando dizemos que estamos trabalhando com uma chave de 1024 bits no RSA, isso quer dizer, que a chave pública tem 1024 bits, ou seja, precisamos de 1024 bits para representar o número que foi gerado pela multiplicação dos dois primos, portanto cada número primo deveria ter 512 bits.
Para se ter uma ideia, um número de 1024 bits é da ordem de 1 x 10^308 na representação decimal, imagine quantos números antes desse devemos testar para encontrar os dois números primos que o geraram!!! Com o computador que está na sua frente agora, você levaria mais tempo do que a idade do universo para conseguir fatorar esse número, heheheh que exagero..."
Para isso temos de nos lembrar como descobrir fatores primos de um número e para facilitar abaixo segue um vídeo, do Youtube postado por Vinicius Silva, que nos ajudará a entender como funciona a matemática por trás do RSA, e que não há magia nenhuma nisso. 

O vídeo é bem prático e explicativo mostrando o passo-a-passo da matemática que fundamenta o RSA e me ajudou bastante a compreender esse algoritmo criptográfico, espero que ajude a todos da mesma forma e como diz no fim do vídeo por enquanto "that's all folks" (isso é tudo pessoal).


Referências

Postagens de:


Conteúdo sobre a patente do RSA em http://www.cyberlaw.com/rsa.html


Vídeo postado por Vinicius Silva retirado de Aprendendo o RSA - Criptografia 








terça-feira, 5 de agosto de 2014

De onde e para quê surgiu a Criptografia Assimétrica?


Numa postagem anterior já definimos criptografia e o porquê de encripitar, então vamos complementar a definição de Criptografia Assimétrica mostrando de onde surgiu essa necessidade e qual problema veio solucionar.

Já sabemos que a Criptografia oculta o significado de uma mensagem, usa recursos matemáticos para isso e é utilizada por motivos de privacidade ou ocultação de informação. Mas vamos ver brevemente como foram os primórdios de sua aparição na antiguidade apenas por caráter ilustrativo antes de diferenciar Simétrica de Assimétrica. 

Ela foi usada na antiguidade, principalmente em guerras para que inimigos não descobrissem informações estratégicas mesmo em casos de interceptação. 
"O primeiro uso documentado da criptografia foi em torno de 1900 a.c., no Egito, quando um escriba usou hieróglifos fora do padrão numa inscrição.Entre 600 a.c. e 500 a.c., os hebreus utilizavam a cifra de substituição simples (de fácil reversão e fazendo uso de cifragem dupla para obter o texto original), sendo monoalfabético e monogrâmica (os caracteres são trocados um a um por outros), e com ela escreveram o Livro de Jeremias."[1]
Uma das técnicas mais clássicas de criptografia é a substituição e um exemplo que enganou muitos inimigos do Império Romano foi o "Codificador de Júlio César", que simplesmente substituía as letras do alfabeto avançando três casas e obviamente perdeu sua funcionalidade após ter a chave descoberta, como toda técnica de criptografia.
"A criptografia existe desde a antiguidade, e estava altamente associada a atividades militares e diplomáticas. Considerada por muitos como uma ciência ou até mesmo arte, tem como objetivo principal disfarçar a informação através de processos de codificação, e de repor essa mesma informação no seu estado original através de processos de descodificação."[2]
Enquanto a criptografia estuda os métodos usados na proteção da informação existe por outro lado um estudo das técnicas que permitem quebrar um algoritmo criptográfico denominado criptoanálise e a soma desses estudos é o estudo da criptologia.
"Atualmente, os dois protocolos mais usados para proteção de dados na Internet, o SSL (Secure Sockets Layer) e o TLS (Transport Layer Security) utilizam a criptografia simétrica para proteger os dados transmitidos e armazenados. No entanto, a criptografia simétrica possui um desafio importante e impossível de ser resolvido. Como combinar uma chave secreta entre duas pessoas que querem se comunicar através da Internet? Essa pergunta não teve solução até a década de 1970 e não foi na criptografia simétrica que a solução foi encontrada". [1]

Diferenças Básicas entre criptografias Simétrica e Assimétrica.

 Algoritimos que usam a criptografia simétrica, ou de chave secreta, tendem a ser mais rápidos, uma vez que a chave usada é compartilhada entre as várias máquinas, no entanto não são tão seguros quanto os que usam criptografia assimétrica. Uma única chave para criptografar e descriptografar é compartilhada entre o emissor da informação e o receptor. DES , 3DES , AES e RC4 são alguns dos algoritmos que usam criptografia simétrica. Para garantir a confidencialidade de informações quando armazenada, tanto na origem como no destino e a atividade de fazer compras on-line são exemplos que utilizam desses tipos de algoritimos.

Já os algoritimos que usam a criptografia assimétrica, ou de chave pública, usam um par de chaves distintas onde uma chave pública é usada para criptografar e uma chave privada é usada para descriptografar. Eles tendem a ser mais lentos exigindo mais recursos do computador, mas compõe um método muito bom para garantir segurança em um canal público e inseguro como a Internet. Apenas a chave pública é compartilhada entre o emissor e receptor, e a chave privada é usada para decifrar a toda a informação. Gnupg ,PGP e RSA são exemplos de algoritmos assimétricos e o uso de e-mails é um exemplo de atividade que usa esse tipo de criptografia.




[2] Retirado de http://escreveassim.com.br/2010/12/08/criptografia-simetrica-e-assimetrica/

segunda-feira, 4 de agosto de 2014

O que é Criptografia Assimétrica?

Para começar a responder essa pergunta, é necessário primeiro explicar o porquê é preciso criptografar os dados.

A criptografia tem o objetivo de esconder informação de acesso não autorizado. Ela é usada Quando se pretende preservar os valores de uma senha, do conteúdo de uma mensagem, dos dados de um HD etc. As técnicas mais utilizadas usam o conceito de chave, convertendo toda mensagem a partir de um conjunto especifico de bits.

A criptografia assimétrica faz referencia a uma dessas técnicas de chave, ela trabalha com duas chaves distintas que se complementam. Uma das chaves é publica e outra privada. Numa troca de informações a chave publica é disponibilizada ao emissor, dessa forma ele poderá ocultar a mensagem, com os dados codificados a mensagem só poderá ser decodificada com a chave privada do remetente.

Figura-1: Exemplo de criptografia assimétrica

Um dos algoritmos mais utilizados é o RSA (Rivest, Shamir and Adleman), foi criado no MIT( Massachusetts Institute of Technology). O RSA utiliza números primos para criar suas chaves, basicamente é usado dois números primos grandes, a multiplicação dos números se torna a chave publica, a chave privada fica sendo os números originais. Os números primos tem como característica serem divididos apenas por eles mesmos e por 1. Dessa forma, encontrar números primos é demasiadamente custoso computacionalmente. Vale lembrar ainda que essa é uma solução de segurança independente do poder de processamento das maquinas, para processadores mais rápidos basta alcançarmos números primos significativamente maiores.

Referências:
http://www.techtudo.com.br/artigos/noticia/2012/06/o-que-e-criptografia.html
http://www.infowester.com/criptografia.php
Figura1:http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/