Cugu's blog

IT security & forensics

RSSTwitterGithub

Create nice gpg keys

The following script creates nice gpg keys, with either an easy to remember key id or a nice start of the fingerprint. It’s quite slow (1 key / 0.8 sec), but this is due to the slow key creation in gpg.

A newer, faster way to create gpg keys can be found in this post

    from subprocess import Popen, PIPE
    import time

    gen_str = '''Key-Type: default
    Subkey-Type: default
    Name-Real: Cugu
    Name-Email: cugu@cugu.eu
    Expire-Date: 2020-05-04
    Passphrase: 1234mysupersavepassword
    %pubring key.pub
    %secring key.sec
    %commit
    '''

    nice = ('1234', '0000', '1111', '2222', '3333',
            '4444', '5555', '6666', '7777', '8888',
            '9999', 'AAAA', 'BBBB', 'CCCC', 'DDDD',
            'EEEE', 'FFFF', '1337', 'DEAD', 'BEEF')

    while (True):
        gpg = Popen(['gpg', '--status-fd', '1', '--batch', '--gen-key'],
                    stdout=PIPE,
                    stdin=PIPE)
        stdout = gpg.communicate(input=gen_str)[0]
        fingerprint = stdout.split('[GNUPG:] KEY_CREATED B ')[1][:-1]

        if (fingerprint.startswith(nice) and fingerprint.startswith(nice, 4)) \\
           or \\
           (fingerprint.endswith(nice) and fingerprint[:-4].endswith(nice)):

            print 'found:' + fingerprint
            Popen(['cp', 'key.sec', str(time.time()) + '.sec'])