Browse Prior Art Database

Concealing Data within a Bitmap

IP.com Disclosure Number: IPCOM000111411D
Original Publication Date: 1994-Feb-01
Included in the Prior Art Database: 2005-Mar-26
Document File: 2 page(s) / 56K

Publishing Venue

IBM

Related People

Key, A: AUTHOR [+2]

Abstract

Described is a technique to conceal data within a program product for purposes such as identification of intellectual property or copyright protection. By placing hidden, often demonstrably redundant data, within a program, any direct copies can be identified in a court of law by disclosing such "fingerprints".

This text was extracted from an ASCII text file.
This is the abbreviated version, containing approximately 52% of the total text.

Concealing Data within a Bitmap

      Described is a technique to conceal data within a program
product for purposes such as identification of intellectual property
or copyright protection.  By placing hidden, often demonstrably
redundant data, within a program, any direct copies can be identified
in a court of law by disclosing such "fingerprints".

      Most bitmaps have three main parts: a header, a palette
consisting of 2N entries, and an array of bitmap bits.  To determine
the colour of a pixel, the bitmap bits for that pixel are extracted
and indexed into the palette to get a colour definition.  Data may be
hidden in an N bits-per-pixel image, by expanding the image to M+N
bits-per-pixel, and using the additional M bits-per-pixel to hold the
hidden data.  As a consequence, the palette size must increase from
2N to 2(M+N) entries.  By repeating the palette entries, 0..2N-1 2M
times 2(M+N) entries can be created.  The top M bits of each pixel
now are irrelevant in determining the colour of the pixel, and so the
hidden data has no effect on how the bitmap displays.  For example:

Given 4 bpp image, 4 pixels x 4 pixels (approx 8 bytes).
Given up to 8 bytes to file to hide.
Build a 8 bpp palette (256 entries) which is the 4 bpp palette (16
entries) repeated 16 times.
Read each 4-bit input pixel value and place it into the lower 4 bits
of each 8-bit output pixel.
Place hidden data in top 4 bits of each output 8-bit pixel.

In detail this becomes:

Input four bpp image, a red L on a yellow background.

width = 4, height = 4, bpp = 4

palette [16...