The Austrian architect Adolf Loos (1870-1933) wrote Ornament and Crime. It is a celebrated polemic against the superfluity of ornament in the modern industrial age: “not only is ornament produced by criminals but also a crime is committed through the fact that ornament inflicts serious injury on people’s health, on the national budget and hence on cultural evolution” (21).
The cover of the Penguin edition shows a grey, lightly textured hand painted rectangle. It could be by Kazimir Malevich, but I can’t confirm until I get hold of a paper copy of the edition.
The least significant bits
The superfluity of ornament is a common theme in art, design and architecture. When it comes to structure, form, substance, and function the ornamentation is the least significant bit. It’s the part that can be adjusted or even removed without jeopardising the integrity of the whole. Yet it is capable of delivering substantial significance on behalf of the structure.
I’m thinking of traditional stone masonry, where the masons were given reign to shape and adorn those minor parts of the building. Brackets, bosses, capstones, and rainwater spouts could be carved as flowers, crests, tools, portraits, animals and grotesques. We might say these adornments introduced a layer of coded, and even secret, meanings. That’s about as far as I dare take the analogy with what follows here.
Here’s a photograph taken inside the concert hall in Luxembourg Philharmonic Hall by architect Christian de Portzamparc. The eye shape is not a watermark on the photograph, but a pattern painted onto the walls, floor and stairs.
Least significant bit
Computer files are made up of bit strings. A byte is 8 bits, and in a text file a byte represents a number that in turn converts to a text symbol. The Unicode standard provides a set of unique numbers for 143,696 characters in many languages plus 163 format symbols. The first 128 numbers cover the basic integers, alphabetic characters and format characters such as line breaks and spaces (called the ASCII set). Here’s the words “Ornamentation” in 8 bit binary. The spaces aren’t necessary, but make the 8 bit units (bytes) clearer. There’s a website (RapidTables) that provides this conversion. I also worked it out with an Excel spreadsheet.
01001111 01110010 01101110 01100001 01101101 01100101 01101110 01110100 01100001 01101100 00100000 00100000
If you change just one bit in a bit string then that can render the original unintelligible. Here I changed the last bit in each 8 bit string to its opposite, i.e. changed 1s to 0s and 0s to 1s to produce “Nso`ldou`m!!”. The result is just as meaningless if I change the first bit of each bit string, producing “œÚÓ·ÌÂÓÙ·Ï††”. Text characters are highly intolerant to noise, i.e. random adjustments to individual bits.
The same applies to numbers as characters. The Unicode 8-bit string for the character “9” is 00111001. Converted to decimals, that’s 57. “9” is the 57th character in the Unicode table. Changing the last bit in that bit string produces the character “8”. So that change can result in a significant error in a sentence like: “In an emergency call 999.”
Bit strings are numbers. A graphic data file will consist of bit strings that indicate pixel colour values as numbers, not characters. Here, the order of the bit string is important. Changes to bits on the left side alter the number significantly. Those on the right less so. Left bits are therefore more significant than those on the right.
1111111 = 255
1111110 = 254
01111111 = 127
If these are the values of a pixel in a grey scale (or colour) image, then a discrepancy in the last bit on the right will go unnoticed when the pixels are drawn on the screen.
Here’s how I surreptitiously inserted the word “Ornamental” in binary in a greyish rectangle. Here’s a fragment of a grey scale image. The grey scale colour value 1-255 appears in each cell.
Here are the pixel values in binary (on the left). The right version shows the same values with the right most bit set to 0. That slight change produces an imperceptible change to the colours in the image.
Here are the binary bits of the message “Ornamental” distributed across the same 10×10 array.
Next, these values are added to the grey image binary values. (Click to zoom in.) This is a the data that you would transmit as an image file. It contains the secret message.
If a binary string ends in 0 it is even; if it ends in 1 then it’s odd. The test for that is easy to automate in a spreadsheet, and that simple test will recover the hidden binary sequence. To proved the message is in there I reversed the process to extract the original message.
That’s one way that a steganographic procedure can conceal a text message in an image. The word “Ornamental” is innocuous, but not if the hidden word is a password to a bank account, a decryption key for a file, a watermark, or a trigger to activate some malware.
The hidden message could be any arbitrary string of code, including a hash code. Here the carrier image is just 10×10 pixels concealing 12 characters, but by my reckoning, a raw picture file of 3000×3000 pixels with 0-255 shades of RGB could hide a file of over 3 million characters, i.e. 3 books — less if you allow for error checking and compression.
- Anon. 2020. Binary to text translator. RapidTables. Available online: https://www.rapidtables.com/convert/number/binary-to-ascii.html (accessed 20 June 2020).
- Loos, Adolf. 1908. Ornament and Crime (PDF). Innsbruck, reprint Vienna, 1930, Archived from the original on 2015-04-03. Available online: https://web.archive.org/web/20150403175309/http://www2.gwu.edu/~art/Temporary_SL/177/pdfs/Loos.pdf (accessed 20 June 2020).
- Loos, Adolf. 2019. Ornament and Crime. London: Penguin