Topic outline
-
-
Time: 50 hours
-
Free Certificate
-
-
This unit serves as the starting point for diving into the field of cryptography. Examples introduced in this unit will be referred to and expounded upon later in the course. You should use this material to gain familiarity with terminology and overarching concepts. Important ideas to pay attention to are cryptographic keys and the various approaches to encrypting and decrypting messages. Later, you will see that many more advanced techniques are simply variations and compositions of the concepts introduced in this unit.
Completing this unit should take you approximately 5 hours.
-
This material is essential for starting your journey into cryptography and network security. After this section, you should understand the field well, including important terms and concepts that will come up again in the course.
-
Learning about different ways to encrypt data streams is a basic part of cryptography. This section looks at and compares the blocking and streaming methods for encryption. It is important to be familiar with bit streams and bitwise boolean operations like the exclusive or operation.
-
At the heart of cryptographic systems is the idea of replacing a plain text symbol with a different one. In this section, you will learn about different methods of using the substitution cipher. The examples provided are simple to help you understand the concept easily.
-
In cryptography, another key process is permuting or rearranging the plaintext symbols. This section will teach you about different methods for using the transposition cipher. Like before, the examples in this first unit are very basic to help you understand the ideas.
-
The ability to randomize data is fundamental to cryptography. Here, you will explore concepts behind generating random numbers from a theoretical and practical standpoint. We are now at a point in the course where we can discuss implementations using Python, so pay close attention to the coding examples presented.
-
Before we finish this unit, we will discuss the concept of perfect secrecy and the system that can achieve it. You already know about random numbers, so understanding the one-time pad will be easy. Remember, you can only use the random key once – that's why it's called a "one-time" pad.
-
Hash functions are an amazing tool that can convert messages of variable length into shortened digests of fixed length. As you will see in this and subsequent units, this process is useful for blockchain and message authentication applications. You will learn about principles of hash function design, such as collision resistance and the avalanche effect. Additionally, practical implementations such as SHA will be introduced to exercise your programming experience.
Completing this unit should take you approximately 6 hours.
-
Hash functions are key in network security and cryptography, so we cover them early in our course. Read this section to learn about their function and uses.
-
A crucial feature of a reliable hash function is its low chance of producing the same hash code for two different messages, known as its ability to resist "collisions". Study this material to learn how to prevent such collisions.
-
Cryptographic systems should be modular and easy to implement. The Merkle-Damgard construction offers a practical way to achieve modularity in designing hash functions. Focus on understanding the iterative process of this design method.
-
SHA is a very popular standard for hash function implementation. Try to spot the key terms and concepts we have discussed in this unit. Make sure to master the Python implementation of these ideas.
-
Blockchain is a technology linked to network security and cryptography. This section gives an overview of blockchain and describes how hash functions play a key role in how it works.
-
Now, let's explore the next step in our cryptography journey: symmetric cryptosystems. These systems use one key for both hiding and revealing information. Remember how we introduced different codes in Unit 1? We can now make more complex systems by combining transposition and substitution ciphers. Product and Feistel ciphers are examples of this. In this unit, you will also get to know some specific systems like the data encryption standard (DES), the advanced encryption standard (AES), and triples DES (3DES). Pay attention to a key feature of these systems: they are designed to be easy to use and build with basic digital tools.
Completing this unit should take you approximately 6 hours.
-
Now that you have a basic idea regarding cryptosystems, key spaces, bit streams, and randomization, it is time to get into the details of symmetric system design. Use this material to review and reinforce key concepts as we begin the deeper dive.
-
The Feistel cipher is an important starting point for understanding symmetric system design concepts, such as forming more complex systems by successively applying the same basic structure. This subunit will prepare you to apply variations on the Feistel cipher theme.
-
Now that you've learned a lot in the course, it's a good time to show how to create a symmetric cryptosystem. Once you understand how this one works, it'll be easier to understand fancier ones later.
-
Even though DES is good for instructional purposes, more advanced methods are needed to keep up with advances in computational power. Cryptosystem designs must constantly outrun the possibility of a brute-force attack on the key space. Systems like AES have been developed to keep your information safe.
-
Even though DES is not computationally secure, different versions have been developed to address and fix its problems. This section discusses one of those variations.
-
In contrast to symmetric key cryptosystems, asymmetric or "public key" cryptosystems use different keys for encryption and decryption. Such systems have widespread application in many encryption and key distribution systems. Before we talk about RSA, our first example of a public key cryptosystem, you need to understand some simple math ideas. Most public key secret codes are safe because they rely on tricky math problems that are hard to solve without the right key. In this unit, you will learn about one of those problems, factoring, and see how RSA uses it to make a secret code.
Completing this unit should take you approximately 7 hours.
-
It is now time to discuss asymmetric cryptosystems. Such systems are considered safe because they rely on tricky math problems. We will discuss several types in this course, and our first example will focus on the RSA cryptosystem.
-
On the surface, the RSA cryptosystem is fairly straightforward as it only involves exponentiation within a congruence. Use this subunit to familiarize yourself with the details of encryption and decryption. We will then walk you through the more subtle details of why the system is computationally secure and the math behind the system.
-
Security of the RSA cryptosystem is based upon the computational difficulty of factoring integers. Use this material to learn about various approaches to the factoring problem and Python implementations for factoring integers.
-
Many public key cryptosystems take place using congruences modulo n. Use this material to solidify your understanding of the algebra behind this mathematical system.
-
The Euclidean algorithm is highly applicable in many areas of cryptography, discrete mathematics, and abstract algebra. This material will help you to understand its application and provide insights into its implementation in Python.
-
The extended Euclidean algorithm is another important number theoretic piece to understanding the RSA puzzle. Make sure to compare and contrast this generalization with the Euclidean algorithm of the previous subunit.
-
This subunit clarifies why exponentiation within a congruence can be used as a building block for a public key cryptosystem. Make sure to follow the reasoning flowing from Fermat's Little Theorem to its generalization using the Euler Totient Function. Also, consider how the Euclidean algorithm can be useful in practice for numerically checking the conditions of these theorems.
-
As you can see, the material in this unit is partly theoretical and partly practical. While discussing exponentiation within a congruence is a nice theoretical exercise, cryptosystems require efficient implementations. Use the material in this subunit to understand how to efficiently exponentiate within a congruence.
-
Integer factorizations, congruences, Euclidean algorithms, inverses modulo p, Fermat, Euler, repeated squaring – what a journey! We are finally here. It is now time to put all the RSA pieces together and for implementation using Python.
-
This unit explores message integrity, confidentiality, authentication, and non-repudiation. We will analyze various architectures employing symmetric cryptography, asymmetric cryptography, and hash functions, so this material is highly dependent upon material from Units 1–4. You will learn about MACs (message authentication codes) and their use. You will also see how hash functions can be applied within a MAC. Finally, you will learn how digital signatures and certificates can establish non-repudiation.
Completing this unit should take you approximately 6 hours.
-
Before diving into the details, let's begin by connecting our cryptographic concepts with concepts from network security.
-
Up to this point, you have been introduced to network security techniques and concepts dealing with confidentiality (such as by applying encryption and decryption). In this unit, you will learn how to include authentication and integrity using various architectures and configurations involving symmetric and asymmetric cryptography and hash functions.
-
Hash functions were introduced early in this course as they are important to many aspects of cryptography and network security. Use this material to understand how encryption can be mixed with hash function to design strong MACs.
-
As the last step in this unit, you will see how to achieve non-repudiation using digital signatures and certificates. Notice how the public key system does not need to be specified to understand the concept, as there are many choices and standards for this application. Stay focused on how non-repudiation is achieved; then, you can focus on the implementation.
-
One issue with symmetric key cryptography is that everyone needs the same key. Sharing keys isn't a big deal if it's just your neighbor. But if you need to send keys far away, it gets tricky. Public key cryptography solves this by using different keys for hiding and revealing information. So, one way to share keys far away is by using a public key system to hide them. In this part of the course, you'll learn about the Diffie-Hellman system for sharing keys. It's based on a tricky math problem called the discrete logarithm problem (DLP), so we'll go over some basic math ideas you'll need to understand this part of secret codes.
Completing this unit should take you approximately 3 hours.
-
Before jumping into the details of a new public cryptosystem, we will need to expand our understanding of congruences. In this subunit, you learn more details and terminology that will prove useful for this and upcoming units. Pay close attention to the concept of a generator and the order of an element.
-
Here is another instance of a number theoretic problem that is considered to be computationally difficult. Notice how concepts from group theory come into play in defining the discrete logarithm problem (or DLP).
-
One major reason for developing public key systems is to solve the key exchange and distribution problem. Once keys are securely distributed, it becomes possible to apply symmetric systems, which tend to be simpler and computationally faster. The subunit discusses a historically important technique for solving the key distribution problem.
-
Cryptosystems keep improving to make systems both faster and safer. You have already learned about two tricky math problems (factoring and the DLP) that led to RSA and the Diffie-Hellman public key systems. Elliptic curve public key systems were created to be just as safe but using smaller numbers of bits. In this unit, you will learn how group theory applies to operations on elliptic curves. This math naturally leads to the elliptic curve discrete logarithm problem (ECDLP), which offers better security using fewer bits than the discrete logarithm problem.
Completing this unit should take you approximately 4 hours.
-
The concept of an elliptic curve is quite general. In cryptography, elliptic curves are computed over congruences and finite fields. Use the material in this subunit to familiarize yourself with concepts associated with elliptic curves.
-
By this point, it should be clear that using elliptic curves within congruences can lead to systems with a rich algebraic structure. The material in this subunit will generalize your concept of algebraic operations to more abstract forms of addition and multiplication.
-
Given your understanding of elliptic curves, we can now discuss deeper applications. For example, the discrete logarithm problem (DLP) can be elevated to the elliptic curve discrete logarithm problem (ECDLP). Use the material in this subunit to explore various cryptographic generalizations and Python implementations.
-
Zero-knowledge proofs (ZKPs) have gained widespread attention given, for example, their use in Ethereum blockchain applications. Such proofs involve techniques where one party proves to a verifier that a specific statement is true. Amazingly, at no time does the prover disclose any information to the verifier beyond the statement's truth. The challenge is to prove the knowledge of a piece of information without revealing any of its aspects. In this unit, you will learn some basic models for ZKPs. In addition, you will study the implementation of a basic type of ZKP known as a SNARK.
Completing this unit should take you approximately 3 hours.
-
We begin the discussion of ZKPs with a series of basic examples. Your main goal is to grasp the concept before we delve more deeply into this subject.
-
This subunit focuses on zkSNARKS and how they are implemented. In general, this subject can involve tricky math. However, some ZKPs are easier to understand with basic knowledge of high school algebra. Use this subunit to take a deeper dive into the world of SNARKs.
-
The actual use of ZKPs in real-world systems is starting to happen more and more. One such use is in blockchain technology and, specifically, in Ethereum applications. Use this material to learn about Ethereum technology and potential uses of ZKPs.
-
You have already seen the key distribution problem solved using public key techniques. In this unit, you will be introduced to quantum key distribution (QKD), or what was originally called "quantum cryptography" by some of the idea's creators. Technology for quantum communications has been developing rapidly. QKD applies principles from quantum physics to find out if someone has accessed secure data (such as a key) sent between a sender and receiver. Before learning about the BB84 standard, you will need to master some fundamental concepts, such as quantum measurement and the Heisenberg uncertainty principle.
Completing this unit should take you approximately 4 hours.
-
QKD is a quantum technology often implemented using technology involving light. This subunit introduces the basics of how light works at the quantum level. It will help you understand the QKD protocols introduced in this unit.
-
Historically, the BB84 protocol was one of the first attempts at developing a QKD system. This subunit introduces this protocol. More importantly, it will exercise your understanding of photon polarization and the effects of quantum measurement.
-
As with any new technology, new approaches born from the original idea are always developed. QKD technology has come a long way since when it was first created. This subunit provides an overview of more recent developments.
-
This final unit of this course addresses newer developments in the cryptography field that could challenge classical public key systems based upon factoring, discrete logarithms, or elliptic curve discrete logarithms. You will be introduced to algorithms designed for a quantum computer. After an introduction to operators and search problems for quantum computation, Shor's algorithm will be discussed. This is so that you can see an example of how a quantum attack could break the RSA cryptosystem.
Completing this unit should take you approximately 6 hours.
-
The field of quantum computation is vast. In this subunit, you will be introduced to some concepts and operators relevant to cryptographic applications. The main point is that quantum computer programs must be reversible. Pay attention to the mathematics, as this means that quantum computation operators must be unitary.
-
Since quantum computers are highly parallel, algorithms have been created to challenge their classical versions. In this subunit, you will be introduced to search problems for which efficient quantum algorithms exist.
-
The Shor algorithm demonstrates how a quantum computer can efficiently solve the factoring problem. Assuming enough qubits are available, the RSA cryptosystem would be vulnerable in a post-quantum world.
-
Please take a few minutes to give us feedback about this course. We appreciate your feedback, whether you completed the whole course or even just a few resources. Your feedback will help us make our courses better, and we use your feedback each time we make updates to our courses. If you come across any urgent problems, email contact@saylor.org.
-
Take this exam if you want to earn a free Course Completion Certificate.
To receive a free Course Completion Certificate, you will need to earn a grade of 70% or higher on this final exam. Your grade for the exam will be calculated as soon as you complete it. If you do not pass the exam on your first try, you can take it again as many times as you want, with a 7-day waiting period between each attempt. Once you pass this final exam, you will be awarded a free Course Completion Certificate.