ipsec_rsasigkey - generate RSA signature key
rsasigkey [--verbose] [--seeddev device]
[--seed numbits] [--nssdir nssdir]
[--password nsspassword] [--hostname hostname]
generates an RSA public/private key pair, suitable for digital
signatures, of (exactly) nbits
bits (that is, two primes each of
/2 bits, and related numbers) and emits it on standard
output as ASCII (mostly hex) data. nbits
must be a multiple of 16.
The public exponent is forced to the value 3
, which has important speed
advantages for signature checking. Beware that the resulting keys have known
weaknesses as encryption keys and should not be used for that purpose
option makes rsasigkey
give a running commentary on
standard error. By default, it works in silence until it is ready to generate
option specifies a source for random bits used to seed the
crypto library's RNG. The default is /dev/random (see random
FreeS/WAN and Openswan without NSS support used this option to specify the
random source used to directly create keys. Libreswan only uses it to seed the
NSS crypto libraries RNG. Under Linux with hardware random support, special
devices might show up as /dev/*rng* devices. However, these should never be
accessed directly using this option, as hardware failures could lead to
extremely non-random values (streams of zeroes have been observed in the wild)
option specifies how many seed bits are pulled from the
random device to seed the NSS PRNG. The default of 480bit comes from FIPS
requirements. Seed bits are rounded up to a multiple of 8.
The use of a different random device or a reduction of seedbits from the default
value is prevented when the system is running in FIPS mode.
option specifies the directory to use for the nss database.
This is the directory where the NSS certificate, key and security modules
databases reside. The default value is /var/lib/ipsec/nss.
option specifies the nss cryptographic module
authentication password if the NSS module has been configured to require it. A
password is required by hardware tokens and also by the internal software
token module when configured to run in FIPS mode. If the argument is
/nsspassword, the password comes from that file; otherwise
argument is the password.
option specifies what host name to use in the first line
of the output (see below); the default is what gethostname
The output format looks like this (with long numbers trimmed down for clarity):
# RSA 3744 bits road.toad.com Mon Apr 17 22:20:35 2017
# for signatures only, UNSAFE FOR ENCRYPTION
The first (comment) line, indicating the nature and date of the key, and giving
a host name, is used by ipsec_showhostkey
(8) when generating some forms
of key output.
The commented-out pubkey=
line contains the public key, the public
exponent and the modulus combined in approximately RFC 2537 format (the one
deviation is that the combined value is given with a 0s
than in unadorned base-64), suitable for use in the ipsec.conf file.
the basic signing and verification data.
lines give the primes themselves (aka
), largest first. The Exponent1
lines give the private exponent mod p-1
respectively. The Coefficient
line gives the Chinese Remainder Theorem
coefficient, which is the inverse of q
, mod p
. These additional
numbers (which must all be kept as secret as the private exponent) are
precomputed aids to rapid signature generation. When NSS is used, these values
are not available outside the NSS security database (software token or
hardware token) and are instead filled in with the CKA_ID.
No attempt is made to break long lines.
The US patent on the RSA algorithm expired 20 Sept 2000.
ipsec rsasigkey --verbose 4096 >mykey.txt
generates a 4096-bit signature key and puts it
in the file mykey.txt, with running commentary on standard error. The file
contents can be inserted verbatim into a suitable entry in the ipsec.secrets
file (see ipsec_secrets(5)), and the public key can then be extracted
and edited into the ipsec.conf (see ipsec_showhostkey(8)).
Cryptography, 2nd. ed., by Bruce Schneier, Wiley 1996
, RFCs 2537,
, GNU MP, the GNU multiple precision arithmetic library, edition
2.0.2, by Torbj Granlund
Originally written for the Linux FreeS/WAN project <
> by Henry Spencer. Updated for the Libreswan
Project by Paul Wouters.
options were obsoleted as these were only
used with the old non-library crypto code
device is only used for seeding the crypto library, not for
direct random to generate keys
There is an internal limit on nbits
, currently 20000.
's run time is difficult to predict, since /dev/random output
can be arbitrarily delayed if the system's entropy pool is low on randomness,
and the time taken by the search for primes is also somewhat unpredictable.
Specifically, embedded systems and most virtual machines are low on entropy.
In such a situation, consider generating the RSA key on another machine, and
copying ipsec.secrets and the /var/lib/ipsec/nss directory tree to the
embedded platform. Note that NSS embeds the full path in the DB files, so the
path on proxy machine must be identical to the path on the destination
placeholder to suppress warning