DSAN 5500: Data Structures, Objects, and Algorithms in Python
Thursday, March 19, 2026
Today’s Planned Schedule:
| Start | End | Topic | |
|---|---|---|---|
| Lecture | 6:30pm | 7:00pm | JupyterHub and Final Project → |
| 7:00pm | 7:30pm | Prefect Intro Part 2 → | |
| 7:30pm | 8:00pm | Data Mining Intro → | |
| Break! | 8:00pm | 8:10pm | |
| 8:10pm | 9:00pm | Data Mining in Parallel → |
The RSA public-key cryptosystem relies on the dramatic difference between the ease of finding large prime numbers and the difficulty of factoring the product of two large prime numbers [@cormen_introduction_2001, §31.7]
Bob encrypts \(M\) using Alice’s public key \(P_A\) and transmits the result \(C = P_A(M)\) over a communication channel to Alice. An eavesdropper who captures \(C\) gains no info about \(M\). Alice decrypts \(C\) using her secret key to obtain the original message: \(M = S_A(C)\)
\[ \begin{aligned} M &= S_A(P_A(M)) \\ M &= P_A(S_A(M)) \end{aligned} \]
The security of the RSA cryptosystem rests in large part on the difficulty of factoring large integers.
If an adversary can factor the modulus \(n\) in a public key, they can derive the secret key from the public key, using the knowledge of the factors \(p\) and \(q\) in the same way that the creator of the public key used them.
Therefore, if factoring large integers is easy, then breaking the RSA cryptosystem is easy.
The converse statement, that if factoring large integers is hard, then breaking RSA is hard, is unproven (\(P \overset{\smash{\small{?}}}{\small{=}} NP\))
DSAN 5500 Week 10: Cryptographic Hash Functions and Public-Key Cryptography