My Personal Website

Introduction to Humber

The Humber project was developed as a symmetric, private key, stream cipher program, together with an associated key generation program.  It is a two stage, quadruple key algorithm where the keys are implemented as array elements in the form of an index register and a shift register for each stage of encryption.  Encryption and decryption use a bitwise exclusive OR (XOR) process so any file in any format can be encrypted and decrypted, subject to a maximum file size of 30 Mbytes.  Any file name less than 200 characters long may be used for files to be encrypted.

The 8192 bit key is generated by a multiple tandem pseudo-random number generator (MTNG) with a time-based disconnection between the initial seed value and the eight seeds used to generate the key.  The sender and receiver must use an identical copy of the keys.  The key generator output is a FORTRAN source code file that is compiled into the HUMBER executable file.  The executable file is distributed to a network users and the source code key file is then destroyed.  The security of the ciphers allows for the fact that the cipher machine is publicly available and depends only on the security of the keys.  Therefore the keys must be kept secret: otherwise anyone in possession of them will have the ability to decrypt any intercepted encryption.  Humber is distributed as an executable application and anyone in possession of the same distribution version will be able to decrypt any message encrypted using that version.  However, if a different distribution has been used for encryption, the messages cannot be decrypted.  This allows a small group of people to create an exclusive message network.  If the key becomes compromised because one of the machines falls into the wrong hands, a new distribution can be arranged with a new embedded key.

Each encryption is assigned a random 32 bit rotation index that indicates how the key file should be set up at the start of decryption and the program also calculates a random 32 bit hash to change the initial register settings.  The combination of key values, rotation index and hash is unique to a single encryption.  Humber calculates a random 32 bit message number that is used as part of the file name for the encrypted file, in conjunction with the system date.  As part of the encryption process, Humber writes a header for each encryption indicating the rotation index, and the hash.  Humber can either produce an encrypted character stream for normal operation or the characters can be output (and input) as hexadecimal pairs for the purpose of plaintext challenges or to allow transparency of operation.  The original file name is appended to the header and the whole header is encrypted using the original key values.  The header also indicates whether or not the encrypted file has been converted to hexadecimal format.  This is added to the header, unencrypted, to avoid the possibility of its use as a crib in decrypting messages.  The encrypted message is saved as using the created file name consisting of the system date and the random message number.  The encrypted message header and new file name ensure that there is no indication of the type of file originally encrypted.