1PGPVERIFY(1) InterNetNews Documentation PGPVERIFY(1)
2
3
4
6 pgpverify - Cryptographically verify Usenet control messages
7
9 pgpverify [--findid=string] [--test] < message
10
12 The pgpverify program reads (on standard input) a Usenet control
13 message that has been cryptographically signed using the signcontrol
14 program (or some other program that produces a compatible format).
15 pgpverify then uses a PGP implementation to determine who signed the
16 control message. If the control message has a valid signature,
17 pgpverify prints (to stdout) the user ID of the key that signed the
18 message. Otherwise, it exits with a non-zero exit status.
19
20 If pgpverify is installed as part of INN, it uses INN's configuration
21 to determine what signature verification program to use, how to log
22 errors, what temporary directory to use, and what keyring to use.
23 Otherwise, all of those parameters can be set by editing the beginning
24 of this script.
25
26 By default, when running as part of INN, pgpverify expects the PGP key
27 ring to be found in pathetc/pgp (as either pubring.pgp or pubring.gpg
28 depending on whether PGP or GnuPG is used to verify signatures). If
29 that directory doesn't exist, it will fall back on using the default
30 key ring, which is in a .pgp or .gnupg subdirectory of the running
31 user's home directory.
32
33 INN, when using GnuPG, configures pgpverify to use gpg or gpgv, which
34 by default expects keys to be in a keyring named trustedkeys.gpg, since
35 it doesn't implement trust checking directly. pgpverify uses that file
36 if present but falls back to pubring.gpg if it's not found. This
37 bypasses the trust model for checking keys, but is compatible with the
38 way that pgpverify used to behave. Of course, if a keyring is found in
39 pathetc/pgp or configured at the top of the script, that overrides all
40 of this behavior.
41
42 Note that a few Usenet hierarchies still send control articles signed
43 with old PGP keys using a weak hash algorithm (MD5). Modern versions
44 of GnuPG (2.1.0+) no longer validate such signatures, so you should use
45 GnuPG 1.x or 2.0.x if you need verifying such control articles.
46
48 --findid=string
49 The --findid flag causes pgpverify to explicitly search for string
50 in the output from PGP's analysis of the message. This option is
51 useful when several UIDs are defined on a single PGP key, and the
52 caller to pgpverify needs checking whether a given one is defined
53 on this key. In case the signature is valid but does not contain
54 string, pgpverify exits with exit status 4.
55
56 --test
57 The --test flag causes pgpverify to print out the input that it is
58 passing to PGP (which is a reconstructed version of the input that
59 supposedly created the control message) as well as the output from
60 PGP's analysis of the message.
61
63 pgpverify may exit with the following statuses:
64
65 0 The control message had a good PGP signature.
66
67 1 The control message had no PGP signature.
68
69 2 The control message had an unknown PGP signature.
70
71 3 The control message had a bad PGP signature.
72
73 4 The control message had a good PGP signature but the argument given
74 to the --findid flag had non been found in the output from PGP's
75 analysis of the message.
76
77 255 A problem occurred not directly related to PGP analysis of
78 signature.
79
81 pgpverify does not modify or otherwise alter the environment before
82 invoking the pgp, gpgv or gpg program. It is the responsibility of the
83 person who installs pgpverify to ensure that when pgp, gpgv or gpg
84 runs, it has the ability to locate and read a PGP key file that
85 contains the PGP public keys for the appropriate Usenet hierarchy
86 administrators. pgpverify can be pointed to an appropriate key ring by
87 editing variables at the beginning of this script.
88
90 Historically, Usenet news server administrators have configured their
91 news servers to automatically honor Usenet control messages based on
92 the originator of the control messages and the hierarchies for which
93 the control messages applied. For example, in the past, David Lawrence
94 always issued control messages for the "Big 8" hierarchies (comp,
95 humanities, misc, news, rec, sci, soc, talk). Usenet news
96 administrators would configure their news server software to
97 automatically honor newgroup and rmgroup control messages that
98 originated from David Lawrence and applied to any of the Big 8
99 hierarchies.
100
101 Unfortunately, Usenet news articles (including control messages) are
102 notoriously easy to forge. Soon, malicious users realized they could
103 create or remove (at least temporarily) any Big 8 newsgroup they wanted
104 by simply forging an appropriate control message in David Lawrence's
105 name. As Usenet became more widely used, forgeries became more common.
106
107 The pgpverify program was designed to allow Usenet news administrators
108 to configure their servers to cryptographically verify control messages
109 before automatically acting on them. Under the pgpverify system, a
110 Usenet hierarchy maintainer creates a PGP public/private key pair and
111 disseminates the public key. Whenever the hierarchy maintainer issues
112 a control message, he uses the signcontrol program to sign the control
113 message with the PGP private key. Usenet news administrators configure
114 their news servers to run the pgpverify program on the appropriate
115 control messages, and take action based on the PGP key User ID that
116 signed the control message, not the name and address that appear in the
117 control message's From: or Sender: headers.
118
119 Thus, appropriate use of the signcontrol and pgpverify programs
120 essentially eliminates the possibility of malicious users forging
121 Usenet control messages that sites will act upon, as such users would
122 have to obtain the PGP private key in order to forge a control message
123 that would pass the cryptographic verification step. If the hierarchy
124 administrators properly protect their PGP private keys, the only way a
125 malicious user could forge a validly-signed control message would be by
126 breaking the public key encryption algorithm, which (at least at this
127 time) is believed to be prohibitively difficult for PGP keys of a
128 sufficient bit length.
129
131 pgpverify was written by David C Lawrence <tale@isc.org>. Manual page
132 provided by James Ralston. It is currently maintained by Russ Allbery
133 <eagle@eyrie.org>.
134
136 David Lawrence wrote: "Our lawyer told me to include the following.
137 The upshot of it is that you can use the software for free as much as
138 you like."
139
140 Copyright (c) 1996 UUNET Technologies, Inc. All rights reserved.
141
142 Redistribution and use in source and binary forms, with or without
143 modification, are permitted provided that the following conditions are
144 met:
145
146 1. Redistributions of source code must retain the above copyright
147 notice, this list of conditions and the following disclaimer.
148
149 2. Redistributions in binary form must reproduce the above copyright
150 notice, this list of conditions and the following disclaimer in the
151 documentation and/or other materials provided with the
152 distribution.
153
154 3. All advertising materials mentioning features or use of this
155 software must display the following acknowledgement:
156
157 This product includes software developed by UUNET Technologies, Inc.
158
159 4. The name of UUNET Technologies ("UUNET") may not be used to endorse
160 or promote products derived from this software without specific
161 prior written permission.
162
163 THIS SOFTWARE IS PROVIDED BY UUNET "AS IS" AND ANY EXPRESS OR IMPLIED
164 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
165 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
166 IN NO EVENT SHALL UUNET BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
167 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
168 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
169 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
170 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
171 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
172 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
173
175 gpg(1), gpgv(1), pgp(1).
176
177 <https://ftp.isc.org/pub/pgpcontrol/> is where the most recent versions
178 of signcontrol and pgpverify live, along with PGP public keys used for
179 hierarchy administration.
180
181
182
183INN 2.7.0 2022-07-10 PGPVERIFY(1)