/vanity_rsa

Generate RSA keypairs containing an arbitrary string in the public key.

Primary LanguagePython

This tool generates valid RSA keypairs which contain some piece of text. The details are discussed in the accompanying blog post.

Fork notes

I changed the script to support multi-line base64 text on PEM encoded keys. In addition, I added an option to apply an offset to PEM encoded keys, since base64 groups by 3 bytes and we cannot guarantee that a CA issued certificate aligns exactly on this 3 byte boundary. So you can try out with offsets 0, 1 or 2 to see which one gets the correct alignment in the final certificate.

Use

Simplest usage: python3 vanity_rsa.py "MyVanityText"

usage: vanity_rsa.py [-h] [--key-length KEY_LENGTH] [--key-format {PEM,SSH}]
                     [--output-file OUTPUT_FILE]
                     [--output-file-public OUTPUT_FILE_PUBLIC]
                     vanity

Generate an RSA key containing arbitrary text in the public key.

positional arguments:
  vanity                The text to inject

optional arguments:
  -h, --help            show this help message and exit
  --key-length KEY_LENGTH
                        The length of the key in bits
  --key-format {PEM,SSH}
                        The format of the key
  --output-file OUTPUT_FILE
                        Where to save the private key
  --output-file-public OUTPUT_FILE_PUBLIC
                        Where to save the public key

Dependencies

The code depends on cryptography package. While not strictly necessary, you may want to install gmpy2 for a factor 10 speedup. You can install both of these using pip install cryptography gmpy2.