PGPVERIFY(1) InterNetNews Documentation PGPVERIFY(1)
pgpverify - Cryptographically verify Usenet control messages
pgpverify [--findid=string] [--test] < message
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 PGP implementation to determine who signed the
control message. If the control message has a valid signature,
pgpverify prints (to stdout) the user ID of the key that signed the
message. Otherwise, it exits with a non-zero exit status.
If pgpverify is installed as part of INN, it uses INN'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 INN, pgpverify expects the PGP key
ring to be found in pathetc/pgp (as either pubring.pgp or pubring.gpg
depending on whether PGP 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.
INN, when using GnuPG, configures pgpverify to use gpg or 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.
The --findid flag causes pgpverify to explicitly search for string
in the output from PGP's analysis of the message. This option is
useful when several UIDs are defined on a single PGP 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.
The --test flag causes pgpverify to print out the input that it is
passing to PGP (which is a reconstructed version of the input that
supposedly created the control message) as well as the output from
PGP's analysis of the message.
pgpverify may exit with the following statuses:
0 The control message had a good PGP signature.
1 The control message had no PGP signature.
2 The control message had an unknown PGP signature.
3 The control message had a bad PGP signature.
4 The control message had a good PGP signature but the argument given
to the --findid flag had non been found in the output from PGP's
analysis of the message.
255 A problem occurred not directly related to PGP analysis of
pgpverify does not modify or otherwise alter the environment before
invoking the pgp, gpgv or gpg program. It is the responsibility of the
person who installs pgpverify to ensure that when pgp, gpgv or gpg
runs, it has the ability to locate and read a PGP key file that
contains the PGP 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.
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 "Big 8" 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
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 PGP 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 PGP 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 PGP key User ID 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 PGP private key in order to forge a control message
that would pass the cryptographic verification step. If the hierarchy
administrators properly protect their PGP 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 PGP keys of a
sufficient bit length.
pgpverify was written by David C Lawrence <email@example.com>. Manual page
provided by James Ralston. It is currently maintained by Russ Allbery
COPYRIGHT AND LICENSE
David Lawrence wrote: "Our lawyer told me to include the following.
The upshot of it is that you can use the software for free as much as
Copyright (c) 1996 UUNET 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
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
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 UUNET Technologies ("UUNET") may not be used to endorse
or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY UUNET "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL UUNET BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
gpg(1), gpgv(1), pgp(1).
<https://ftp.isc.org/pub/pgpcontrol/> is where the most recent versions
of signcontrol and pgpverify live, along with PGP public keys used for
INN 2.6.2 2018-03-18 PGPVERIFY(1)