Learn how you can become a Python programmer in just 12 weeks.

    We respect your privacy. Unsubscribe at anytime.

    How Caesar Cipher Teaches us the Most Valuable Lesson – Learn Kerckhoff’s Principle in 5 Steps with Python Code

    What will we cover?

    • Understand the challenge to send a secret message
    • Understand the Caesar Cipher
    • How to create an implementation of that in Python
    • How to break the Caesar Cipher
    • Understand the importance of Kerckhoff’s Principle

    Step 1: Understand the challenge to send a secret message

    In cryptography you have three people involved in almost any scenario. We have Alice that wants to send a message to Bob. But Alice want to send it in a way, such that she ensures that Eve (the evil person) cannot understand it.

    But let’s break with tradition and introduce an addition person, Mike. Mike is the messenger. Because we are back in the times of Caesar. Alice represent one of Caesar close generals that needs to send a message to the front lines of the army. Bob is in the front line and waits for a command from Alice. DO ATTACK or NO ATTACK.

    Alice will use Mike, the messenger, to send that message to Bob.

    Alice is of course afraid of that Eve, the evil enemy, will capture Mike along the way.

    Of course, as Alice is smart, she knows that Mike should not understand the message he is delivering, and Eve should not be able to understand it as well. It should only add value to Bob, when Mike gives him the message.

    That is the problem that Caesar wanted to solve with his cipher system.

    Step 2: Understand the Caesar Cipher

    Let’s do this a bit backwards.

    You receive the message. BRX DUH DZHVRPH

    That is pretty impossible to understand. But if you were told that this is the Caesar Cipher using the shift of 3 characters. Then maybe it makes sense.

    As you can see, then green letters are the plaintext characters and the red letters are the encrypted cipher text letters. Hence, A will be a D. That is the letter A is shifted 3 characters down the row.

    Reversing this, you see the the encrypted B, will map to the plaintext Y.

    If you continue this process you will get.

    That is a nice message to get.

    Step 3: How to create an implementation of that in Python

    Well, that is easy. There are many ways to do it. I will make use of the dictionary to make my life easy.

    def generate_key(n):
        key = {}
        cnt = 0
        for c in letters:
            key[ c] = letters[(cnt + n) % len(letters)]
            cnt += 1
        return key
    def get_decryption_key(key):
        dkey = {}
        for c in key:
            dkey[key[ c]] = c
        return dkey
    def encrypt(key, message):
        cipher = ""
        for c in message:
            if c in key:
                cipher += key[ c]
                cipher += c
        return cipher
    # This is setting up your Caesar Cipher key
    key = generate_key(3)
    # Hmm... I guess this will print the key
    # This will encrypt the message you have chose with your key
    message = "YOU ARE AWESOME"
    cipher = encrypt(key, message)
    # I guess we should print out your AWESOME message

    Step 4: How to break the Caesar Cipher

    If you look at it like this. There is a flaw in the system. Can you see what?

    Yes, of course you can. We are in the 2020ies and not back in the times of Caesar.

    The key space is too small.

    Breaking it basically takes the following code.

    # this is us breaking the cipher
    for i in range(26):
        dkey = generate_key(i)
        message = encrypt(dkey, cipher)

    You read the code correct. There are only 26 keys. That means, that even back in the days of Caesar this could be done in hand.

    This leads us to the most valuable lesson in cryptography and most important principle.

    Step 5: Understand the importance of Kerckhoff’s Principle

    Let’s just recap what happened here.

    Alice sent a message to Bob that Eve captured. Eve did not understand it.

    But the reason why Eve did not understand it, was not because she did not have the key.

    No, if she knew the algorithm.

    Yes, if Eve knew the algorithm of Caesar Cipher, she would not need the secret key to break it.

    This leads to the most important lesson in cryptography. Kerckhoff’s Principle.

    Eve should not be able to break the ciphers even when she knows the cipher.

    Kerckhoff’s Principle

    That is seems counterintuitive, right? Yes, but think about it, if you system is secure against any attack even if you reveal your algorithm, then it would give you more confidence that it is secure.

    You security should not be based on keeping the algorithm secret. No it should be based on the secret key.

    Is that principle followed?


    Most government ciphers are kept secret.

    Many secret encryption algorithms that leaked were broken.

    This also includes the one used for mobile traffic in the old G2 network. A5/1 and the export version A5/2.

    Python Circle

    Do you know what the 5 key success factors every programmer must have?

    How is it possible that some people become programmer so fast?

    While others struggle for years and still fail.

    Not only do they learn python 10 times faster they solve complex problems with ease.

    What separates them from the rest?

    I identified these 5 success factors that every programmer must have to succeed:

    1. Collaboration: sharing your work with others and receiving help with any questions or challenges you may have.
    2. Networking: the ability to connect with the right people and leverage their knowledge, experience, and resources.
    3. Support: receive feedback on your work and ask questions without feeling intimidated or judged.
    4. Accountability: stay motivated and accountable to your learning goals by surrounding yourself with others who are also committed to learning Python.
    5. Feedback from the instructor: receiving feedback and support from an instructor with years of experience in the field.

    I know how important these success factors are for growth and progress in mastering Python.

    That is why I want to make them available to anyone struggling to learn or who just wants to improve faster.

    With the Python Circle community, you can take advantage of 5 key success factors every programmer must have.

    Python Circle
    Python Circle

    Be part of something bigger and join the Python Circle community.

    Leave a Comment