Home > Technology > Processamento Digital de Imagens e Esteganografia

Processamento Digital de Imagens e Esteganografia

Esse post tem por objetivo falar um pouco sobre processamento digital de imagens, esteganografia e segurança da informação. Será apresentado uma introdução a PDI, como se faz esteganografia em imagens na prática e quais os impactos da popularização do uso dessas técnicas em segurança da informação.

Com a evolução das tecnologias, hoje temos dispositivos como impressoras laser, que conseguem representar imagens com altas resoluções, só para se ter uma idéia tais impressoras conseguem representar mais de 1800 pontos por polegada (DPI – Dots Per Intch) [1]. Cada ponto na matriz que representa a imagem pode assumir um valor entre um universo da ordem de milhões de cores. Numa imagem de 1600×1200, gerada por equipamentos simples como maquinas digitais, temos 1.920.000 pontos que usam quatro bytes para representar uma quantidade razoável de cores, com isso formamos um arquivo digital e serializado em disco de aproximadamente 7.6 MB.

Esse valor é uma quantidade absurda de informação em que nosso cérebro, diferente dos computadores, não é capaz de processar nos mínimos detalhes. O que nós fazemos ao nos deparar com uma imagem com essa quantidade de informação é ir captando detalhes de alto nível, gradativamente, até coletarmos a informação macro que aquela figura representa.

Exemplo:

Homem velho

Homem velho

É provável que você tenha percebido que a imagem se trata de um homem velho, que possui barba e que possivelmente está num lugar humilde. Mas acredito que pouca gente percebeu o sinal que o homem tem na bochecha esquerda, a textura da porta ou a mancha verde que está pintada na parede acima da cabeça do velho. A observação superficial e gradativa é perfeitamente normal e saudável. Imaginem o que aconteceria se nosso cérebro tentasse captar todos os detalhes da foto como: cromancia, iluminação, texturas ou falhas. Na verdade captamos informações mais relevantes aos poucos até conseguirmos retirar a mensagem principal transmitida através da imagem.

Tendo em vista essa quantidade de informação acima da capacidade de processamento humana, podemos explorar esse detalhe para esconder informação dentro da imagem de maneira que um humano, normal, não suspeite de que há algo por “baixo dos panos“. O resto do artigo irá explicar alguns detalhes de processamento digital de imagem e como esconder informações usando as algumas técnicas e matemática.

Primeiramente vamos a definições de termos (Essa parte é sempre importante para evitar ambigüidades), Computação gráfica é a área responsável por transformar uma informação de uma imagem (analógica) oferecida pela natureza em uma representação computacional, é também sua atribuição manipulações e transformações na imagem criada. Visão computacional é o caminho inverso da imagem para a informação, só que isso feito pela máquina ao invés do cérebro, área amplamente estudada em inteligência artificial com redes neurais e detecção de padrões.

Uma imagem digital nada mais é do que uma discretização de um sinal, formando uma matriz. O processo de manipulação de imagens, hoje realizado pelas máquinas, passa pelas seguintes etapas:

Sinal contínuo -> Sinal discreto                  -> Sinal codificado
(imagem real)  -> (Imagem digitalizada) -> (Imagem serializada)

Nós enxergamos as imagens como um sinal contínuo e o computador como uma matriz de pixels [2]. Essa matriz é armazenada em disco, para consultas posteriores, através de algum algoritmo de codificação como: BMP, JPEG, PNG, GIF.

A área que estuda como ocultar informações dentro outra informação é chamada de Esteganografia (do grego “escrita escondida”). Isso se aplica não só a imagens, mas também a áudios, vídeos e outros meios. Esse artigo apresenta o funcionamento de esteganografia usando imagens, iremos mostrar gradualmente como é possível esconder uma mensagem dentro de uma imagem de forma que o observador da imagem não consiga perceber a informação ali escondida.

A primeira e mais simples aplicação explora o fato das pessoas não conseguirem enxergar diferenças entre tons próximos. Veja a seguinte imagem:

Aplicando um filtro que aumente o contraste da figura, nós transformamos a imagem acima em:

Reparem como em um experimento simples, podemos esconder informação de forma eficaz. Imagine se ao invés de usar uma área tão grande usássemos apenas alguns pixels para esconder nossa mensagem segredo. Nesse exemplo a imagem ofuscou uma informação que também está na forma de imagem o que requer muito mais espaço.

O Exemplo anterior a informação escondida ocupa muito espaço na imagem, além da imagem em si não conter nenhuma informação que retire a atenção do observador dos detalhes. O gamute [3] da imagem é de apenas duas cores (#000000 e #010101).

Vamos mostrar um exemplo da mesma mensagem escondida dentro da imagem do velho. Dessa vez usando apenas a quantidade de dados suficiente para representar a informação: dois pixels.

Acreditem se quiser, no pixel [185, 212] e no [185, 213] existe a mensagem “teste” escondida na formação da cor.

Pixel 1 = (0×54 = ‘T‘, 0×45 = ‘E‘, 0×43 = ‘S‘)
Pixel 2 = (0×54 = ‘T‘, 0×45 = ‘E‘, 0×00 ‘\0‘)

Com apenas dois pixels conseguimos esconder nossa mensagem. Além de ser difícil perceber visualmente, é complicado achar a posição dos pixels quem contêm a informação escondida.

Ainda estamos escondendo uma quantidade de informação relativamente pequena vamos agora trocar nossa mensagem “teste” por um texto com mais informações:

Through the wire screen, the eyes of those standing outside looked in
At her as into the cage of some rare creature in a zoo.
In the hand of one of the assistants she saw the same instrument
Which they had that morning inserted deep into her body. she shuddered
Instinctively. no life at all in the house of dolls.
No love lost. no love lost.

Esse texto possui apenas 324 bytes para serem escondidos em uma imagem de 7MB (56.000.000 de bytes), essa informação ainda ocupa muito pouco espaço na imagem portadora. Outro problema a ser abordado é a função que irá gerar a disposição da informação na imagem, pois se colocarmos todos os pixels seqüencialmente possivelmente o aspecto da imagem irá ser alterado e pode levantar suspeitas em nosso observador de que a imagem contém alguma informação oculta. Vamos usar um espiral logaritmo partindo do centro da figura como função para disposição da nossa informação.  Em coordenadas polares (r,θ) temos:

logarithmic spiral equation

Traduzindo a nossa mensagem para hexadecimal temos:

—–
65 20 63 61 67 65 20 6F 66 20 73 6F 6D 65 20 72 61 72 65 20 63
72 65 61 74 75 72 65 20 69 6E 20 61 20 7A 6F 6F 2E 0D 0A 49 6E
20 74 68 65 20 68 61 6E 64 20 6F 66 20 6F 6E 65 20 6F 66 20 74
68 65 20 61 73 73 69 73 74 61 6E 74 73 20 73 68 65 20 73 61 77
20 74 68 65 20 73 61 6D 65 20 69 6E 73 74 72 75 6D 65 6E 74 0D
0A 57 68 69 63 68 20 74 68 65 79 20 68 61 64 20 74 68 61 74 20
6D 6F 72 6E 69 6E 67 20 69 6E 73 65 72 74 65 64 20 64 65 65 70
20 69 6E 74 6F 20 68 65 72 20 62 6F 64 79 2E 20 73 68 65 20 73
68 75 64 64 65 72 65 64 0D 0A 49 6E 73 74 69 6E 63 74 69 76 65
6C 79 2E 20 6E 6F 20 6C 69 66 65 20 61 74 20 61 6C 6C 20 69 6E
20 74 68 65 20 68 6F 75 73 65 20 6F 66 20 64 6F 6C 6C 73 2E 0D
0A 4E 6F 20 6C 6F 76 65 20 6C 6F 73 74 2E 20 6E 6F 20 6C 6F 76
65 20 6C 6F 73 74 2E
—–

Podemos representar três números hexadecimais em um pixel. Isso nos dá aproximadamente 100 pixels. A nossa imagem tem 480×720 o centro dela fica em 240×360.

Homem velho e espira

Homem velho e espira Disposição

Mesmo com uma mensagem com muito mais informação, a imagem ainda continua indistinguível da original quando observada a olho nu.

Homem velho e mensagem espiral

Homem velho e mensagem espiral

Podemos ainda complicar mais nosso algoritmo para esconder mensagens, usando apenas um espectro de cor da imagem escolhida. De acordo com o padrão RGB toda imagem digitalizada e colorida pode ser representada pela combinação de três matrizes representando as cores primárias R = Vermelho, G = Verde, B = Azul. Com algum software de processamento digital de imagens como o matlab [4] ou o scilab [5] pode separar as matrizes primárias de uma imagem e modificar apenas a correspondente a uma cor. Isso diminui a quantidade de dados armazenada por pixel, porém torna a possibilidade de detecção de mensagem escondida muito menor.

Cada cor é representada por uma matriz com elementos que possuem valores que mostra a intensidade da cor representada em um byte (0 à 255). A matriz de cada cor pode ser exibida como uma imagem em tons de cinza e a junção das três matrizes nos resulta em uma imagem colorida.

Homem velho RGB

Homem velho RGB

Podemos inserir a informação dentro de uma matriz de uma cor específica a diferença agora é que temos apenas um byte por pixel em toda a matriz e a informação segredo ficará mais espalhada pela imagem final. No nosso experimento inserimos a mensagem dentro da matriz referente à cor vermelha, isso com a disposição apontada pela função espiral usada no exemplo anterior. Notamos que houve uma alteração quase que imperceptível na imagem experimento.

Homem velho com a matrix de vermelho com a mensagem repetida quatro vezes.

Homem velho com a matriz de vermelho com a mensagem repetida vinte vezes.

Podemos alternar a matriz em que inserimos os dados numa ordem pseudo-aleatória em que o receptor sabe a semente para determinar a sequencia. Em fim, existem muitas técnicas ainda não exploradas e que podem se usadas para usar uma informação como portadora para algum segredo. Também é possível antes de inserir os dados na imagem cifra-los com algum algorítimo assimétrico o que dificulta o processo reverso para tentar achar o segredo escondido na informação.

Na minha opinião, as técnicas de estaganografia apresentam um grande desafio para a segurança da informação. Pois permitem atacantes esconder dados e fazer túneis explorando limitações físicas humanas (Brain Hacking) e que dificulta muito a análise forense de um conteúdo comprometido. Acho que à medida quse torna popular os recursos multimídia na rede como o Youtube, Google vídeos ou Picasa, uma nova geração de ferramentas estão sendo criadas para fazer uso de técnicas de esteganografia para ocultar informações e distribuí-las por um canal popular e de difícil detecção. A demanda por profissionais de segurança especialistas nessa área tende a crescer, ajudando a criar mecanismos de controle de integridade de conteúdo e ferramentas para auxílio a análise forense.

Referências:
[1] DPI: Dot per inches = Pontos por polegada. Uma polegada possui 2,5 cm. Unidade de densidade de resolução.
[2] Pixels: Uma definição bem simples e suficiente para os nossos experimentos é a de pixel como um pequeno quadrado formado por uma única cor.
[3] Gamute: Quantidade de cores diferentes de uma imagem.
[4] Matlab – http://www.mathworks.com/
[5] Scilab – http://www.scilab.org/

  1. pslacerda
    September 10th, 2009 at 20:52 | #1

    Ótimo artigo, dá um panorama legal sobre a esteganografia. Eu, como leigo, não vejo possibilidade de obter o texto sem o algoritmo e a semente; vc q trabalha nessa área vê?

    Caí aqui de paraquedas procurando sobre o GBD. Tá de parabéns pelo blog, ainda mais tão jovem, haja inteligência =p

  2. pslacerda
    September 10th, 2009 at 20:59 | #2

    Fica chato usar como referência um blog, saca?, já pensou por um wordpress naquele relato de experiência? Ainda bem que o www.*.com disfarça. rsrs

  3. Marcos Álvares
    September 11th, 2009 at 03:36 | #3

    Oi placerda,
    Obrigado pelo comentário. Rapaz, realmente sem a semente e o algoritmo não tem forma trivial de recuperar a mensagem da imagem. O que a turma faz é criptoanálisse. Pega a imagem e executa uma base de reconhecimento de padrão para tentar descobrir qual o algoritmo e um ataque de exaustão (força bruta) para descobrir a semente. É bem trabalhoso, tendo em vista que existem milhares de combinações de como posicionar os dados na imagem e sementes. Tou estudando uma “parada” legal que dá para misturar com esteganografia para fazer funções de formação mais complexas que é automatos celulares e fractais formados por estes. Pode ser uma boa iniciar um estudo disso. Valeu.

  1. No trackbacks yet.