271 lines
11 KiB
Plaintext
271 lines
11 KiB
Plaintext
|
DLOCK.TXT -- DOCUMENTATION FOR DLOCK.EXE AND ITS SOURCE FILES
|
||
|
|
||
|
|
||
|
INTRODUCTION
|
||
|
|
||
|
DLOCK is a Data LOCK program that uses the Diamond encryption algorithm. It
|
||
|
also tests the correct implementation of the Diamond and Diamond Lite
|
||
|
encryption algorithms in the enclosed library files.
|
||
|
|
||
|
Although DLOCK is useful as it stands, it is probably of more use as a
|
||
|
library of source code to use to build encryption into other applications.
|
||
|
Diamond and Diamond Lite are 100% roylty free algorithms, derived from the
|
||
|
MPJ and MPJ2 encryption algorithms.
|
||
|
|
||
|
I've studied too much cryptography to make a brash claim of security for any
|
||
|
algorithm, but my confidence level in Diamond and Diamond Lite is very high
|
||
|
because of the failure of anyone I've dared to break MPJ to do so for several
|
||
|
years. See the challenge section below.
|
||
|
|
||
|
When used to encrypt or decrypt files, DLOCK places no special headers or
|
||
|
other identification on the ciphertext files. This is good for security, but
|
||
|
bad for user friendliness. It always processes from one file to another, so
|
||
|
that you can verify that the encryption or decryption is good before deleting
|
||
|
the original. This is very important, since a single character typo in the
|
||
|
pass phrase is enough to render a file total garbage.
|
||
|
|
||
|
|
||
|
LEGAL NOTICES
|
||
|
|
||
|
Documentation files, executable files, and source code files not marked
|
||
|
otherwise are Copyright (C) 1994 Michael Paul Johnson. All rights reserved.
|
||
|
There is NO WARRANTY expressed or implied for any of this. Diamond and
|
||
|
Diamond Lite are Trade Marks of Michael Paul Johnson. Other trade marks
|
||
|
mentioned herein belong to their owners and are mentioned for identification
|
||
|
purposes only.
|
||
|
|
||
|
Some cryptographic, cryptanalytic, and key management software and technical
|
||
|
data is subject to export controls and other legal restrictions. Contact
|
||
|
competent legal authority for more information. It is your responsibility to
|
||
|
comply with all currently valid laws and treaties that apply to you. Do not
|
||
|
use this software or technical data for any illegal activity.
|
||
|
|
||
|
As far as is permitted by law, permission is hereby granted to copy and use
|
||
|
the copyrighted portions of this distribution for any legal use, provided
|
||
|
that the documentation is kept unmodified and the software is used in
|
||
|
accordance with the GNU Library General Public License as published by the
|
||
|
Free Software Foundation, version 2.
|
||
|
|
||
|
CRC.H, CRC.CPP, DIAMOND.H, and DIAMOND.CPP are in the Public Domain.
|
||
|
|
||
|
|
||
|
SYSTEM REQUIREMENTS
|
||
|
|
||
|
Two compiled versions are included in this distribution: MS-DOS executable
|
||
|
and Sun SparcStation binary. If you wish to use this program on another
|
||
|
platform, you may recompile the provided source code for that platform.
|
||
|
|
||
|
|
||
|
COMMAND LINE SYNTAX
|
||
|
|
||
|
To test Diamond and Diamond Lite against the validation data in DIAMOND.DAT:
|
||
|
DLOCK /T
|
||
|
|
||
|
To encrypt a file:
|
||
|
DLOCK /E [/S] infilename outfilename [/Ppass phrase | /Kkeyfile]
|
||
|
|
||
|
/E = Encrypt.
|
||
|
|
||
|
/S = Silent mode (minimal screen output).
|
||
|
|
||
|
/P = Pass phrase follows on the command line. The pass phrase is case
|
||
|
sensitive, and every character counts. Embedded spaces are OK. /P, if used,
|
||
|
MUST be the lase command line parameter, since all characters after it are
|
||
|
considered to be part of the passphrase.
|
||
|
|
||
|
/K = Get the pass phrase from the file name provided. The passphrase in a
|
||
|
key file may include ANY binary data, up to 256 bytes.
|
||
|
|
||
|
Note that if /P or /K is not used, then DLOCK looks for the passphrase in the
|
||
|
environment variable DLOCK_KEY. If no passphrase is found there, then DLOCK
|
||
|
will prompt you to enter the passphrase at the keyboard. Spaces and other
|
||
|
special characters are allowed in the passphrase.
|
||
|
|
||
|
For example,
|
||
|
DLOCK /E MARCH.WK1 MARCH.ENC /PNone of YoUr BuSiness! Really!
|
||
|
encrypts MARCH.WK1 with the passphrase "None of YoUr BuSiness! Really!",
|
||
|
placing the results in MARCH.ENC. If you wish to get rid of the plain text
|
||
|
version, use another utility to overwrite and delete the original.
|
||
|
|
||
|
To decrypt a file:
|
||
|
DLOCK /D [/S] infilename outfilename [/Ppass phrase | /Kkeyfile]
|
||
|
|
||
|
Switches used here are the same as for encryption, except that the /D (for
|
||
|
Decrypt) replaces /E.
|
||
|
|
||
|
For example,
|
||
|
DLOCK /D MARCH.ENC MARCH.WK1 /PNone of YoUr BuSiness! Really!
|
||
|
decrypts the file encrypted above.
|
||
|
|
||
|
Command line switches are not case sensitive, and may start with - or /.
|
||
|
There should be a space or tab between adjacent switches. Except for /P,
|
||
|
which must be last, the switches may occur in any order (before, between, or
|
||
|
after the file names).
|
||
|
|
||
|
|
||
|
HOW DLOCK WORKS
|
||
|
|
||
|
When encrypting or decrypting files, DLOCK uses a 10-round Diamond block
|
||
|
cipher in cipher block chaining with ciphertext feedback mode (CBC). This
|
||
|
means that any regularities in the plain text are completely obscured in the
|
||
|
cipher text. The original file length is exactly preserved. See the source
|
||
|
code and the accompanying documents for details.
|
||
|
|
||
|
|
||
|
ADVANTAGES OF DLOCK
|
||
|
|
||
|
1. To the best of my knowledge, no one has broken Diamond (or its
|
||
|
predecessors, MPJ and MPJ2), yet. See the US$271.82 challenge, below.
|
||
|
|
||
|
2. The block chaining mode is time-tested and well respected.
|
||
|
|
||
|
3. Complete source code is included for your examination and to facilitate
|
||
|
porting to other platforms.
|
||
|
|
||
|
4. The cipher text is the same size as the plain text.
|
||
|
|
||
|
5. It is free.
|
||
|
|
||
|
6. You are free to use the algorithms and/or code in this distribution to
|
||
|
incorporate encryption into your own applications, without payment of
|
||
|
royalties or delays.
|
||
|
|
||
|
7. Diamond and Diamond Lite, when incorporated into a system that weakens
|
||
|
the effective key length and resists modification by the user to the
|
||
|
satisfaction of the NSA, may be exportable. Contact the Department of State
|
||
|
and the NSA for details and additional requirements.
|
||
|
|
||
|
8. DLOCK allows easy validation of implementations of Diamond and Diamond
|
||
|
Lite.
|
||
|
|
||
|
9. If you don't like the way DLOCK works and you can program in C or C++,
|
||
|
you can fix it to your liking.
|
||
|
|
||
|
10. The author is easy to contact via email (m.p.johnson@ieee.org).
|
||
|
|
||
|
11. The encryption is too strong to be generally exportable. There are no
|
||
|
intentional weaknesses or trap doors in the algorithm or the program.
|
||
|
|
||
|
12. Identical files, encrypted with identical keys, always yield identical
|
||
|
ciphertext. This is good for validating algorithms.
|
||
|
|
||
|
|
||
|
DISADVANTAGES OF DLOCK
|
||
|
|
||
|
1. Key management is all manual.
|
||
|
|
||
|
2. Encryption of multiple files is cumbersome unless you use an archiving
|
||
|
utility (like PKZIP, LHA, ARJ, etc.) first.
|
||
|
|
||
|
3. No one is getting rich on your purchase of this product, so it doesn't
|
||
|
help the economy, much.
|
||
|
|
||
|
4. The ciphertext reveals the size of the plain text (but not its contents).
|
||
|
|
||
|
5. Identical files, encrypted with identical keys, always yield identical
|
||
|
ciphertext. This is bad for resistance to traffic analysis.
|
||
|
|
||
|
6. No 7-bit ASCII armoring (uuencoding or radix-64 encoding) is built in for
|
||
|
EMAIL purposes -- use another utility to do that.
|
||
|
|
||
|
7. The encryption is too strong to be exportable without a lot of hassles
|
||
|
and controls on the destinations.
|
||
|
|
||
|
8. If you forget your passphrase, your encrypted data is as good as gone. I
|
||
|
can't get it back, no matter how important it was.
|
||
|
|
||
|
|
||
|
DATA COMPRESSION
|
||
|
|
||
|
DLOCK doesn't compress data, but if you compress your data before encrypting
|
||
|
it (i.e. with PKZIP, ARJ, etc.), you will decrease the size of the ciphertext
|
||
|
and improve security. Attempted compression after encryption does neither.
|
||
|
|
||
|
|
||
|
RECOMPILING DLOCK
|
||
|
|
||
|
You don't really need to recompile DLOCK unless you want to modify it or port
|
||
|
it to another platform. I compiled DLOCK.EXE with Borland C++ 4.0, using the
|
||
|
commands in MAKDLOCK.BAT. This batch file also applies PKLITE compression,
|
||
|
but that is optional. I compiled the Unix version of DLOCK on a Netcom
|
||
|
interactive host machine with the command:
|
||
|
|
||
|
c++ -DUNIX -o dlock dlock.c diamond.c crc.c
|
||
|
|
||
|
|
||
|
VERIFYING THAT YOUR VERSION HASN'T BEEN TAMPERED WITH
|
||
|
|
||
|
If you have PGP, you can check my detached signatures on the files in this
|
||
|
distribution with the file VALIDATE.BAT, which should look like:
|
||
|
|
||
|
pgp challeng.sig challeng.enc
|
||
|
pgp copying.sig copying.txt
|
||
|
pgp crc_cpp.sig crc.cpp
|
||
|
pgp crc_h.sig crc.h
|
||
|
pgp def.sig def.h
|
||
|
pgp diamondc.sig diamond.cpp
|
||
|
pgp diamondd.sig diamond.dat
|
||
|
pgp diamondh.sig diamond.h
|
||
|
pgp diamondp.sig diamond.ps
|
||
|
pgp diamondt.sig diamond.txt
|
||
|
pgp dlocksun.sig dlock
|
||
|
pgp dlockcpp.sig dlock.cpp
|
||
|
pgp dlockexe.sig dlock.exe
|
||
|
pgp dlocktxt.sig dlock.txt
|
||
|
pgp makdlock.sig makdlock.bat
|
||
|
pgp thesis.sig thesis.txt
|
||
|
|
||
|
If you don't have a copy of PGP, you can buy a copy from Viacrypt or get the
|
||
|
freeware version from numerous sites, including the Colorado Catacombs BBS
|
||
|
(303-938-9654) or ftp, see ftp:csn.org//mpj/README.MPJ.
|
||
|
|
||
|
|
||
|
THE US$271.82 CHALLENGE
|
||
|
|
||
|
OK, US$271.82 is not enough to pay for the time it would take to do serious
|
||
|
cryptanalysis of the Diamond Encryption Algorithm, but it is enough to prove
|
||
|
that data encrypted with DLOCK is secure against the average hacker. The
|
||
|
file CHALLENG.ENC was encrypted with DLOCK.EXE. If you are the first person
|
||
|
to (1) decrypt CHALLENGE.ENC and (2) follow the instructions in the decrypted
|
||
|
file to claim your prize before midnight UTC, 29 April 1997, then you will
|
||
|
get US$271.82 of my hard-earned money. To claim this prize, you must reveal
|
||
|
how you deciphered the ciphertext. You must also not break the law
|
||
|
(including any currently valid export laws) in the process of earning this
|
||
|
prize. If the ciphertext is not broken, I get to keep my money.
|
||
|
|
||
|
The plain text that CHALLENGE.ENC was encoded from is plain, uncompressed,
|
||
|
7-bit ASCII with both CR and LF at the ends of lines. It contains English
|
||
|
text, including instructions on how to claim the prize and contact the
|
||
|
author.
|
||
|
|
||
|
|
||
|
THE FAIR CHALLENGE
|
||
|
|
||
|
The US$271.82 challenge given above is probably unfair, unless I really goofed
|
||
|
badly in the implementation of DLOCK or the invention of the Diamond
|
||
|
Encryption Algorithm. On the other hand, if you find what you think is a
|
||
|
weakness or error in either DLOCK or Diamond (other than the disadvantages
|
||
|
listed above), please let me know. There is no cash reward for such
|
||
|
information, but I will use the information to help improve the encryption
|
||
|
programs that I write.
|
||
|
|
||
|
|
||
|
CONTACTING THE AUTHOR
|
||
|
|
||
|
You can reach me by email at m.p.johnson@ieee.org, CompuServe 71331,2332, or
|
||
|
at Mike Johnson, PO BOX 1151, LONGMONT CO 80502-1151, USA.
|
||
|
|
||
|
Check for the latest version of this program on the Colorado Catacombs BBS,
|
||
|
303-938-9654, or for ftp from csn.org//mpj or ftp.netcom.com//pub/mpj.
|
||
|
|
||
|
|
||
|
REGISTRATION
|
||
|
|
||
|
This program is free, so registration is not required. However, if you would
|
||
|
like to be added to my list of users to be notified of upgrades and related
|
||
|
products, or if you would like to make a donation to advance the cause of
|
||
|
free privacy protection software, feel free to contact me at the above
|
||
|
address.
|
||
|
|
||
|
|