RSA (Rivest-Shamir-Adleman) is one of the first public-key cryptosystems and is widely used for secure communication. The RSA algorithm first generates two large random prime numbers, and then use them to generate public and private key pairs, which can be used to do encryption, decryption, digital signature generation, and digital signature verification. The RSA algorithm is built upon number theories, and it can be quite easily implemented with the support of libraries.

The learning objective of this lab is for students to gain hands-on experiences on the RSA algorithm. From lectures, students should have learned the theoretic part of the RSA algorithm, so they know how to generate public and private keys and can conduct operations, such as encryption, decryption, signature generation, and signature verification. This lab enhances student's learning by requiring students to conduct RSA operations on actual numbers, and see whether they can get the calculations right. This way, they are given a chance to apply the RSA theories learned from the class.

**VM version:**This lab has been tested on our`SEED Ubuntu-20.04`VM**Lab setup files**

- Supervised (closely-guided lab session):
**2 hours** - Unsupervised (take-home project):
**1 week**

- Udemy: Cryptography: A Hands-on Approach (§ 4)

- Computer & Internet Security: A Hands-on Approach, 3rd edition (§ 26)
- Computer Security: A Hands-on Approach, 3rd edition (§ 21)
- Internet Security: A Hands-on Approach, 3rd edition (§ 17)

Please give us your feedback on this lab using this feedback form. | |

The SEED Labs project is open source. If you are interested in contributing to this project, please check out our Github page: https://github.com/seed-labs/seed-labs. |