SYNOPSIS

pgpverify [--findid=string] [--test] < message

DESCRIPTION

The pgpverify program reads (on standard input) a Usenet control message that has been cryptographically signed using the signcontrol program (or some other program that produces a compatible format). pgpverify then uses a \s-1PGP\s0 implementation to determine who signed the control message. If the control message has a valid signature, pgpverify prints (to stdout) the user \s-1ID\s0 of the key that signed the message. Otherwise, it exits with a non-zero exit status.

If pgpverify is installed as part of \s-1INN\s0, it uses \s-1INN\s0's configuration to determine what signature verification program to use, how to log errors, what temporary directory to use, and what keyring to use. Otherwise, all of those parameters can be set by editing the beginning of this script.

By default, when running as part of \s-1INN\s0, pgpverify expects the \s-1PGP\s0 key ring to be found in pathetc/pgp (as either pubring.pgp or pubring.gpg depending on whether \s-1PGP\s0 or GnuPG is used to verify signatures). If that directory doesn't exist, it will fall back on using the default key ring, which is in a .pgp or .gnupg subdirectory of the running user's home directory.

\s-1INN\s0, when using GnuPG, configures pgpverify to use gpgv, which by default expects keys to be in a keyring named trustedkeys.gpg, since it doesn't implement trust checking directly. pgpverify uses that file if present but falls back to pubring.gpg if it's not found. This bypasses the trust model for checking keys, but is compatible with the way that pgpverify used to behave. Of course, if a keyring is found in pathetc/pgp or configured at the top of the script, that overrides all of this behavior.

OPTIONS

--findid=string

The --findid flag causes pgpverify to explicitly search for string in the output from \s-1PGP\s0's analysis of the message. This option is useful when several UIDs are defined on a single \s-1PGP\s0 key, and the caller to pgpverify needs checking whether a given one is defined on this key. In case the signature is valid but does not contain string, pgpverify exits with exit status 4.

--test

The --test flag causes pgpverify to print out the input that it is passing to \s-1PGP\s0 (which is a reconstructed version of the input that supposedly created the control message) as well as the output from \s-1PGP\s0's analysis of the message.

EXIT STATUS

pgpverify may exit with the following statuses:

0

The control message had a good \s-1PGP\s0 signature.

1

The control message had no \s-1PGP\s0 signature.

2

The control message had an unknown \s-1PGP\s0 signature.

3

The control message had a bad \s-1PGP\s0 signature.

4

The control message had a good \s-1PGP\s0 signature but the argument given to the --findid flag had non been found in the output from \s-1PGP\s0's analysis of the message.

255

A problem occurred not directly related to \s-1PGP\s0 analysis of signature.

ENVIRONMENT

pgpverify does not modify or otherwise alter the environment before invoking the pgp or gpgv program. It is the responsibility of the person who installs pgpverify to ensure that when pgp or gpgv runs, it has the ability to locate and read a \s-1PGP\s0 key file that contains the \s-1PGP\s0 public keys for the appropriate Usenet hierarchy administrators. pgpverify can be pointed to an appropriate key ring by editing variables at the beginning of this script.

NOTES

Historically, Usenet news server administrators have configured their news servers to automatically honor Usenet control messages based on the originator of the control messages and the hierarchies for which the control messages applied. For example, in the past, David Lawrence always issued control messages for the \*(L"Big 8\*(R" hierarchies (comp, humanities, misc, news, rec, sci, soc, talk). Usenet news administrators would configure their news server software to automatically honor newgroup and rmgroup control messages that originated from David Lawrence and applied to any of the Big 8 hierarchies.

Unfortunately, Usenet news articles (including control messages) are notoriously easy to forge. Soon, malicious users realized they could create or remove (at least temporarily) any Big 8 newsgroup they wanted by simply forging an appropriate control message in David Lawrence's name. As Usenet became more widely used, forgeries became more common.

The pgpverify program was designed to allow Usenet news administrators to configure their servers to cryptographically verify control messages before automatically acting on them. Under the pgpverify system, a Usenet hierarchy maintainer creates a \s-1PGP\s0 public/private key pair and disseminates the public key. Whenever the hierarchy maintainer issues a control message, he uses the signcontrol program to sign the control message with the \s-1PGP\s0 private key. Usenet news administrators configure their news servers to run the pgpverify program on the appropriate control messages, and take action based on the \s-1PGP\s0 key User \s-1ID\s0 that signed the control message, not the name and address that appear in the control message's From: or Sender: headers.

Thus, appropriate use of the signcontrol and pgpverify programs essentially eliminates the possibility of malicious users forging Usenet control messages that sites will act upon, as such users would have to obtain the \s-1PGP\s0 private key in order to forge a control message that would pass the cryptographic verification step. If the hierarchy administrators properly protect their \s-1PGP\s0 private keys, the only way a malicious user could forge a validly-signed control message would be by breaking the public key encryption algorithm, which (at least at this time) is believed to be prohibitively difficult for \s-1PGP\s0 keys of a sufficient bit length.

HISTORY

pgpverify was written by David C Lawrence <[email protected]>. Manual page provided by James Ralston. It is currently maintained by Russ Allbery <[email protected]>.

COPYRIGHT AND LICENSE

David Lawrence wrote: \*(L"Our lawyer told me to include the following. The upshot of it is that you can use the software for free as much as you like.\*(R"

Copyright (c) 1996 \s-1UUNET\s0 Technologies, Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1.

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3.

All advertising materials mentioning features or use of this software must display the following acknowledgement:

  This product includes software developed by UUNET Technologies, Inc.
4.

The name of \s-1UUNET\s0 Technologies (\*(L"\s-1UUNET\s0\*(R") may not be used to endorse or promote products derived from this software without specific prior written permission.

\s-1THIS\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1PROVIDED\s0 \s-1BY\s0 \s-1UUNET\s0 \*(L"\s-1AS\s0 \s-1IS\s0\*(R" \s-1AND\s0 \s-1ANY\s0 \s-1EXPRESS\s0 \s-1OR\s0 \s-1IMPLIED\s0 \s-1WARRANTIES\s0, \s-1INCLUDING\s0, \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0, \s-1THE\s0 \s-1IMPLIED\s0 \s-1WARRANTIES\s0 \s-1OF\s0 \s-1MERCHANTABILITY\s0 \s-1AND\s0 \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0 \s-1ARE\s0 \s-1DISCLAIMED\s0. \s-1IN\s0 \s-1NO\s0 \s-1EVENT\s0 \s-1SHALL\s0 \s-1UUNET\s0 \s-1BE\s0 \s-1LIABLE\s0 \s-1FOR\s0 \s-1ANY\s0 \s-1DIRECT\s0, \s-1INDIRECT\s0, \s-1INCIDENTAL\s0, \s-1SPECIAL\s0, \s-1EXEMPLARY\s0, \s-1OR\s0 \s-1CONSEQUENTIAL\s0 \s-1DAMAGES\s0 (\s-1INCLUDING\s0, \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0, \s-1PROCUREMENT\s0 \s-1OF\s0 \s-1SUBSTITUTE\s0 \s-1GOODS\s0 \s-1OR\s0 \s-1SERVICES\s0; \s-1LOSS\s0 \s-1OF\s0 \s-1USE\s0, \s-1DATA\s0, \s-1OR\s0 \s-1PROFITS\s0; \s-1OR\s0 \s-1BUSINESS\s0 \s-1INTERRUPTION\s0) \s-1HOWEVER\s0 \s-1CAUSED\s0 \s-1AND\s0 \s-1ON\s0 \s-1ANY\s0 \s-1THEORY\s0 \s-1OF\s0 \s-1LIABILITY\s0, \s-1WHETHER\s0 \s-1IN\s0 \s-1CONTRACT\s0, \s-1STRICT\s0 \s-1LIABILITY\s0, \s-1OR\s0 \s-1TORT\s0 (\s-1INCLUDING\s0 \s-1NEGLIGENCE\s0 \s-1OR\s0 \s-1OTHERWISE\s0) \s-1ARISING\s0 \s-1IN\s0 \s-1ANY\s0 \s-1WAY\s0 \s-1OUT\s0 \s-1OF\s0 \s-1THE\s0 \s-1USE\s0 \s-1OF\s0 \s-1THIS\s0 \s-1SOFTWARE\s0, \s-1EVEN\s0 \s-1IF\s0 \s-1ADVISED\s0 \s-1OF\s0 \s-1THE\s0 \s-1POSSIBILITY\s0 \s-1OF\s0 \s-1SUCH\s0 \s-1DAMAGE\s0.

RELATED TO pgpverify…

gpgv\|(1), pgp\|(1).

<ftp://ftp.isc.org/pub/pgpcontrol/> is where the most recent versions of signcontrol and pgpverify live, along with \s-1PGP\s0 public keys used for hierarchy administration.