quinta-feira, 1 de maio de 2014

Lena (ou Lenna), mapa de bits e esteganografia

Lena (ou Lenna, finalmente um rosto bonito no blog!), imagem realmente original aqui.
É possível "esconder" uma informação (texto, por exemplo) em uma imagem. A técnica de esconder informações se chama esteganografia (do grego "escrita escondida") e pode ser considerada como uma forma de criptografia de dados. Como é possível ocultar uma informação na imagem? A imagem não será alterada? A informação fica mesmo "invisível"?

Para entender esse processo é melhor olhar mais de perto uma imagem digitalizada. Para simplificar, vamos analisar uma imagem no formato "bmp" e em 256 tons de cinza como, por exemplo, a imagem de Lena acima (a escolha foi pura coincidência?). Para saber a interessante história de como essa senhorita (do início dos anos 1970) se tornou uma das imagens padrões para processamento de imagens, ver a história aqui e aqui.

Uma imagem digital é formada por um conjunto de pixels, cada pixel é representado por um byte (8 bits). Cada bit leva uma parte da informação de intensidade cor do pixel (do preto ao branco), como mostram os mapas de bits abaixo:

Os quatro bits mais significativos.
Bits menos significativos da imagem de Lena.
O conjunto dos bits (0 ou 1) menos significativos se comportam, aproximadamente, como um ruído uniforme de média 0,5008850 e variância 0,2500002 (é isso mesmo, eu calculei), logo, se eles forem substituídos por um outro conjunto de bits com média aproximadamente 0,5 e variância 0,25, a imagem ficará praticamente inalterada e será muito difícil uma detecção da mensagem codificada.

A mensagem que se deseja ocultar precisa ser quebrada em bits e esses bits inseridos como o bit menos significativo de cada pixel. Ok, concordo, isso dá um certo trabalho, mas é perfeitamente possível de ser feito. Para provar isso, mostro as imagens abaixo (trechos do mapa de bits menos significativos) uma "original", a outra com a informação (texto com 400 bits, 80 caracteres) escondida.
Acima, a imagem com a informação adicionada; abaixo a imagem original. Aparentemente temos um "código de barras" na borda da imagem, mas a informação não está escondida lá.
A informação foi inserida, bit a bit, na linha 502:
Preto: não houve mudança de bit, branco indica mudança de bit.

Um cálculo rápido: essa imagem de teste tem 512 x 512 = 262144 pixels, logo podemos inserir um texto com mais de 32 mil caracteres. O código Scilab para ler a imagem bmp, extrair os bits, inserir a informação e todos os outros cálculos pode ser solicitado por e-mail. Para saber mais sobre esteganografia, ver aqui.

Para concluir, uma imagem mais bem comportada e mais atual da senhora Lena Söderberg:

Nenhum comentário:

Postar um comentário