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