File: premail.1

package info (click to toggle)
premail 0.46-10
  • links: PTS
  • area: contrib
  • in suites: stretch
  • size: 496 kB
  • ctags: 204
  • sloc: perl: 5,222; makefile: 4
file content (1209 lines) | stat: -rw-r--r-- 42,708 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
'\"macro stdmacro
.TH \f4premail\fP 1 "22 Aug 1997" "Premail Manual" "Premail Manual"
.ds OK [\|
.ds CK \|]
.SH NAME
premail \- An E\-Mail Privacy Package.  Easy E\-Mail Encryption, Decryption, Signing and Anonymization.
.SH SYNOPSIS
.SS Command Line Invocations
.B \f4premail\fP 
[
.B -sendmail_options
]
.br
.B \f4premail\fP
.B -decode
[
.B -body
] [
.IR file
]
.br
.B \f4premail\fP
.B -makenym
[
.IR nym@server .\|.\|.\|
]
.br
.B \f4premail\fP
.B -login
.br
.B \f4premail\fP
.B -logout
.br
.B \f4premail\fP
.B -setpass
.br
.B \f4premail\fP
.B -ripemkey
.br
.B \f4premail\fP
.B -importnym
[
.IR nym@server .\|.\|.\|
]
.br
.B \f4premail\fP
.B -exportnym
[
.IR nym@server 
[
.IR you@your.address
] ]
.SS Command Reference

These are the things you put between the '((','))' on the To: line.
Note that all of these, at least in theory, can also be used as their own
header (first letter capitalized, of course).

.TP
\f4encrypt-pgp\fP
Encrypts the message for the person(s) on the To: line.  Synonymous with 
\f4key\fP.  \f4encrypt-pgp\fP =
.I name
encrypts for recipient 
.I name.
.TP
\f4chain\fP
Chains through a number of remailers (default 3, if you want a different
number use \f4chain\fP = 
.IR num
).  If individual remailers are specified, they are placed 
after the '=' rather than 
.I num
and separated by ';'.  A special case of this is 
.I nym_server
=
.I name
which chains through your
.I name@nym_server
pseudonym.  Mixmaster remailers are specified by having one or more separated
by ';' enclosed in an extra set of parentheses.  Mimaster remailers cannot be
chained automagically yet.
.TP
\f4sign\fP
Signs your message, either with your default signature id (See "Preferences"
below) or with the user id given after an '='.
.TP
\f4Anon- Headers\fP
Not really a command, but any header in your message named Anon-
.I Foo
will come out of the last of a chain of remailers as 
.I Foo
instead (i.e. the information will be preserved and the Anon- stripped).


.SH DESCRIPTION
.LP
The main function of \f4premail\fP is adding support for encrypted e-mail
to your mailer, using plain PGP, PGP/MIME, MOSS, or
S/MIME.

In addition, \f4premail\fP provides a seamless, transparent interface to
the anonymous remailers, including full support for Mixmaster
remailers and the nymservers. Nymservers provide cryptographically
protected, fully anonymous accounts for both sending and receiving
e-mail.  These are known as pseudonyms or persistent anonymous accounts.

While \f4premail\fP can be used as a stand-alone application, it works
best when integrated with your mailer. Currently, \f4premail\fP is
integrated completely seamlessly and transparently only with
Netscape 3.0's built-in mailer. It works fairly well with Pine
3.94 or later, as well (plain PGP is supported, but decryption of
MIME-based e-mail encryption protocols is still missing).
Transparent integration of outgoing mail only is supported for any
mailer in which the mail sending program can be configured,
including Berkeley mail, most emacs mailers, MUSH, and MH. For these
mailers, you can decode messages with a single command.

To integrate with your mailer, \f4premail\fP places itself between the
mailer and the actual mail transport. For outgoing mail, premail
masquerades as sendmail. You configure your mailer to call premail
instead of sendmail. Then, \f4premail\fP performs the encryption or
signing, and invokes sendmail to actually send the message.

For mailers that call a command to receive incoming mail (including
Netscape 3.0), the situation is similar. Netscape, for example, can
be configured to call movemail to get incoming mail. To integrate
premail, you'd configure Netscape to call \f4premail\fP instead, which
would in turn call movemail to actually get the mail, then would
decode it.

.SS Requirements

You need the following software in order to effectively use
\f4premail\fP:

.RS 2
 * Unix. Unfortunately, \f4premail\fP does not work on Mac or Windows.
 * Perl 5.000 or later.
 * PGP (version 2.6.2 recommended).
 * RIPEM 3.0b3 or later (optional, for S/MIME support)
 * TIS/MOSS 7.1 (optional, for MOSS support)
 * Mixmaster (optional, for higher security anonymous mail)
 * Lynx (only if you're behind a firewall)
.RE

.SH USAGE

.SS Command Line Invocation

Hopefully, you have integrated premail into your mail client, and
you won't have to invoke it from the command line. However, there
may still be times when it is convenient to use premail from the
command line.

The most basic use of premail is as a replacement for sendmail. For
example, you can send mail directly from the command line, as
follows (here, the > represents the Unix prompt):

   > premail -t
   To: raph@cs.berkeley.edu ((sign))
   Subject: premail bug report

   Here's a bug in premail: ...
   .
   >

The -t option specifies that the recipients are extracted from the
header fields (To:, Cc:, Bcc:, and the Resent- variants of each).
As in sendmail, you can specify the recipients on the command line
instead of using the -t option.

In addition, you can set configuration options from the command
line, using the +option=value syntax. This is especially useful
with the debug option. For example, to show you what happens
when formatting mail for remailers, but not actually send the
message:


   > premail +debug=ry -t
   To: raph@cs.berkeley.edu ((chain=1))
   Subject: test of remailer

   test
   .
   Chose chain exon
   /usr/lib/sendmail -oi remailer\@remailer\.nl\.com

There is one configuration option that can only be set from the
command line in this fashion, which is the location of the preferences
file itself. The configuration option is preferences, and the
default value is ~/.premail/preferences.  You could, of course,
alias premail to have this option always set.


.SS Encryption

Once you've got premail set up, actually using encryption is easy.
You simply add commands in double parentheses to the e-mail
addresses. The encrypt-pgp command (which can be abbreviated to
key) adds encryption to the outgoing mail, and the sign command
signs it.

For example, to send me encrypted mail, you'd send it to
raph@cs.berkeley.edu ((encrypt-pgp)). You need to have a key with
this user id on your PGP public keyring, otherwise you'll get an
error message. If the user id on the key doesn't match the e-mail
address, you can specify it directly. For example, to send mail
directly to my workstation, but using the same public key as above,
use raph@kiwi.cs.berkeley.edu ((key=raph@cs.berkeley.edu)).

Signing works much the same way. I can sign mail by adding
((sign=raph@cs.berkeley.edu)) to the outgoing address. Actually,
because I set the signuser configuration option in my preferences
file, all I have to add is ((sign)).

Doing both encryption and signing is just as easy. For example, to
send me signed, encrypted mail, use this line:

   To: raph@cs.berkeley.edu ((encrypt-pgp, sign))

Each recipient is treated separately - the double-paren commands
after an e-mail address apply to that recipient only. However, you
can add a Sign: header field to indicate that your message is
signed for all recipients. Example:

   To: vp@company, secretary@company, employees@company,
  friend@outside ((encrypt-pgp))
   Subject: Important announcement
   Sign:

   ...

In this example, all recipients will get a signed message, and the
message to friend@outside will be encrypted as well.

.SS Decoding

The basic way to decode encrypted messages is to use premail
-decode as a command line. You can either give a filename as an
argument, or premail will accept the encrypted message on its
standard input. In either case, the decoded message will be printed
on the standard output.

The message can be a standard e-mail message (RFC 822 format), or
it can be an entire mailbox. In the latter case, premail will
decode each of the messages individually. If you don't have premail
directly integrated into your mailer, then here's a handy way to
view your mail:

   premail -decode $MAIL | more

If the message is actually encrypted, then premail will need to
access the secrets file. If you are logged out of premail, then
premail will try to open an xterm window for you to type the
passphrase for the secrets file. If that doesn't succeed, premail
will print an error message. At that point, you might choose to log
in (i.e. premail -login) and then try the decoding again.

If, as in many mailers, you have easy access to the body of the
message but not the header, then you can use premail -decode -body
on the body. This works well for plain PGP encrypted messages, but
unfortunately does not work for MIME-based message formats, because
important information is contained in the header.

The results of the decoding (including signature verification) are
given in an X-Premail-Auth: header field. This header field is
protected against forgery; if the original message contains it, it
is changed to X-Attempted-Auth-Forgery.

.SS Anonymity

The original reason for writing premail was to provide good support
for anonymous remailers. If you're not interested in sending
anonymous mail, you can skip this section.

Sending anonymous mail is very similar to sending encrypted mail.
Simply add the ((chain)) command to the recipient's e-mail address.
Alternatively, you can add a Chain: header field, and the mail will
be send anonymously to all recipients.

Even though the chain command is simple, a lot is going on under
the surface. The default chain is 3, which asks that three "good"
remailers be chosen randomly. To make sure that it makes its choice
based on fresh, up-to-date information, premail downloads the
remailer list and a set of PGP public keys for the remailers from
the Web (the actual URLs are configuration options). After choosing
the remailers, the message is multiply encrypted with the PGP
public keys, and finally sent to the first remailer in the chain.

The automatic chain selection process is very good. My tests
indicate that reliability is consistently above 99%. Further, the
chain selection process avoids some potential problems. For
example, some remailers are known not to work well in chains,
probably because of incorrectly configured "block lists." Also,
some remailers are "linked," in the sense of being hosted on the
same machine, or being administered by the same person. Choosing a
sequence of linked remailers wouldn't offer much security, so
premail doesn't.

You can also choose the chain length. A shorter chain will be
faster and more reliable, but less secure, and conversely for
longer chains. For example, ((chain=5)) selects a chain of five
remailers.

If this isn't enough control, you can specify the exact chain of
remailers by hand. For example, ((chain=replay;jam;exon)) bounces
the message around a few times outside the US.

Mixmaster chains are specified inside an additional set of
parentheses. At the moment, there is no way to automatically select
a chain of Mixmaster remailers, so you have to do it by hand. For
example: ((chain=(replay;ecafe-mix;lcs))). You can even mix
Mixmaster and type-1 remailers; for example,
((chain=(anon);1;(replay))) will sandwich one well-chosen remailer
between the two Mixmaster remailers.

Extra header fields can be placed in the outgoing message by
prefixing the header with "Anon-". A particularly common usage is
an Anon-Reply-To: field, which specifies a reply-to address in the
mail delivered to the recipient. The Reply-To: header field is used
often enough that premail includes a default-reply-to configuration
option, which automatically adds it to all anonymous messages.

The following header fields are passed through to the anonymized
message, even without the Anon- prefix:

   Mime-Version:
   Content-Type:
   Content-Transfer-Encoding:
   Newsgroups:
   X-Anon-To:
   In-Reply-To:
   References:

.SS Using Nyms

This section describes how to create and use _nyms_, which are
accounts for sending and receiving anonymous mail. There are two
types of nymservers: alpha (named after the now defunct
alpha.c2.org), and newnym. For the most part, the operation of the
two is similar.

To create a new nym, type

   premail -makenym

and follow the prompts. This command is also good for updating an
existing nym, which is important if one of the nym's remailers goes
down.

You can also create or update a nym from the command line, as
follows:

 premail -makenym you@alias.cyberpass.net your@real.address chain fakechains

Note that chain is the number of remailers to use.

When premail creates a nym, it chooses random passphrases (one for
each remailer in the chain). The passphrases and other details of
the nym are stored in the premail secrets file. Thus, the nym is
fairly secure (much more so than, say, anon.penet.fi).

The decode mechanism handles responses to nyms, again looking up
the passphrases in the premail secrets file.

You can also send mail from your nym, in one of two ways. Assume
for the sake of example that your nym is you@alias.cyberpass.net.
Then, you would use a chain of 2;cyber=you. Alternatively, you can
use a chain of 2;cyber and include this header field:

   Anon-From: you@alias.cyberpass.net (You Know Who)

If you want the nymserver to send you a confirmation every time you
send mail from your nym, add a $config{'ack'} = 'yes'; line to your
preferences file.

To delete a nym:

   premail -makenym you@alias.cyberpass delete

Please delete nyms if you are not actually using them; this helps
free up disk space and prevents the nymservers from being
overloaded.

As of version 0.45, premail now supports the newnym type of
nymserver. This nymserver is more richly featured than the alpha
type. You do have to answer a few more prompts when creating nyms
for the newnym type, including creating a new PGP key. It's worth
it, though. The newnym servers seem to be working a lot better than
the alpha ones ever did. For more information on newnym, see the
nym.alias.net homepage. If you want to exchange nyms between
premail and other programs (or a manual setup), then take a look at
the -importnym and -exportnym commands, which are explained in the
documentation for the patch that upgraded premail 0.44 to have
newnym capability.

From the patch documentation:

.RS 3
There are two new premail commands for dealing with "newnym"-style
nyms (such as those on nym.alias.net), "-importnym" and "-exportnym".

If you have an existing nym on nym.alias.net and you want to switch
over to premail for managing that nym, run the command "premail
-importnym".  This will behave like "premail -makenym" except that it
will use a PGP key already on your PGP keyring rather than creating a
new PGP-key for the nym.  Be aware, however, that premail will change
your remailer chain and shared-key encryption passwords, so you will
have to decrypt all subsequent mail you receive with premail.  (The
PGP key won't change, so if you don't like premail, you can always
change back by manually mailing in a new reply-block.)

Finally, if you created a nym with premail but would like to switch to
something else, you can export your nym's PGP key by running "premail
-exportnym".  This will put your nym's public and private keys in the
/tmp directory.  The private key is not protected by a password, so
you will probably want to edit it with "pgp -ke" before adding it to
your private keyring.
.RE

.SS Posting To Usenet

Even though some remailers can post directly to Usenet, premail
does not support that. Thus, if you want to post to Usenet, you
should use a mail-to-news gateway.

To find a working mail-to-news gateway, check Don Kitchen's
list. There are two basic kinds: sites that scan the header
fields, and sites that include the newsgroup in the address.

Using the address-parsing kind, to post to alt.anonymous, you'd
just send mail to alt.anonymous@myriad.alias.net (assuming, of
course, that myriad.alias.net is still functioning).

Using the header-scanning kind, send mail to
mail2news@myriad.alias.net, and include this header field:

   Newsgroups: alt.anonymous

The header scanning kind has one advantage: you can cross-post to
multiple newsgroups using one mail message. If you post to multiple
newsgroups, make sure you don't put a space between the newsgroups,
only a comma. Otherwise, the articles will bounce.

One frequently asked question is: how can I follow up on a thread
while posting anonymously? This is easy. Find the Message-Id:
header field in the post you're responding to, and change it into a
References: field in your outgoing mail.

Here's an example that ties it all together. Let's say you wanted
to reply to this post:

.RS 2
 From: Edward Brian Kaufman <ebk8@columbia.edu>
 Newsgroups: alt.privacy.anon-server,alt.anonymous
 Subject: A few questions about anon posts
 Message-ID: <Pine.SUN.3.94L.960630113156@aloha.cc.columbia.edu>

 Hi,

 I'd like to know what the best/easiest way to do anon posts is and
 how to do them.  Thank you,

 Ed
.RE

To post the reply anonymously, send this mail:

.RS 2
 To: mail2news@myriad.alias.net ((chain))
 Cc: Edward Brian Kaufman <ebk8@columbia.edu> ((chain))
 Newsgroups: alt.privacy.anon-server, alt.anonymous
 Subject: Re: A few questions about anon posts
 References: <Pine.SUN.3.94L.960630113156@aloha.cc.columbia.edu>

 If you have a Unix machine, using premail is the best way. To find
 out how, read the manual.
.RE

.SS S/MIME

Version 0.45 of premail contains limited support for S/MIME
messages. Basic message formatting works, but there are problems
with creating usable certificates, and there is still no support
for an encryption algorithm interoperable with RC2. However, a few
hearty souls may wish to experiment with the S/MIME functionality
that is present. This section explains how to do it.

First, you must install RIPEM 3.0b2 (or later). This is available
from the ripem export-controlled FTP site. You'll need to get
an account on the server in order to download any of the
export-controlled code - the GETTING_ACCESS file on the site
explains how.

Once you have RIPEM installed (and the ripem configuration option
pointing to the executable), create a public key with this command:

   premail -ripemkey

You will then be prompted for your e-mail address. Alternatively,
you can give your e-mail address as a command line argument to
premail -ripemkey.

After your key is created, you can send signed messages by adding
the ((ssign)) command. If you send a signed message to another
premail user, they will have your public key, and can send you
mail, by using ((encrypt=your@user.id)).

The default encryption is Triple-DES. If the recipient can't handle
it, then ((encrypt-des)) will fall back to plain DES, which most
users will be able to decrypt - probably including "export"
versions of S/MIME. Of course, the disadvantage of using plain DES
is that any competent spy organization will also be able to decrypt
the messages ;-).

Unfortunately, RIPEM 3.0b2 has some significant differences from
other S/MIME implementations in the way it handles public key
certificates. These prevent you from getting a VeriSign certificate
you can use. It is, however, possible to accept VeriSign class 1
beta certificates by running the following (prompts and messages
are in normal font, what you type is in boldface; you can find out
the password by looking in the secrets file):

   > _rcerts -u your@user.id_
   Enter password to private key:
   E - Enable standard issuers...
   \f2...other choices...\fP
 Enter choice:
   \f2e\fP
   ...V - VeriSign something or other...
   \f2v\fP
 Enter the number of months the certificate will be valid, or blank to 
 cancel:
   \f212\fP
 Enter choice:
   \f2q\fP

.SH SETUP

.SS Installation

First, you need to get premail. The source code is available from
an export-control Web server. You may also be able to find a
copy on the Hacktic FTP site in the Netherlands. In either
case, you want to get the file premail-0.45.tar.gz.

After you've gotten the file, unpack it. This command should do it:

   gzip -dc premail-0.45.tar.gz | tar xvf -

The unpacking process will create a subdirectory called
premail-0.45, containing the following files:

.TP 
README 
A short description of the contents
.TP 
premail 
The premail program itself
.TP 
preferences 
A skeletal preferences file
.TP 
doc.txt
This document in ASCII format.
.TP 
doc.html
This document in html format.

.LP
Test to see if you can run premail. These commands should print a
usage summary:

   cd premail-0.45
   ./premail

If you get an error message reading "command not found," then you
will have to edit the first line of premail to refer to the actual
pathname of the perl5 interpreter. One good way to find out the
pathname is to do "which perl5" or "which perl".

On the other hand, if you get a string of syntax errors, then the
problem is probably that you are running perl4, while premail needs perl5.
Try to see if you can find perl5 on your machine. Otherwise, you
may need to install perl5 yourself.

If you will be using premail from the command line frequently, then
you may want to copy (or symlink) the premail program into a
location in your $PATH. For example, if you have permission to add
files into /usr/local/bin, then you may consider running this
command:

   cp -p premail /usr/local/bin

An easier way may simply be to make a directory $HOME/bin, put premail
in there, and add that to your $PATH.  You could, of course, also try
bugging the sysadmin at your site to install it for you into a pulically
available location (like /usr/local/bin as above).

At this point, you are ready to test whether premail actually
works. We are assuming that you already have PGP installed and have
generated your own public key. Type this command, substituting in
your own e-mail address:

.RS 2
 ./premail -t
 To: your@own.email.addr ((encrypt-pgp))
 Subject: Test

 Does this really work?
 .
.RE

If all goes well, you should be back at the command line within a
couple of seconds. If it seems to hang without any disk or net
activity, try typing randomly for a minute, under the assumption
that PGP needs random keystrokes. This shouldn't happen if PGP is
already set up correctly (including having generated your own
public key), but on the chance that it isn't, hanging while waiting
for random keystrokes is one of the more common failure modes.

This is also the point at which you may get a PGP error. Two common
problems are that premail can't find the PGP program, in which case
you will want to add a line to your preferences file (see
"Preferences" below), or that it can't find the public key corresponding to
your e-mail address.

If the test was successful then you should now have a PGP-encrypted message in
your mailbox.

.SS The Secrets File

To create signatures, decrypt messages, or use nyms, you need to
set up a "premail secrets" file. If you will only be using premail
to encrypt outgoing mail, you can skip this section.

The default filename is /tmp/.premail-secrets.$< , where $< is
equal to your numeric user id. To change the filename, use a
preferences line such as this one:

   $config{'premail-secrets'} = '/mnt/cryptdisk/premail-secrets';

If you don't know your numeric user id, you can find it by running
"echo $uid" (from csh or tcsh), "echo $UID" (from sh or bash), or:

   perl -e 'print "$<\n"'

The premail secrets file has this format:

.RS 2
 $pgppass{'user'} = 'PGP passphrase for user';
 $pgppass{'alternate'} = 'PGP passphrase for alternate';
.RE

However, make sure your premail secrets file has restrictive
permissions, so other people on your system can't read your
passphrases! This command is well recommended (substituting your
actual user id, of course):

   chmod 600 /tmp/.premail-secrets.7437

.SS Logging In and Out of Premail

Generally, premail stores its secrets file in the /tmp directory.
In some cases, this is good enough security. In other cases, it
might be better to store the file encrypted most of the time, and
only decrypt it when necessary. To use this capability of premail,
first set a passphrase with:

   premail -setpass

You will be prompted for a passphrase. You can use the same
passphrase as for your PGP key, or a different one, depending on
how many passphrases you want to remember. This command leaves you
logged in with the new passphrase set.

To log out:

   premail -logout

You might consider adding this command to your .logout file, so
that it occurs automatically every time you log out of your
account.

To log in again:

   premail -login

If you are running on a system with X, then premail will
automatically pop up a window to log in whenever the secrets are
needed. If you are not running X, and the secrets are needed, you
will get an error. In this case, you can log in manually and try
the command again.

.SS Preferences

While premail's default configuration is designed to be sufficient
for the the most common cases, you may want to change some of the
configuration options. This is done by adding lines to the
preferences file.

The default location for the preferences file is
~/.premail/preferences, where ~ represents your home directory. The
premail distribution comes with a skeleton preferences file, but it
does not automatically copy it into the ~/.premail directory. You
might choose to do that yourself, or you might create one from
scratch.

The format of the preferences file is a sequence of lines such as
the following:

   $config{'option'} = 'value';

All other lines (including those beginning with #) are considered
to be comments and are ignored. Here's a typical preferences file
(actually, the one on my home machine):

.RS 3
$config{'logfile'} = '/home/raph/premail/log';
$config{'debug'} = 'chvl';
$config{'movemail'} = '/home/raph/bin/movehome';
$config{'ripem'} = '/home/raph/install/ripem/main/ripem';
$config{'pgp'} = '/usr/local/bin/pgp';
.RE

As you can see, a major use for the preferences file is to specify
full pathnames for the helper programs. In addition, I've set it up
to produce a full log, which I find useful, because I'm constantly
tracking down bugs :-)

Here's a table of all the configuration options, their defaults,
and a very brief description. More complete descriptions are found
in the preferences file included in the premail distribution.

.TP
Option, Default
Explanation
.TP
pgp, pgp
The location of the PGP executable.
.TP
sendmail, /usr/lib/sendmail
The location of the sendmail executable.
.TP
mixmaster, mixmaster
The location of the Mixmaster executable (useful for more
secure anonymous mail).
.TP
movemail, movemail
The location of the movemail executable (useful for
integrating Netscape 3.0).
.TP
ripem, ripem
The location of the ripem executable (needed for S/MIME
messages).
.TP
mossbin,
The directory containing the TIS/MOSS executables (needed for MOSS
messages).
.TP
post, post
The location of the MH post executable (needed for MH
integration).
.TP
geturl, 
A command for getting files from the Web. Use "lynx -source" if
behind a firewall.
.TP
dead-letter, ~/dead.letter
The file where premail stores undeliverable mail.
.TP
logfile, 
The location where premail stores its log, if the l debug flag is
set.
.TP
storefile, 
If set, the location where premail stores outgoing mail, instead of
calling sendmail.
.TP
tmpdir, /tmp
Where premail stores its temporary files.
.TP
charset, iso-8859-1
The default charset for outgoing 8-bit messages.
.TP
encrypt, yes
Set to blank to disable PGP encryption to remailers.
.TP
 ack, 
If set, nymservers will send acknowledgements for all outgoing mail.
.TP
extrablank, 
If set, premail adds an extra blank on remailer messages. Useful if
behind a broken mail proxy.
.TP
debug, 
Debugging flags (see section on debugging).
.TP
signuser, 
The user id of the default PGP secret key used to sign messages.
.TP
default-reply-to, 
Adds a Reply-To: header field with this address when sending
anonymous e-mail.
.TP
addresses, ~/.premail/addresses
The file containing your addresses.
.TP
rlist, ~/.premail/rlist
The file where premail stores the remailer list.
.TP
pubring, ~/.premail/pubring.pgp
The file where premail stores the public
keyring for the remailers.
.TP
premail-secrets-pgp, ~/.premail/secrets.pgp
The file where premail stores the encrypted
secrets file.
.TP
premail-secrets, /tmp/premail-secrets.$<
The location of your secrets file
.TP
rlist-url, http://kiwi.cs.berkeley.edu/rlist
The URL for the remailer list.
.TP
pubring-url, http://kiwi.cs.berkeley.edu/pubring.pgp  
The URL for the remailer
public keyring.
.TP
type2-list-url, http://www.jpunix.com/type2.html  
The URL for the Mixmaster type2
list.
.TP
pubring-mix-url, http://www.jpunix.com/pubring.html  
The URL for the Mixmaster
pubring.

.SS Address Book

Adding the extra encryption commands is not difficult, but it can
be tedious and potentially error prone. Thus, premail provides an
address book for specifying commands to be used with specific
e-mail addresses.

For example, let's say that one of your correspondents tells you
that she prefers mail to be PGP encrypted. Then, instead of typing
((encrypt-pgp)) every time you send her mail, you could add this
line to your addresses file:

   her@email.address: ((encrypt-pgp))

The addresses file is usually at ~/.premail/addresses, but the
location is a configurable option.

Another example was the hackerpunks mailing list (now defunct), in
which all of the subscribers have alpha.c2.org nyms. Since
haqr@alpha.c2.org had this line in his addresses file, he was able
to post to the list with just "To: hpunks":

   hpunks: hackerpunks@alpha.c2.org ((chain=2;alpha=haqr))

An address book entry can also expand to a list of addresses. For
example:

.RS 3
alice: alice@crypto.com ((encrypt-pgp))
bob: bwhite@got.net ((key=bobw@netcom.com))
eric: eric@ecsl.org ((encrypt-pgp))
.br
friends: alice, bob, eric
.RE

Sending mail to friends would then do what you'd expect: send
encrypted mail to each of alice, bob, and eric's full e-mail
addresses.

.SH INTEGRATION

This section discusses integrating premail with various remailers.

.SS Netscape

Create symbolic links to premail called "prezilla" and
"premailmove". To do this, make sure you are in the same directory
as premail itself, and type:

   ln -s premail prezilla
   ln -s premail premailmove

Find a working movemail. If you have emacs installed, then you
most likely have one in /usr/lib/emacs/etc/movemail or a similar
location. If you don't already have one, then the source (or
possibly binary) for one is included in the Netscape Navigator
distribution and you can build it (no need if a binary is
included). Then, make sure premail can find it by adding a line
such as this one to your preferences file:

   $config{'movemail'} = '/usr/lib/emacs/etc/movemail';

This usage assumes that you get your mail from a mail spool, as
opposed to POP or some such. You may be able to get it to work for
POP as well, but you need to figure out how to invoke movemail to
move the mail from your mailbox to a file (specified as the second
argument to the movemail script).

Add this line to your .cshrc, assuming your shell is csh or
tcsh:

   setenv NS_MSG_DELIVERY_HOOK /your/path/to/prezilla

Also run this command from the shell so it takes effect
immediately. The syntax is slightly different if your shell is sh
or bash _(note: is this right? Yes, it is.)_:

   NS_MSG_DELIVERY_HOOK=/your/path/to/prezilla
   export NS_MSG_DELIVERY_HOOK

Start Netscape (exit first if it's already running). Go to the
Options|Mail and News Preferences dialog, select the Servers tab.
Click on "External Movemail" and set the value to
/your/path/to/premailmove.

Try sending yourself mail, and clicking on "Get Mail" from the
Netscape Mail window. The mail should show up in the Inbox,
correctly decoded.

To view the X-Premail-Auth: header field to see the result of
signature checking, select Options|Show All Headers from the
Netscape Mail window.

Note: as of Netscape v3.0, there is still a bug in the handling of
the Bcc: header field, which causes it to be ignored. Do not use
this field. Hopefully, this will be fixed in a future version of
Netscape.

Note: some 3.0 beta versions modify the PATH environment variable.
If premail seems to work correctly from the command line, but not
from Netscape, try setting absolute pathnames for the programs used
by premail.

.SS Pine

As of Pine 3.94, premail integrates both outgoing mail and the
decryption of plain PGP incoming mail. Unfortunately, decryption of
MIME-based mail is not yet supported.

Two Pine configuration options need to be set to integrate premail
(i.e. from the main Pine screen, S for setup, then C for
configure). First, sendmail-path should be set to a value similar
to this (substituting the actual path to premail):

   /your/path/to/premail -oem -t -oi

Second, display_filters should be set to a value similar to this:

.RS 3
_BEGINNING("-----BEGIN PGP")_ /your/path/to/premail -decode -body
.RE

If you have trouble finding these options in the setup screen, then
you can edit the .pinerc file directly.

One caveat when using Pine: it usually tries to be "smart" and
remove comments from e-mail addresses, which includes the
double-paren commands such as ((encrypt-pgp)). There are a few ways
to deal with this problem:

.RS 2
 * Use "( )" instead of (( )). _Note: I think this works, but I
haven't tested it._
 * Use the alternative caret syntax. These two lines mean the same
thing:

 To: raph@cs.berkeley.edu ((encrypt-key, sign))
 To: raph@cs.berkeley.edu^encrypt-key^sign
 * Avoid setting the encryption options on the command line
altogether, and set them in the addresses file instead (see
"The Address File").  You could also use the header forms.
.RE

.SS MUSH

Premail integrates well with the Mail User's Shell.  Add the following lines to your .mushrc:

.RS 3
set sendmail='premail -oem -i -t #Comment'
cmd decode 'pipe !* premail -decode >>$MAIL;delete !*'
.RE

Outgoing mail will be handled automatically.  Note that if you are sending 
anything with a ';' on the mush command line, it must be enclosed in "'". For
example:

.RS 3
mail user@host ((chain=replay;hacktic))
mail 'user@host ((chain=replay;hacktic))'
.RE

The first line above will fail, use the second line instead.

For outgoing mail, simply type 'decode [msg-list]'.  It will decode those 
messages, append them to the end of your mailbox.  You will be notified of the
new mail.  Note that this occurs even with those messages in the list that
premail does nothing to.  Since no update has been done, you can use
undelete to look at the old (pre-premail) versions of the messages,
but when you quit they'll be tossed.

  
.SS Other mailers

This section describes how to integrate premail with MH, emacs, and
UCBMail. With these mailers, premail will only handle outgoing mail
automatically. To decode incoming mail, you still need to invoke
premail -decode by hand.

.SS Integrating premail with Emacs
  
To add premail support to emacs, just add this line to your .emacs
file:

   (setq sendmail-program "/your/path/to/premail")

.SS Integrating premail with MH
  
In whatever directory you keep the premail executable, create a
symbolic link as follows:

   ln -s premail prepost

Under the name "prepost", premail will masquerade as MH's post
program rather than sendmail. You can get MH to call premail
instead of post by adding this line to your .mh_profile:

   postproc: /your/path/to/prepost

One thing to keep in mind is that premail's processing is done
before that of post. Thus, if you have MH aliases, they will get
expanded after the call to premail. If you use only premail
aliases, only MH aliases, or neither, this won't be a problem.

Alternatively, if you have appropriate privileges, you can add this
line to /usr/lib/mh/mtstailor:

   sendmail: /your/path/to/premail

You may also have to configure MH to call sendmail locally rather
than connecting to an SMTP server. Don't do both the mtstailor and
mh_profile methods -- that would run premail twice.

.SS Installing premail with UCBmail
  
UCBmail is a simple mailer front-end (also known as Mail and
mailx). If, when you type "mail user@site.dom", the mailer asks you
for a "Subject: " line, you are undoubtedly using UCBmail. If so,
you are in luck - it integrates very easily with premail. Just add
this line to your ~/.mailrc file:

   set sendmail=/your/path/to/premail

Using premail with UCBmail is not very different from using premail
by itself, but you do get some handy features, such as including
files and using an editor on the mail.

.SH NOTES

This section covers a number of techincal notes related to the
operation of premail. This information should not be necessary for
ordinary use.

.SS Multiple recipients
  
One of the tricky problems with mail encryption packages such as
premail is how to deal with multiple recipients. Based on
experience with previous versions, this version of premail tries
very hard to "get it right." However, as a consequence, the exact
behavior can sometimes be difficult to understand.

The hard part is when some of the recipients have encryption
specified and others don't. What premail does is to split the
recipients up into groups. If two recipients can receive the same
actual message, they are in the same group, otherwise not. For
example, recipients getting an encrypted and an unencrypted message
cannot be in the same group. However, multiple recipients appearing
in To: and Cc: fields that use the same encryption method will be
in the same group. A single message, encrypted to multiple
recipients, will be sent, which is considerably more efficient than
encrypting separately for each recipient.

One subtle point is the handling of Bcc: recipients. The semantics
of Bcc: specify that the mail be sent to each of the Bcc:
recipients, but that none of the other recipients be able to find
out their identity. However, encrypting to multiple recipients
would defeat this, because it is possible to indentify all of the
recipients of the encrypted message. Thus, each encrypted Bcc:
recipient gets its own group.

Each recipient of an anonymous message also gets its own group, for
similar reasons.

An attempt is made to make the headers in the message received by
the recipient be the same as if no encryption were used.
Specifically, the complete To: and Cc: header fields will be
present, but the Bcc: field will be missing. One exception to this
rule is anonymous messages, in which case the recipient can't see
any information about the other recipients.

.SS Error handling
  
The goal is to handle errors in the same way as sendmail. Thus, the
exact handling depends on the setting of the -oe command line
option. The default (as in sendmail) is -oep, meaning that the
error message is printed to standard out, and the mail message is
appended to the dead letter file (the location of which is a
configuration option).

Another choice is -oem, in which case the error message and the
mail message are packaged together and mailed back to the user.
This is appropriate when the mailer has no way to deal with error
messages returned from premail.

One additional choice, not provided by sendmail, is -oed, which
prints the error message on standard out, but drops the mail
message. This is a good choice if the mailer can interpret a
non-zero return status code as indication of an error. This is the
mode used by Netscape (and is automatically selected when premail
is invoked as prezilla).

.SS Security issues
  
In designing premail, usefulness and convenience were considered
more important than top security. Nonetheless, it can provide good
security, especially if you are aware of the security issues.

One overriding assumption was that your machine is secure, and that
the serious threats were those of eavesdroppers on the network and
e-mail forgers. In general, premail handles passive attacks quite
well, while containing a number of vulnerabilities to active
attacks.

Here are some potential security pitfalls with premail:

.RS 2
 * Stores secrets information on disk file.
 * Stores (potentially sensitive) temporary files on disk.
 * Does not check authenticity of remailer list, remailer public key
ring, or Mixmaster information gotten from the Web.
 * Accessing the Web signals when anonymous mail is about to be sent,
perhaps aiding traffic analysis.
 * Does not evaluate the trustworthiness of public keys used for
encryption and signature checking.
.RE
  
.SS Useless Features
  
Over the years, premail has accumulated a number of features of
dubious value. One of them is support for MOSS, a nice encryption
protocol that nevertheless failed to catch on. If you feel the urge
to use it, documentation is available in the release notes for
version 0.43.

One potentially cool feature is a server for decoding e-mail. This
_would_ be a useful feature if there were any mailers which used
it. The protocol for the server was designed to be fast (much, much
faster than invoking premail -decode separately for each message),
as well as "crypto-neutral," meaning that it doesn't contain any
features designed just for crypto, and that it could be used for
other tasks, for example converting image formats or character
sets. Thus, a client designed to use this protocol would likely be
fully exportable from the US. If you're interested in integrating
support for this protocol into a popular e-mail client, please get
in touch with me.

.SH Debugging

If you run into trouble with premail, it might be of value to turn
on some of the debugging options. This can be done on the command
line, or in the .premailrc file. In the former case, add a
+debug=chvy argument to the command line. In the latter case, try:

   $config{'debug'} = 'chvy';

Here are the meanings of the debug options:

 c: Print command line invocation.
 h: Print headers of input message.
 l: Debug output goes to log instead of stdout.
 p: Print finished message, do PGP.
 r: Print chain chosen (useful in debugging chain selection).
 y: Print finished message, don't do PGP.
 v: Print all kinds of verbose info.

Note that +debug=p puts the encrypted message on stdout. This may
be useful for constructing reply blocks, among other things.

If there are problems with premail, then one of the best ways to
track them down is through the log. Try setting the debug
configuration option to chvl, setting the logfile configuration
option (for example, to ~/.premail/log), and then examining the
log. Also, if you're bringing bugs to my attention, it helps a lot
if you can send me relevant excerpts from the log.

.SH SEE ALSO

This document is available online at
http://www.c2.net/~raph/premail/.
   
This is the documentation for premail 0.45.