MODULI(5)                 OpenBSD Programmer's Manual                MODULI(5)

NAME
     moduli - Diffie-Hellman moduli

DESCRIPTION
     The /etc/moduli file contains prime numbers and generators for use by
     sshd(8) in the Diffie-Hellman Group Exchange key exchange method.

     New moduli may be generated with ssh-keygen(1) using a two-step process.
     An initial candidate generation pass, using ssh-keygen -G, calculates
     numbers that are likely to be useful.  A second primality testing pass,
     using ssh-keygen -T, provides a high degree of assurance that the numbers
     are prime and are safe for use in Diffie-Hellman operations by sshd(8).
     This moduli format is used as the output from each pass.

     The file consists of newline-separated records, one per modulus,
     containing seven space-separated fields.  These fields are as follows:

           timestamp    The time that the modulus was last processed as
                        YYYYMMDDHHMMSS.

           type         Decimal number specifying the internal structure of
                        the prime modulus.  Supported types are:

                        0     Unknown, not tested.
                        2     "Safe" prime; (p-1)/2 is also prime.
                        4     Sophie Germain; (p+1)*2 is also prime.

                        Moduli candidates initially produced by ssh-keygen(1)
                        are Sophie Germain primes (type 4).  Further primality
                        testing with ssh-keygen(1) produces safe prime moduli
                        (type 2) that are ready for use in sshd(8).  Other
                        types are not used by OpenSSH.

           tests        Decimal number indicating the type of primality tests
                        that the number has been subjected to represented as a
                        bitmask of the following values:

                        0x00  Not tested.
                        0x01  Composite number - not prime.
                        0x02  Sieve of Eratosthenes.
                        0x04  Probabilistic Miller-Rabin primality tests.

                        The ssh-keygen(1) moduli candidate generation uses the
                        Sieve of Eratosthenes (flag 0x02).  Subsequent
                        ssh-keygen(1) primality tests are Miller-Rabin tests
                        (flag 0x04).

           trials       Decimal number indicating the number of primality
                        trials that have been performed on the modulus.

           size         Decimal number indicating the size of the prime in
                        bits.

           generator    The recommended generator for use with this modulus
                        (hexadecimal).

           modulus      The modulus itself in hexadecimal.

     When performing Diffie-Hellman Group Exchange, sshd(8) first estimates
     the size of the modulus required to produce enough Diffie-Hellman output
     to sufficiently key the selected symmetric cipher.  sshd(8) then randomly
     selects a modulus from /etc/moduli that best meets the size requirement.

SEE ALSO
     ssh-keygen(1), sshd(8)

     Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer
     Protocol, RFC 4419, 2006.

OpenBSD 5.0                    October 14, 2010                    OpenBSD 5.0
