ATTN: Pengguna PGP5i di Linux.

        Ronny

----- Forwarded message from [EMAIL PROTECTED] -----

> From: [EMAIL PROTECTED]
> Reply-To: [EMAIL PROTECTED], [EMAIL PROTECTED]
> Date:         Tue, 23 May 2000 14:13:23 -0700
> To: [EMAIL PROTECTED]
> Subject:      Key Generation Security Flaw in PGP 5.0
> 
>                        SECURITY FLAW IN PGP 5.0
>                        ========================
> 
> 
> 
>                           EXECUTIVE SUMMARY
>                           -----------------
> 
> A flaw has been found in the randomness gathering code of PGP 5.
> 
> PGP 5 will, under certain well-defined circumstances, generate
> public/private key pairs with no or only a small amount of
> randomness. Such keys are insecure.
> 
> Chances are very high that you have no problem. So, don't panic.
> 
> 
> 
> 
>                           WHO IS AFFECTED?
>                           ----------------
> 
> The flaw has been found in the PGP 5.0i code base.  It is specific
> to Unix systems such as Linux or various BSD dialects with a
> /dev/random device.
> 
> 
> Versions 2.* and 6.5 of PGP do NOT share this problem.
> 
> PGP versions ported to other platforms do NOT share this problem.
> 
> 
> The problem does NOT manifest itself under the following
> circumstances:
> 
> - You typed in a lot of data while generating your key, including
>   long user ID and pass phrase strings.
> 
> - A random seed file PGP 5 could use existed on your system before
>   you generated the key.
> 
> 
> However, the problem affects you in the worst possible manner if you
> started from scratch with pgp 5 on a Unix system with a /dev/random
> device, and created your key pair non-interactively with a command
> line like this one:
> 
> pgpk -g <DSS or RSA> <key-length> <user-id> <timeout> <pass-phrase>
> 
> 
> 
>                             WHAT TO DO?
>                             -----------
> 
> If you have generated your key non-interactively, you may wish to
> revoke it, and create a new key using a version of PGP which works
> correctly.
> 
> 
> 
>                              DETAILS
>                              -------
> 
> In order to generate secure cryptographic keys, PGP needs to gather
> random numbers from reliable sources, so keys can't be predicted by
> attackers.
> 
> Randomness sources PGP generally uses include:
> 
> - a seed file with random data from previous sessions
> - user input and input timing
> 
> Additionally, certain Unix systems such as OpenBSD, Linux, and others,
> offer a stream of random data over a central service typically called
> /dev/random or the like.  If present, this service is used by PGP
> as a source of random data.
> 
> PGP 5.0i's reading of these random numbers does not work. Instead of
> random numbers, a stream of bytes with the value "1" is read.
> 
> In practice, this implies two things:
> 
> 1. PGP5 will generally overestimate the amount of randomness
>    available.  We have not researched the effects of this in detail.
> 
>    However, we believe that the amount of randomness gathered from
>    input data, timing information, and old random data will be
>    sufficient for most applications.  (See below for a detailed
>    estimate.)
> 
> 2. In situations in which no other randomness sources are available,
>    PGP relies on the /dev/random service, and thus uses predictable
>    instead of random numbers. This is not a flaw of the random
>    service, but of the PGP5 implementation.
> 
> 
> One particular example of such a situation is non-interactive key
> generation with a virgin PGP 5 installation, like described above.
> 
> Example:
> 
>   $ mkdir /tmp/pgp5test
>   $ PGPPATH=/tmp/pgp5test
>   $ pgpk -g RSA 1024 [EMAIL PROTECTED] 0 "passphrase string"
> 
> In fact, RSA keys generated this way are entirely predictable, which
> can easily be verified by comparing key IDs and fingerprints.
> 
> When using DSA/ElGamal keys, the DSA signature key is predictable,
> while the ElGamal encryption subkey will vary. Note that
> fingerprints and key IDs of the predictable DSA keys depend on a
> time stamp, and are themselves not predictable.
> 
> Proof of concept key rings generated with pgp 5.0i are available
> from <http://olymp.org/~caronni/pgpbug-keyrings.tgz>.
> 
> 
> 
>                            GORY DETAILS
>                            ------------
> 
> 1. Code
> 
> Here's the flawed code from src/lib/ttyui/pgpUserIO.c:
> 
>  1314 static unsigned
>  1315 pgpDevRandomAccum(int fd, unsigned count)
>  1316 {
>  1317     char RandBuf;
>  1318     unsigned short i = 0;
>  1319
>  1320     pgpAssert(count);
>  1321     pgpAssert(fd >= 0);
>  1322
>  1323     for(i = 0; i <= count; ++i) {
> >1324         RandBuf = read(fd, &RandBuf, count);
>  1325         pgpRandomAddBytes(&pgpRandomPool, (byte *)&RandBuf, sizeof(RandBuf));
>  1326         pgpRandPoolAddEntropy(256);
>  1327     }
>  1328
>  1329     return(i);
>  1330 }
> 
> The count parameter is always set to the value 1 by the calling
> code.  The byte read from the file descriptor fd into the RandBuf
> buffer is subsequently overwritten with the read() function's return
> value, which will be 1.  The actual random data are not used.
> 
> This can be fixed by replacing line 1324 by the following line of
> code:
> 
>              read (fd, &RandBuf, 1);
> 
> 
> 2. "Random" data
> 
> A dump of random data gathered during an interactive key generation
> session is available at <http://olymp.org/~caronni/randlog-keygen>.
> This was dumped as passed to the pgpRandomAddByte() function, one
> byte at a time.
> 
> Note the streams of bytes with the value 1 which should actually
> contain data gathered from /dev/random.  Also note that the pass
> phrase ("asdf") and the user ID ("[EMAIL PROTECTED]") are clearly
> visible, but mixed with timing data from the individual key presses.
> 
> No random data occuring after the second stream of ones were
> generated from external events prior to the generation of the DSA
> key in question.
> 
> 
> 3. Some estimates
> 
> We give a back-of-the-envelope upper estimate of the amount of
> random bits PGP may gather during interactive key generation.  We
> assume that /dev/random reading is flawed, and that no seed file
> exists prior to running PGP. Timing is assumed to have a resolution
> of 1 us (gettimeofday()).
> 
> During a PGP session of one minute, we can get at most 2^28
> different time stamps (2^28 ~ 60*10^6).
> 
> Note that one time stamp close to the point of time of key
> generation is known to attackers from the time stamp PGP leaves on
> the key.
> 
> So the intervals between individual key presses remain as a source
> of randomness.
> 
> Assuming that the user types at a rate of about 120 characters per
> minute, we have an interval of approximately 0.5 seconds between two
> key presses. Dropping the upmost non-random bit of the interval
> length, we get about 18 bits of random timing information per key
> press.
> 
> This estimate gets worse for experienced and fast-typing users.
> 
> With a user ID of 20 characters, and no pass phrase, PGP will have
> gathered roughly 300-400 random bits interactively.  While this is
> not bad, it is not sufficient by PGP's own standards.
> 
> 
> 
> 
>                              CONCLUSIONS
>                              -----------
> 
>         Public code review is a good thing - if it happens.
> 
> 
> 
> 
> 
>                                CREDITS
>                                -------
> 
> This problem was found by Germano Caronni <[EMAIL PROTECTED]>, and
> verified by Thomas Roessler <[EMAIL PROTECTED]> and Marcel Waldvogel
> <[EMAIL PROTECTED]>.
> 
> 

----- End forwarded message -----

--------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]


Kirim email ke