# The modulus of RSA public key

I am studying the RSA cryptosystem. The public key consists of $(n, e)$, the modulus (product of two large primes), and the encryption exponent. I want to separate the modulus $n$ and exponent $e$. A typical public key is expressed in base64, and is of the following type:

 -----BEGIN PUBLIC KEY-----

FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/
3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB

-----END PUBLIC KEY-----


Now from the above key, it is not clear which part is the modulus and which is the exponent. How can I extract the two?

-

RSA key formats are defined in at least RFC 3447 and RFC 5280. The format is based on ASN.1 and includes more than just the raw modulus and exponent.

If you decode the base 64 encoded ASN.1, you will find some wrapping (like an object identifier) as well as an internal ASN.1 bitstring, which decodes as:

(
119445732379544598056145200053932732877863846799652384989588303737527328743970559883211146487286317168142202446955508902936035124709397221178664495721428029984726868375359168203283442617134197706515425366188396513684446494070223079865755643116690165578452542158755074958452695530623055205290232290667934914919,
65537
)


The former is the 2048-bit modulus $n$ and the latter the public exponent $e$, which is usually chosen as either 3 or, like here, 65537. To do the same for an arbitrary key, you will need to read up on at least ASN.1, or else use an existing decoder.

-

In practice, one can use openssl to extract the information:

$cat pubkey.txt -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0 FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/ 3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB -----END PUBLIC KEY-----$ openssl rsa -pubin -in pubkey.txt -text -noout
Public-Key: (1024 bit)
Modulus:
00:aa:18:ab:a4:3b:50:de:ef:38:59:8f:af:87:d2:
ab:63:4e:45:71:c1:30:a9:bc:a7:b8:78:26:74:14:
fa:ab:8b:47:1b:d8:96:5f:5c:9f:c3:81:84:85:ea:
f5:29:c2:62:46:f3:05:50:64:a8:de:19:c8:c3:38:
be:54:96:cb:ae:b0:59:dc:0b:35:81:43:b4:4a:35:
44:9e:b2:64:11:31:21:a4:55:bd:7f:de:3f:ac:91:
9e:94:b5:6f:b9:bb:4f:65:1c:db:23:ea:d4:39:d6:
cd:52:3e:b0:81:91:e7:5b:35:fd:13:a7:41:9b:30:
90:f2:47:87:bd:4f:4e:19:67
Exponent: 65537 (0x10001)


The modulus is printed in hexadecimal, how to obtain its decimal value is left as an exercise to the reader.

-