Criptografia, primeiros passos.

Olá Caríssimos.

Como havia falado em outro post, eu no decorrer dos meus estudos no mestrado irei discorrer sobre alguns temas interessantes aqui no blog, isto é, irei tentar proliferar conhecimento.

Falarei neste post sobre o introdutório do introdutório de criptografia, prefiro separar bem as coisas para deixar mais claro para os usuários, e para mim também, ou seja, a medida que for assimilando conhecimento vou postando minhas anotações e perspectivas sobre o assunto. Enjoy!

Introdução à CriptografiaO que é Criptografia?

O que é mesmo criptografia?

Recorrendo ao bom e velho Wikipedia:

Criptografia (Do Grego kryptós, “escondido”, e gráphein, “escrita”) é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da “chave secreta”), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade. É um ramo da Matemática, parte da Criptologia [1].

É um ramo da Matemática!!! Isso pode assustar… é realmente assusta! A criptografia é então o estudo, do ramo da matemática e da Criptologia que visa o estudo de esquemas criptográficos em prol da segurança de mensagem, dados, INFORMAÇÃO!

Como menciona em seu livro, Introduction to Modern Cryptography, Jonathan Katz e Yehuda Lindell, por muitos anos a criptografia foi vista como uma arte. Foi só no final do século 20 que o quadro da criptografia mudou radicalmente. Um estudo aprofundado sobre o assunto começou a surgir a transformar a criptografia de arte para ciência!

Ao Estudo!

O estudo da criptografia começa pela introdução do conceito de Criptografia de Chave Privada, isto é, uma mensagem, a partir de um texto e uma chave (senha para deixar mais comum o termo)  um método é aplicado e a mensagem outrora legível se torna ilegível (lembra do nosso amigo Wikipedia).

Mas para que cifrar mensagem?

A informação é o bem mais valioso, já dizia meu tio Robert 4 anos atrás. Muitas pessoas querem se apossar desse bem a qualquer custo, utilizando em proveito próprio ou para fins destrutivos. Impedir que a mensagem caia em mãos erradas é um papel importante na computação, porém se ela cair, impedir que o bisbilhoteiro a decifre é papel da criptografia. Basicamente o cenário abordado aqui é o demonstrado na figura:

O que é um esquema criptográfico então?

Conceitualmente um esquema criptográfico é um conjunto de algoritmos que atuam sobre um conjunto de mensagens (textos ou outras formas de expressão) para formar um conjunto de mensagens cifradas ilegíveis a terceiros (Nosso Eve da figura).

O conjunto de algoritmos é formado por três elementos:

  1. Algoritmo de Geração de Chaves (ou senhas, como queiram) – que nada mais é do que um algoritmo probabilístico que tem como saída uma chave K escolhida de acordo com alguma distribuição determinada pelo esquema. Chamaremos esse algoritmo de Gen.
  2. Algoritmo de Encriptação – chamaremos esse algoritmo de Enc, tal algoritmo recebe como entrada a chave K e uma mensagem m e tem como saída uma mensagem cifrada c. Assim: Enck(m) = c.
  3. Algoritmo de Decriptação – este algoritmo, conhecido com Dec, recebe como entrada a mensagem cifrada c e de posse da chave K consegue obter a mensagem original m. Assim: Deck (Enck(m)) = m.

Baseado nessa teoria, construímos qualquer esquema criptográfico, escondemos a chave e o método e pronto, tudo resolvido, podemos cifrar o que quisermos e nunca seremos descobertos. Calma pequeno gafanhoto!

Temos um pequeno porém fabuloso princípio para estudar antes de abrir o notepad e começar a programar métodos e mais métodos de criptografia.

Princípio de Kerckhoffs

No final do século 19, Auguste Kerckhoffs deu sua opnião no melhor artigo publicado por ele sobre princípios para cifras militares.

Ele disse:

“The cipther method must not be required to be secret, and it must be able to fall into the hands of the enemy without inconvenience.”

Isto quer dizer algo como a segurança do método não poder requisito para segurança, pois ele pode cair nas mãos dos Auguste Kerckhoffsinimigos (lembra do ENIGMA não é?)

Então como garantir minha criptografia? Bom pequeno gafanhoto, nosso amigo Kerckhoffs nada mais queira do que indicar que reduzamos o escopo da segurança, focando na segurança da chave (não vou mais falar que o mesmo que senha não é?) assim garante-se que:

  • É mais fácil manter sigilo sobre uma chave do que sobre todo um método de encriptação;
  • Se a chave for descoberta, basta substituir a chave e não todo o método;
  • Pode-se usar o mesmo esquema de criptografia em diferentes situações sem perda de legitimidade e/ou eficiência.

Jonathan Katz e Yehuda Lindell em seu livro vão mais além, deixar o método público só tende a trazer mais vantagem para o esquema, listaram então as seguintes vantagens:

  • O método público pode ser estudado e testado por muitas e muitas pessoas tendo um valor acadêmico fantástico;
  • Com o estudo massivo, falhas podem ser encontras mais rapidamente e assim corrigidas;
  • Além do que focar na segurança da chave garante que, engenharia reversa pode até obter o método de criptografia, mas é incapaz de descobrir a chave (senha :D) utilizada para criptografa a mensagem

Por hoje é só, tenho uma lista de criptografia para resolver, assim que estudar um pouco mais posto no Lambdas. Enjoy!

Construindo uma Árvore com apenas um comando SQL – ORACLE

Caríssimos, quanto tempo hein!

Estou todo enrolado me preparando para a viajem da minha vida! Passei no mestrado em Pernambuco (UFPE) e irei cursá-lo para felicidade geral da nação, pelo menos lá em casa!

Hoje, ainda no trabalho me deparei com o desafio de criar uma forma de produzir uma hierarquia com um certo Objeto (Enfim um post de JAVA!). Situação era:

O Modelo Casa tinha 2 Vizinhos, cada vizinho tinha mais dois outros vizinhos que não era a primeira casa, e assim sucessivamente. No banco de dados eu tinha uma tabela assim:

create table hierarquia (

casa_pai_codg number(5,0);

casa_filho_codg number(5,0);

tipo_vizinho char(1 BYTE)

);

Assim, no meu pequeno entendimento eu pensei:

Uma casa tem um pai, esse pai é vizinho da casa filho ou pela esquerda ou pela direita.

Baseado nisso, corri nos foruns americanos que discutem sobre o Oracle, o nosso banco em questão. Depois de muito fuçar achei uma operação relativamente simples que constrói uma árvore a partir de um nó.


--Executei essa query na tabela que mostrei anteriormente
select
casa_pai_codg as pai,
casa_filho_codg as filho,
level as nivelHierarquivo
from hierarquia
start with casa_pai_codg = 1 connect by prior casa_filho_codg = casa_pai_codg
order by level

Tal função retorna um pool de registros indicando pai e filhos a partir de um pai conhecido (no nosso caso o pai número 1) e ordena pelo LEVEL que ele ocupa na nossa árvore. Não necessariamente a árvore precisa ser binária.

Testes ainda a serem feitos:

Quando os relacionamentos formam um GRAFO.

Enjoy!

Apache2 + PHP + WordPress + PHTML

Boa noite,

Como sabem comecei a trabalhar com PHP novamente usando WordPress, Apache2, dentre outras coisas. No entanto, após instalar o WordPress, que diga-se de passagem é muito fácil, ocorria um erro, ao tentar iniciar o index do WordPress em um cliente  como o Firefox me deparei com um problema irritante.

O firefox tentava fazer o download de um arquivo PHTML todas as vezes que eu acessava a página inicial da aplicação.

Fui em uns fóruns gringos e achei uma solução, não sei se resolve em definitivo, porém aqui ta rodando bacaninha. O problema acontece por que o apache2 não conseguia tratar arquivos desta bendita extensão. Para resolver:

Editei o arquivo apache2.conf que está no caminho: /etc/apache2/apache2.conf , adicionando essa linha:

AddType application/x-httpd-php .phtml

Para realmente funcionar, precisa limpar a cache (lê como escreve, é do FRancês! Cachie), restart o apache2 e pronto!

Enjoy!