Introdução: Criptografia e Esteganografia
Na sociedade tecnológica contemporânea, a informação representa um bem de enorme valor, tanto para o governo, as empresas e os indivíduos em geral. Com o crescente nível de transmissões de dados por redes sujeitas à interceptação, como a Internet, é de grande relevância a busca de tecnologias que permitam a troca de informações confidenciais de forma íntegra e secreta.
Ao longo da história foram desenvolvidas diversas técnicas para se assegurar (e também burlar) o sigilo nas trocas de informações, compondo o ramo da ciência que hoje é chamado de Criptologia. Dentro da Criptologia, a Criptografia e a Esteganografia evoluíram como ramificações paralelas, porém de caráter complementar. Enquanto a Criptografia consiste em se tornar uma mensagem ilegível a um possível interceptador, a Esteganografia visa ocultar a existência da própria mensagem.
A Criptologia em geral se beneficiou enormemente com o advento dos computadores, que permitiram a implementação de algoritmos extremamente sofisticados, seguros e
consequentemente complexos. Produto desta nova era, a esteganografia digital, foco deste artigo, consiste em se ocultar informações, criptografadas ou não, em arquivos do computador, como imagens, áudio ou vídeo.
A linguagem
Python foi escolhida para a implementação dos exemplos deste artigo devido ser multiplataforma, nativa na maioria das distribuições
Linux e principalmente pela sua poderosa biblioteca de manipulação gráfica
PIL (Python Imaging Library), que fornece diversos métodos para processamento de imagens.
Imagens digitais e os bits menos significativos
As imagens digitais podem ser classificadas em duas categorias:
- Vetoriais: Constituídas por descrições geométricas em um sistema de coordenadas cartesianas. Sua principal característica é o redimensionamento sem perda de qualidade. O formato mais popular de imagem vetorial é o SVG.
- Bitmap: Definidas a partir de uma matriz de pontos finitos denominados pixels (a menor unidade que compõe este tipo de imagem). Quanto mais pixels são utilizados
para representar uma imagem, melhor é a sua qualidade. Exemplos de formatos de imagem bitmap são PNG, JPEG e GIF. A técnica de esteganografia que será descrita no presente artigo manipula os bits dos tons de cor de cada pixel da imagem, portanto, o tipo de imagem utilizado será o bitmap.
Em imagens bitmap, a representação das cores tipicamente se dá no padrão
RGB (Red, Green, Blue), sistema de cor que, como o próprio nome indica, utiliza combinações em diferentes níveis destas três cores (vermelho, verde e azul) para compor a gama cores que um pixel pode possuir.
Cada um dos três tons de cor que compõe um pixel é representado por um inteiro de 8 bits, o que proporciona 2 ^ 24 cores possíveis (algo em torno de 16 milhões de cores), com 24 bits por pixel. Alguns formatos de imagem como o PNG e o GIF permitem que se adicione transparência às imagens. Também chamada de camada alfa, no formato
PNG a transparência é definida em cada pixel, sendo também representada por 8 bits. Neste caso, o pixel possuirá 32 bits.
Dentre os bits que compõem cada pixel, alguns são modificados durante o processo de esteganografia da imagem, para que passem a armazenar alguns bits do dado
embutido. O bit menos significativo, do inglês
LSB (Least Significant Bit), é aquele que se encontra mais à direita da cadeia binária, já que quando invertido, o valor inteiro por ele representado sofre a alteração de apenas uma unidade. Este é o bit mais conveniente para o emprego da esteganografia, pois quando modificado produz alterações mínimas nas cores da imagem, praticamente imperceptíveis à visão humana.
A esteganografia LSB consiste em se ocultar os bits da informação a ser embutida nos bits menos significativos de cada um dos três tons que compõe a cor dos pixels.
Assim, cada pixel da imagem comporta 3 bits de informação, de onde se calcula a capacidade de "armazenamento" de informação da imagem como 3 vezes o número de pixels
que ela possui.
É interessante destacar que não ocorre alteração no tamanho da imagem após a esteganografia, uma vez que os bits menos significativos terão apenas seu valor alterado pelo valor da informação embutida, não havendo, portanto, inserção de bits extras. Eventualmente, mais bits ou até mesmo a camada alfa podem ser modificados para aumentar a capacidade de armazenamento de informação em cada pixel. Entretanto, quanto mais bits forem modificados, maiores as chances da técnica ser descoberta, visto que as
alterações se tornarão mais perceptíveis aos olhos humanos.
Como todos os arquivos digitais são representados sob a forma de bits, é possível ocultar qualquer arquivo (documentos de texto, outras imagens, áudio, etc.) em uma
imagem utilizando a técnica LSB, desde que respeitada a proporção entre os tamanhos da informação a ser embutida e da imagem.
A Figura 1 esquematiza o funcionamento da esteganografia LSB, onde a string "Tux" é embutida em uma imagem com o logotipo da linguagem Python.
Conforme já foi mencionado, a mensagem deve estar representada sob a forma de bits para ser embutida na imagem. Assim, o código
ASCII de cada letra é convertido em binário, e cada pixel tem seus três bits menos significativos substituídos por três bits da mensagem.
Figura 1