Rating:

# RSA-OOPS

## Weird RSA based system

Application let's user encrypt flag with "RSA-OOPS" a limited amount of times with the same key.

The system seems to be an attempt at encrypting message with secret random padding value at once by dividing keys and ciphertexts into two parts:

```
X = (m+pool_random)^eL (mod nL) # message "padded" with pool random
Y = X^dR (mod nR) xor pool_random # padding encrypted with separate key
```

## Size matters

Size of nR key (~200 bits) makes it possible to factor nR in a matter of seconds, retrieve dR, and calculate pool_random.

That leaves attacker with an ability to create messages in form of:
```
ct[x] = (flag+b[x])^e (mod n)
```
where b[x] (aka pool_random) is a random, but known value.

One way of retrieving encrypted message from that (having e ciphertexts, where e is the exponent (17 in this case)):
https://www.iacr.org/archive/pkc2005/33860001/33860001.pdf

## Solution

All that needs to be done is:
- get nR and factor it,
- gather 17 ciphertexts,
- retrieve pool_random for each ciphertext,
- run "algorithm 1" from paper above.

## Alternatives

There's at least one alternative way of retrieving flag from series of related ciphertexts:
https://link.springer.com/content/pdf/10.1007%2F3-540-68339-9_1.pdf
seems to allow to recover linearly related messages from just two ciphertexts (but the paper is more general, so it probably requires a bit more understanding to implement this attack).

Original writeup (https://gitlab.com/ja2142/n00bz-ctf-writeups/-/tree/master/crypto/RSA-OOPS).