Encrypted messages to kids

Crypto-WheelLast time I changed job, it meant an increase in commute (from 5 minutes to an hour) which also meant I would not see my kids every morning. So I picked up the habit (since then lost mind you) of setting the table for their breakfast and leaving them a note, wishing them a good day. Who knew that from a simple note, things would evolve to teaching encryption.
Of course, the simple note grew old over time so I started looking for alternatives. After trying the multi-color notes and various “analog” mediums, I turned to Bamboo Paper on the iPad and that provide several options. I also played around with a Boogie Board Rip and that provided an interesting alternative for a few days but it was short lived.

The note content varied from day to day. Some days it was a short simple “Love you both!” and other morning it was a good way to relay important news like the score of the prior night’s Giant game.

After a visit at the International Spy Museum in Washington DC, I decided I could also use the morning note as a teaching tool and set out to teach them about encryption. I baptized my project the “Crypto-Wheel” but later realized the name of such a device is usually Cypher-Disk. The kids helped me as we a fabricated the wheel and we made several improvements over time.

So the concept and instructions were easy, easy enough for my kids to follow:

  • The KEY is set by indicating the letter in WHITE, lined up with the BLUE letter “Q”.
  • Make sure to properly set the wheel to the right KEY before use.
  • Always encrypt from BLUE to WHITE
  • Always decrypt from WHITE to BLUE.

The first message I left they struggled a bit with. But they quickly got the hang of it. As they improved, the messages got longer and longer.

After missing my first train, trying to properly encrypt a message for the kids, I decided I needed a way to quickly produce encoded messages. Using Python, I wrote a short script which allowed me to encrypt or decrypt based on the randomness of this wheel. The result works well:

$ ./crypto_wheel.py --key=A --text="THIS IS MY STRING" -e
Clear : THIS IS MY STRING
Encrypted: GPXE XE QT EGCXSL

$ ./crypto_wheel.py --key=A --text="GPXE XE QT EGCXSL" -d
Encrypted: GPXE XE QT EGCXSL
Clear : THIS IS MY STRING

The script uses a rotate_string() function:

def rotate_string(alpha,spaces):
    letters = ['']
    for c in alpha:
        a = ord(c) - 65
        a = (a + spaces)%26 + 65
        a = chr(a)
        letters.append(a)
    return ''.join(letters)

And the letters used in the translation are rotated prior based on the key:

try:
        if (len(key) == 1):
            # Key is "White in front of Blue Q"
            spaces =  ord(key) - ord("A")
            letters = rotate_string(letters, spaces)

I dropped a full copy of the script at Github.

Meanwhile, my own use of the wheel has reduced as my habit of leaving notes did. This is probably something I should resume soon as it is a fun way to communicate with kids, teach them a thing or two and leave them with something fun before they’re off to school.

You can find more information on encryption for kids at NSA’s CryptoKids.

One thought on “Encrypted messages to kids”

Leave a Reply

Your email address will not be published. Required fields are marked *