The Morse Code app can encrypt messages using Vigenère cipher. This page describes the concrete method used in the app including its pros and cons. You will also learn for what type of situations the cipher is suitable and when it should not be used.
Usage scenarios
This feature is useful mainly for games and for having a private conversation on a public channel where more people are listening. It is not suitable for transferring really sensitive information. Vigenère cipher is no match to modern cryptographic methods like AES. A determined attacker could write down your conversation and take some time to break it. If the message is sufficiently long, the chance of success is very high.
Why Vigenère cipher for Morse code
Now you probably ask why another much more secure encryption method has not been implemented in the app instead. The Vigenère cipher has many beneficial properties:
These properties make it much easier to send the encrypted message using Morse code. As mentioned, there are disadvantages that you should be aware of:
How does it work
Before we describe Vigenère cipher, we have to start with its simpler version - Caesar cipher.
Caesar cipher
It is one of the simplest ciphers, which just shifts all letters in the message by some fixed number of positions down the alphabet. The key (password) is the number of shifts.
The key 1 means that each letter in the message will be simply replaced by the next letter (one position down) in the alphabet (A → B and so on). The following example shows how the word "message" is encrypted using the key 1.
Plaintext | m | e | s | s | a | g | e |
---|---|---|---|---|---|---|---|
Ciphertext | n | f | t | t | b | h | f |
The next example shows again the word "message" but encrypted with the key 3.
Plaintext | m | e | s | s | a | g | e |
---|---|---|---|---|---|---|---|
Ciphertext | p | h | v | v | d | j | h |
If you reach the end of the alphabet (letter Z), you just return to its start again (letter A). For example, the letter "X" shifted by 5 positions becomes X → Y → Z → A → B → C.
If you need more examples or more technical description, please refer to Wikipedia.
The decryption process is also very simple. The letters are shifted in the same way but in the opposite direction.
Instead of a number of shifts, the key can also be represented by a single letter - for example, A=0, B=1, C=2, and so on. As you can see, this cipher is too simple for any practical use. The password is only a single letter A to Z so there are only 26 possible passwords. It would be trivial to try them one by one.
Vigenère cipher
Vigenère cipher is an extension of the Caesar cipher where the password can have multiple characters. The first letter of the message is encrypted with the first letter of the password, the second letter of the message with the second letter of the password and so on. When you reach the last letter of the password, you just start again from its first letter.
The following example shows the word "message" encrypted with the password "abc". The result is "mfusbie".
Plaintext | m | e | s | s | a | g | e |
---|---|---|---|---|---|---|---|
Password | a | b | c | a | b | c | a |
Shifts | 0 | 1 | 2 | 0 | 1 | 2 | 0 |
Ciphertext | m | f | u | s | b | i | e |
The more technical description can be found on Wikipedia
This section discussed the how Vigenère cipher works in general. The particular implementation can differ. The main difference would be the choice of the used alphabet. For this example, "a" to "z" has been chosen. This effectively means that the plaintext message cannot contain other characters such as numbers or punctuation. Various Vigenère cipher modifications can solve this problem by using another larger alphabet.
Another important difference is the method that maps the password letters to the number of shifts. In this example we used a simple mapping a=0, b=1, c=2, and so on until z=25. The disadvantage is that the password could contain only lower-case Latin letters and any other characters (such as numbers) would not be supported. There can be other versions of the cipher with a different mapping allowing the password to contain also other characters.
As a result of that, if you encrypt a message with Vigenère cipher in one app, it is possible that it you would not be able to decrypt it in another app if they use slightly different versions of the cipher.
Version of Vigenère cipher used in the app
The Morse Code app uses the following parameters for the encryption:
- Only letters and numbers are encrypted. Any other character is skipped. This means that spaces and punctuation will remain unchanged.
-
Two separate alphabets are used for encryption. One contains all letters in the currently selected Morse code
version. In case of International Morse Code this alphabet is "
abcdefghijklmnopqrstuvwxyz
". Another separate alphabet is used for numbers (specifically "0123456789
"). So a letter is mapped to another letter, and a number is mapped to another number. -
The first alphabet for letters depends on the Morse code version selected in the app settings. If you have selected one of the local versions
of the Morse code, the alphabet for letters will be derived from it (all single character letters will be taken from it in the same order
in which they are displayed in the app). For example, in case of Greek Morse code, the alphabet for letters used for encryption will be
"
αβγδεζηθικλμνξοπρστυφχψω
". This effectively means that only Greek letters (and numbers) would be encrypted in the message and any other characters (such as Latin letters) would be skipped. - If the message contains letters with accents and they are not present in the used alphabet, the accent is removed. For example, "é" is replaced with "e" before it is encrypted.
- The characters from the password are mapped to the number of shifts by their Unicode number. You can find the Unicode number for a character for example in this List of Unicode characters. For any character of the password found in the column Glyph, the corresponding number of shifts can be found in the column Decimal. We have used a very simple mapping (A=0, B=1, C=2, ...) for demonstration purposes on this page. However, as you can see in the mentioned table, the real mapping used in the app is A=65, B=66, and so on. It is not a problem, that the number of shifts is greater than the number of the letters in the alphabet - when we reach the end of the alphabet, we simply return to its beginning with the next shift. Using the Unicode number has a big advantage that you can use any possible character in your password. The password is also case-sensitive in the app. If you look in the mentioned table, you can see that the lower-case "a" has a different code (97) than the upper-case "A" (65).
The plaintext "message" encrypted with the password "abc" in the app will become "fynlubx"
Plaintext | m | e | s | s | a | g | e |
---|---|---|---|---|---|---|---|
Password | a | b | c | a | b | c | a |
Shifts | 97 | 98 | 99 | 97 | 98 | 99 | 97 |
Ciphertext | f | y | n | l | u | b | x |
We will finish the description with a more complex example when the message "It's a secret message." is encrypted with the password "abc". This results in the cihpertext "Bn'l v mzvlzm hxmntaz.".
Plaintext | I | t | ' | s | a | s | e | c | r | e | t | m | e | s | s | a | g | e | . | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Password | a | b | c | a | b | c | a | b | c | a | b | c | a | b | c | a | b | c | a | b | c | a |
Shifts | 97 | 98 | - | 97 | - | 99 | - | 98 | 99 | 97 | 98 | 99 | 97 | - | 99 | 97 | 98 | 99 | 97 | 98 | 99 | - |
Ciphertext | B | n | ' | l | v | m | z | v | l | z | m | h | x | m | n | t | a | z | . |
The apostrophe, spaces and period in the plaintext message are not encrypted because they are not present in the used alphabet (it is not possible to determine the following letter for them).