Blame crypt/README.ufc-crypt

Packit Service 82fcde
The following is the README for UFC-crypt, with those portions deleted
Packit Service 82fcde
that are known to be incorrect for the implementation used with the
Packit Service 82fcde
GNU C library.
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
	UFC-crypt: ultra fast 'crypt' implementation
Packit Service 82fcde
	============================================
Packit Service 82fcde
Packit Service 82fcde
	@(#)README	2.27 11 Sep 1996
Packit Service 82fcde
Packit Service 82fcde
Design goals/non goals:
Packit Service 82fcde
----------------------
Packit Service 82fcde
Packit Service 82fcde
- Crypt implementation plugin compatible with crypt(3)/fcrypt.
Packit Service 82fcde
Packit Service 82fcde
- High performance when used for password cracking.
Packit Service 82fcde
Packit Service 82fcde
- Portable to most 32/64 bit machines.
Packit Service 82fcde
Packit Service 82fcde
- Startup time/mixed salt performance not critical.
Packit Service 82fcde
Packit Service 82fcde
Features of the implementation:
Packit Service 82fcde
------------------------------
Packit Service 82fcde
Packit Service 82fcde
- On most machines, UFC-crypt runs 30-60 times faster than crypt(3) when
Packit Service 82fcde
  invoked repeated times with the same salt and varying passwords.
Packit Service 82fcde
Packit Service 82fcde
- With mostly constant salts, performance is about two to three times
Packit Service 82fcde
  that of the default fcrypt implementation shipped with Alec
Packit Service 82fcde
  Muffets 'Crack' password cracker. For instructions on how to
Packit Service 82fcde
  plug UFC-crypt into 'Crack', see below.
Packit Service 82fcde
Packit Service 82fcde
- With alternating salts, performance is only about twice
Packit Service 82fcde
  that of crypt(3).
Packit Service 82fcde
Packit Service 82fcde
- Requires 165 kb for tables.
Packit Service 82fcde
Packit Service 82fcde
Author & licensing etc
Packit Service 82fcde
----------------------
Packit Service 82fcde
Packit Service 82fcde
UFC-crypt is created by Michael Glad, email: glad@daimi.aau.dk, and has
Packit Service 82fcde
been donated to the Free Software Foundation, Inc. It is covered by the
Packit Service 82fcde
GNU library license version 2, see the file 'COPYING.LIB'.
Packit Service 82fcde
Packit Service 82fcde
NOTES FOR USERS OUTSIDE THE US:
Packit Service 82fcde
------------------------------
Packit Service 82fcde
Packit Service 82fcde
The US government limits the export of DES based software/hardware.
Packit Service 82fcde
This software is written in Aarhus, Denmark. It can therefore be retrieved
Packit Service 82fcde
from ftp sites outside the US without breaking US law. Please do not
Packit Service 82fcde
ftp it from american sites.
Packit Service 82fcde
Packit Service 82fcde
Benchmark table:
Packit Service 82fcde
---------------
Packit Service 82fcde
Packit Service 82fcde
The table shows how many operations per second UFC-crypt can
Packit Service 82fcde
do on various machines.
Packit Service 82fcde
Packit Service 82fcde
|--------------|-------------------------------------------|
Packit Service 82fcde
|Machine       |  SUN*  SUN*   HP*     DecStation   HP     |
Packit Service 82fcde
|              | 3/50   ELC  9000/425e    3100    9000/720 |
Packit Service 82fcde
|--------------|-------------------------------------------|
Packit Service 82fcde
| Crypt(3)/sec |  4.6    30     15         25        57    |
Packit Service 82fcde
| Ufc/sec      |  220   990    780       1015      3500    |
Packit Service 82fcde
|--------------|-------------------------------------------|
Packit Service 82fcde
| Speedup      |   48    30     52         40        60    |
Packit Service 82fcde
|--------------|-------------------------------------------|
Packit Service 82fcde
Packit Service 82fcde
*) Compiled using special assembly language support module.
Packit Service 82fcde
Packit Service 82fcde
It seems as if performance is limited by CPU bus and data cache capacity.
Packit Service 82fcde
This also makes the benchmarks debatable compared to a real test with
Packit Service 82fcde
UFC-crypt wired into Crack. However, the table gives an outline of
Packit Service 82fcde
what can be expected.
Packit Service 82fcde
Packit Service 82fcde
Optimizations:
Packit Service 82fcde
-------------
Packit Service 82fcde
Packit Service 82fcde
Here are the optimizations used relative to an ordinary implementation
Packit Service 82fcde
such as the one said to be used in crypt(3).
Packit Service 82fcde
Packit Service 82fcde
Major optimizations
Packit Service 82fcde
*******************
Packit Service 82fcde
Packit Service 82fcde
- Keep data packed as bits in integer variables -- allows for
Packit Service 82fcde
  fast permutations & parallel xor's in CPU hardware.
Packit Service 82fcde
Packit Service 82fcde
- Let adjacent final & initial permutations collapse.
Packit Service 82fcde
Packit Service 82fcde
- Keep working data in 'E expanded' format all the time.
Packit Service 82fcde
Packit Service 82fcde
- Implement DES 'f' function mostly by table lookup
Packit Service 82fcde
Packit Service 82fcde
- Calculate the above function on 12 bit basis rather than 6
Packit Service 82fcde
  as would be the most natural.
Packit Service 82fcde
Packit Service 82fcde
- Implement setup routines so that performance is limited by the DES
Packit Service 82fcde
  inner loops only.
Packit Service 82fcde
Packit Service 82fcde
- Instead of doing salting in the DES inner loops, modify the above tables
Packit Service 82fcde
  each time a new salt is seen. According to the BSD crypt code this is
Packit Service 82fcde
  ugly :-)
Packit Service 82fcde
Packit Service 82fcde
Minor (dirty) optimizations
Packit Service 82fcde
***************************
Packit Service 82fcde
Packit Service 82fcde
- combine iterations of DES inner loop so that DES only loops
Packit Service 82fcde
  8 times. This saves a lot of variable swapping.
Packit Service 82fcde
Packit Service 82fcde
- Implement key access by a walking pointer rather than coding
Packit Service 82fcde
  as array indexing.
Packit Service 82fcde
Packit Service 82fcde
- As described, the table based f function uses a 3 dimensional array:
Packit Service 82fcde
Packit Service 82fcde
	sb ['number of 12 bit segment']['12 bit index']['48 bit half index']
Packit Service 82fcde
Packit Service 82fcde
  Code the routine with 4 (one dimensional) vectors.
Packit Service 82fcde
Packit Service 82fcde
- Design the internal data format & uglify the DES loops so that
Packit Service 82fcde
  the compiler does not need to do bit shifts when indexing vectors.
Packit Service 82fcde
Packit Service 82fcde
Revision history
Packit Service 82fcde
****************
Packit Service 82fcde
Packit Service 82fcde
UFC patchlevel 0: base version; released to alt.sources on Sep 24 1991
Packit Service 82fcde
UFC patchlevel 1: patch released to alt.sources on Sep 27 1991.
Packit Service 82fcde
		  No longer rebuilds sb tables when seeing a new salt.
Packit Service 82fcde
UFC-crypt pl0:	  Essentially UFC pl 1. Released to comp.sources.misc
Packit Service 82fcde
		  on Oct 22 1991.
Packit Service 82fcde
UFC-crypt pl1:    Released to comp.sources.misc in march 1992
Packit Service 82fcde
		  * setkey/encrypt routines added
Packit Service 82fcde
		  * added validation/benchmarking programs
Packit Service 82fcde
		  * reworked keyschedule setup code
Packit Service 82fcde
		  * memory demands reduced
Packit Service 82fcde
		  * 64 bit support added