|
|
1.1 root 1:
2: Stealth V1.1 by Henry Hastur
3: ----------------------------
4:
5: Stealth is a simple filter for PGP which strips off all identifying header
6: information to leave only the encrypted data in a format suitable for
7: steganographic use. That is, the data can be hidden in images, audio
8: files, text files, CAD files, and/or any other file type that may contain
9: random data, then sent to another person who can retrieve the data from
10: the file, attach headers, and PGP decrypt it.
11:
12: Stealth is not intended to replace the standardised methods of using
13: encryption (e.g. ASCII-armoured PGP email) ; in an ideal world we would
14: all be able to send openly encrypted mail or files to each other with no
15: fear of reprisals, however there are often cases when this is not possible,
16: either because the local government does not approve of encrypted
17: communication, or perhaps because you are working for a company that
18: does not allow encrypted email but doesn't care about Mandelbrot
19: GIFs. This is where Stealth and steganography can come into play.
20:
21:
22: Compiling
23: ---------
24:
25: Stealth has currently only been tested on BSD and SVR4 Unix (and as
26: such should work with most varieties of Unix), with both non-ANSI
27: compilers and ANSI compilers with 'minimal ANSI' flags. In order to
28: compile the program, you should just be able to extract the files
29: from the tar file provided, then type 'make'. If that fails you may
30: need to change the definition of CC and CFLAGS in the makefile to
31: get it to compile. On machines with gcc, the GNU C compiler, Stealth
32: can be compiled by simply changing the 'CC=cc' line in makefile to
33: 'CC=gcc'.
34:
35: Stealth can be compiled on MS-DOS using the Microsoft C compiler with
36: the following command line :
37:
38: cl /DDOS stealth.c
39:
40: That's all there is to it - the compiler will output a STEALTH.EXE
41: ready for use. Other compilers should work, but you may need to change
42: header files and the code at the beginning of main() which sets the
43: mode of stdin and stdout to binary.
44:
45: Usage
46: -----
47:
48: Stealth always reads from its standard input and writes to the standard
49: output, though when adding headers to data the data has to be stored in a
50: temporary file (see Security Concerns below).
51:
52: Command line arguments :
53:
54: -c Conventional encryption used rather than public key
55: -a Add headers (defaults to strip headers)
56: -v Verbose output.
57:
58: The -a argument takes a string specifying the key id to put into the
59: header. This can be specified either as an identifying name (e.g.
60: [email protected]), or as a 24-bit key id as given by the pgp -kv
61: command, prefixed by '0x' (See examples below). The latter has been
62: added for MS-DOS users who can only pass a single word to the program
63: for a key name.
64:
65: Stealth needs to be able to find your pubring.pgp file, which it does
66: by first checking in the directory pointed to by $PGPPATH, then the
67: current directory.
68:
69:
70: Examples
71: --------
72:
73: To encrypt a file with PGP and store it in the file pgp.stl prior to sending :
74:
75: pgp -ef < secrets.dat | stealth > pgp.stl
76:
77: To encrypt a file with conventional (IDEA) encryption, and pass to a
78: steganography program called steg_program :
79:
80: pgp -fec < secrets.dat | stealth -c | steg_program
81:
82: To take the output from a steganographic extraction tool, add headers
83: for key "Your Id", and decrypt :
84:
85: steg_program | stealth -a "Your Id" | pgp -f > secrets.dat
86:
87: [ Note : this use of " marks will only work on Unix, not MS-DOS. If
88: you have to specify a key with more than one word, you will probably
89: have to specify the key id instead ]
90:
91: To take the conventionally encrypted output from a steg program, attach
92: headers and decrypt :
93:
94: steg_program | stealth -ac | pgp -f > secrets.dat
95:
96: To take the output from a steganography program, add the headers
97: for a key whose 24-bit id is 23ffff, and decrypt :
98:
99: steg_program | stealth -a 0x23ffff | pgp -f > secrets.dat
100:
101:
102: Limitations
103: -----------
104:
105: Files can be signed, but can only be encrypted to one recipient - extra
106: RSA headers for all but the first recipient will be stripped from the
107: file. In addition, if you specify conventional encryption but pass an
108: RSA-encrypted file into the filter the RSA-block will be stripped. In
109: either case, stealth will print out warnings to inform you of this.
110:
111: Stealth provides no support for ASCII-armoured PGP messages - it will
112: only work with the binary output format, and the output will have to
113: be converted to a useable form after processing, either with a
114: steganography program or a standard utility such as uuencode.
115:
116: Finally, for technical reasons there are potential problems with public
117: keys of size (typically) 8*n + 1 or 8*n + 2 (e.g. 513 or 1026). If you
118: are encrypting to a key of a peculiar size, it's possible that the algorithm
119: used to add headers could fail, but fortunately this can be detected while
120: stripping the headers, and a warning will be printed. If this warning appears,
121: you will probably want to encrypt the data again until a suitably sized
122: RSA-block is created.
123:
124: It is NOT neccesary to remove garbage data that the steganography program
125: may have added to the end of the PGP-encrypted data. PGP output contains
126: an encrypted end-of-file mark that allows the program to decrypt correctly
127: and ignore any trailing garbage.
128:
129:
130: Security Concerns
131: -----------------
132:
133: After passing through the stealth filter, the PGP-encrypted data is
134: essentially white noise, with no identifying marks, and whilst it may
135: well have enough peculiarities for an expert cryptanalyst to recognize
136: it as encrypted data, the probability is much less than would be the
137: case with a PGP header identifying the recipient attached.
138:
139: One other concern is that stealth has to create a temporary file when
140: reading in data to attach headers, and depending on the build options
141: chosen the program will store it in either $PGPPATH, the current directory
142: or /tmp. On Unix machines, the file will be deleted as soon as it is opened,
143: making it difficult to capture, but on other operating systems the file
144: will only be deleted when it has been used. (In either case the file will
145: be zeroed before being closed).
146:
147: In addition, some operating systems will use temporary files on your disk
148: to emulate unix pipes (e.g. MS-DOS) - these files will not be zeroed when
149: finished with !
150:
151:
152: Export Restrictions
153: -------------------
154:
155: Stealth is probably not covered by current export restrictions under the
156: US ITAR regs, but I'm not a lawyer, so if in doubt check it out yourself.
157: It was written outside the US and imported, so should soon be available
158: on some European ftp sites as well as US sites.
159:
160:
161: Henry Hastur
162:
163:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.