RSA is an asymmetric cryptosystem that used public and private key pairs.

• Key Terms
• Encrypt / Decrypt
• Popular Tools
• Known Vulnerabilities
• Common Modulus

Key terms for crypto:

• Ciphertext – the encrypted data.
• Cipher – method of encrypting or decrypting data.
• Plaintext – the data before encryption.
• Encoding – a form of data representation, not encryption.
• Key – a piece of information needed to decrypt.
• Passphrase/password – used to protect a key.
• Cryptanalysis – attacking cryptography with math.
• Elliptic Curve Cryptography (ECC) – a more efficient encryption method than RSA.

Encrypt: Decrypt: Note:

• n is the modulus, and it is common on public and private keys.
• The public key is e and n.
• e is the public exponent or encryption exponent.
• The private key is d and n.
• d is the private exponent or decryption exponent.

Where:

• n = p * q
• p and q are large prime numbers.
• n is a number.
• m is the message.
• Not encrypted data.
• c is the cyphertext.
• Encrypted data.

The inverse is also true: the public key can decrypt if the data was encrypted with the private key.

Additionally: in a mod b = c, the value c is the reminder of the division of a by b.

Popular tools for solving RSA crypto challenges in CTFs.

Cracking the password/passphrase of an SSH private key with RSA encryption:

```wget https://raw.githubusercontent.com/openwall/john/bleeding-jumbo/run/ssh2john.py
python3 ssh2john.py id_rsa > id_rsa.hash
john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa.hash```

COMMONLY KNOWN WEAKINESS AND VULNERABILITIES

• Common Modulus – It is a rare case in the real-world but popular in CTF and great for understanding the concepts of RSA [Link].

It requires knowing:

• n
• c1 and e1
• c2 and e2
```git clone https://github.com/Ganapati/RsaCtfTool.git
python3 RsaCtfTool/RsaCtfTool.py --createpub -n MODULUS -e E1 > key1.pub
python3 RsaCtfTool/RsaCtfTool.py --createpub -n MODULUS -e E2 > key2.pub
sed -i '1d' key1.pub
sed -i '1d' key2.pub

# From Hex to Base64
echo C1 | xxd -r -p | base64 > ct1.b64
echo C2 | xxd -r -p | base64 > ct2.b64

wget "https://raw.githubusercontent.com/HexPandaa/RSA-Common-Modulus-Attack/master/rsa-cm.py"
python3 rsa-cm.py -h
python3 rsa-cm.py -c1 ct1.b64 -c2 ct2.b64 -k1 key1.pub -k2 key2.pub```