Criptografia Numaboa
LSB - Técnica dos bits menos significativos
Seg 21 Mar 2005 19:10 |
- Detalhes
- Categoria: Papers
- Atualização: Terça, 14 Abril 2009 13:23
- Autor: vovó Vicki
- Acessos: 8125
LSB, ou Least Significant Bit, é o bit menos significativo de um byte.
O formato BMP 24 bits
Nas imagens em formato BMP (bitmap) de 24 bits, por exemplo, cada pixel é representado por três bytes que determinam a quantidade de vermelho (Red), de verde (Green) e de azul (Blue). É por isto que este padrão de cores é chamado de RGB. O bmp é de 24 bits porque precisa de três bytes, cada um de oito bits (3 x 8 = 24), para especificar a cor de cada pixel.
Um byte pode expressar valores de 0 a 255, portanto, cada pixel pode ter 256 valores de vermelho associados a 256 valores de verde e a 256 valores de azul. A combinação destes valores, 256 x 256 x 256 = 16.777.216, permite que cada pixel assuma uma entre as mais de 16 milhões de cores possíveis.
Se apenas o bit menos significativo de cada byte for alterado, o valor deste byte aumenta ou diminui em uma unidade, ou seja, altera-se o valor da cor em apenas 1/256. Esta diferença é tão pequena que não pode ser detectada a olho nu. Para exemplificar, observe as cores abaixo:
A cor da esquerda tem 255 de vermelho, zero de verde e zero de azul; a da direita tem 254 de vermelho e zero de verde e de azul. Note que é praticamente impossível notar alguma diferença. É justamente esta característica que pode ser aproveitada para esconder informações numa imagem BMP de 24 bits ou outro formato qualquer que use bytes para caracterizar seus pixels.
EXEMPLO DE OCULTAÇÃO LSB
Se quisermos esconder a palavra SEGREDO numa imagem BMP, vamos precisar de 56 bytes, dos quais usaremos apenas o bit menos significativo. A explicação é simples. Cada uma das letras da palavra tem um valor ASCII que é representado por um byte, ou seja, 8 bits. Isto é o mesmo que dizer que cada letra vai usar 8 bits menos significativos, portanto, serão precisos 8 bytes de pixel para "emprestar" os bits que cada letra precisa. Como a palavra possui sete letras, tomaremos emprestados os bits menos significativos de 7 x 8 = 56 bytes. Como numa imagem BMP de 24 bits cada pixel é representado por três bytes, a imagem precisa ter no mínimo 19 pixels (56/3 = 18.6666) para que possa esconder a palavra SEGREDO - na verdade, uma imagem muito pequenininha.
Para a coisa ficar mais clara, vamos a um exemplo de como esconder apenas a letra S, que tem o valor ASCII 83, numa imagem que seja vermelho=255, verde=0 e azul=0. Em primeiro lugar, vamos expressar o valor de S em bits:
S = 83 decimal = 53 hexadecimal = 0101 0011 binário
Esta é a sequência de bits que precisam ser inseridos nos bits menos significativos dos bytes dos pixels da imagem. Agora vamos expressar o valor dos bytes dos pixels em binário (os bits menos significativos estão destacados em vermelho):
Vermelho = 255 decimal = FF hexadecimal = 1111 1111 binário Verde = 0 decimal = 00 hexadecimal = 0000 0000 binário Azul = 0 decimal = 00 hexadecimal = 0000 0000 binário
Usando apenas os valores binários dos bytes dos pixels da imagem, teríamos uma longa sequência dos seguintes bits:
|- 255 -| |-- 0 --| |-- 0 --| |- 255 -| |-- 0 --| |-- 0 --| 1111 1111 0000 0000 0000 0000 1111 1111 0000 0000 0000 0000 ...
Colocando estes bytes em colunas e trocando os bits menos significativos pelos bits que compõem o valor ASCII da letra S temos o seguinte:
Sequência de bits da letra S = 0101 0011 Valor original Valor ajustado |-----------------|-----------------| |---- Byte do vermelho | 1111 1111 | 1111 1110 | Pixel Byte do verde | 0000 0000 | 0000 0001 | |---- Byte do azul | 0000 0000 | 0000 0000 | |---- Byte do vermelho | 1111 1111 | 1111 1111 | Pixel Byte do verde | 0000 0000 | 0000 0000 | |---- Byte do azul | 0000 0000 | 0000 0000 | |---- Byte do vermelho | 1111 1111 | 1111 1111 | Pixel Byte do verde | 0000 0000 | 0000 0001 | |---- Byte do azul | 0000 0000 | |
Gostou da idéia? Parece perfeita, mas (e sempre existe um mas), apesar da aparente impossibilidade de se detectar alterações a olho nu, é possível mostrar a presença de dados ocultos em imagens de cobertura. Veja como no artigo "Detectando a presença de dados em imagens" nos Papers da Criptografia Numaboa.
Na seção de downloads, em Criptologia/Esteganografia, você encontra os programas InPlainView, Puff, ImageHide e stegoBMP. Todos usam a técnica LSB para esconder mensagens ou dados em imagens. Adicione-os à sua caixa de ferramentas criptológicas e brinque um pouco com este truque. Observando e comparando é que se aprende e se adquire prática.
Abraço a todos
vovó Vicki