Simple methods
Basic Method
BICM: Text 1
BICM: Text 2
Recursive Method
RICM: Text
Real world uses
Using playing cards to store hidden data:
The Implied Card Method for
Encoding Data Into Playing Cards.

Simple encoding methods as an introduction to the idea:

Using the simplest method of encoding binary into playing cards, one pack of cards can represent 52 bits of data (or more if you use jokers and the instructions for playing bridge). The simplest method for encoding data is to treat a card facing forwards as a 1 and a card facing backwards as a 0. In this way the binary number 1001 (9 in decimal) would be represented by four cards: the first and last facing forwards and the middle two facing backwards:

This method would allow 52 bits of data to fit in one pack, but would also be fairly obvious to anyone looking for hidden data in the cards. 52 bits of data would allow for six 8-bit ASCII characters to be stored (e.g. 01000001 = "A"), or seven 7-bit ASCII characters to be stored (e.g. 1000001 = "A").

The cards could also be split into 4-bit numbers to represent reduced letter alphabet characters. For example if you only use the 16 most popular letters of the English alphabet in your messages (etaoinsrhldcumfp), and ignore the rest (gwybvkxjqz) then 4 cards can represent one letter. "e" would be 0000 (0 in decimal), "t" would be 0001 (2 in decimal) and so on. You could fit 13 letters of the alphabet into a pack in this way.

The numbers in the cards could also indicate entries in a code book. For example, 1011 could mean "Send help". However that type of code isn't relevant to what I'm trying to explain here.

Another simple method to encode data into a pack would be to mark the cards so that there was a difference between the tops and bottoms. Some packs have backs that indicate their orientation already. Those that don't could have one end slightly scuffed or rubbed against a candle. In this way the cards could all be facing the same way. An upwards pointing card could be 1, while a downwards pointing card could be 0. This would allow 52 bits of data and would be less obvious. We could mark which way up the whole pack should be by how we put it into the box, or by which way up the Jokers are.

These two methods could be combined to allow two completely independent strings of 52 bits of data. There can be a sequence of cards in the front/back method and one in the up/down method. The two methods could also be combined so that each card is in 1 of 4 states: Facing forwards & pointing up, facing forwards & pointing down, facing backwards & pointing up, facing backwards & pointing down. In this way the cards are essentially indicating Base 4 numbers. One card can represent one of four numbers at a time: 0, 1, 2 or 3; two cards can represent 16 Base 4 numbers: 00, 01, 02, 03, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33; three cards can represent 64 numbers and so on. Just two cards would be needed to represent a letter in the reduced 15 letter alphabet.

Both these methods are adequate, but they can't hold much data and they tend to look like they are hiding something. When combined to produce Base 4 data it's possible to hold a lot of data, but it is incredibly cumbersome to actually use that system. There is probably much more that could be explored with the Base 4 method but I'll leave it for now in order to concentrate on my main idea.

The following method is fairly straightforward, the cards can all face the same way, it is far from obvious to someone who doesn't know how it works, it can hold more than 52 bits of data, and more importantly it lends itself perfectly to one-time pad encryption.

Previous page    Next page