Stream Ciphers HC-128 and HC-256


HC-128 and HC-256 are two software-efficient stream ciphers. In 2008, HC-128 was selected for the final portfolio of eSTREAM, the stream cipher project of the European Network of Excellence for Cryptology (ECRYPT, 2004-2008). HC-256 is the 256-bit companion version of HC-128. From a 128-bit key and a 128-bit initialization vector, HC-128 generates keystream with length up to $2^{64}$ bits. From a 256-bit key and a 256-bit initialization vector, HC-256 generates keystream with length up to $2^{128}$ bits.

HC-256 and HC-128 were designed to demonstrate that strong stream cipher can be built from nonlinear feedback function and nonlinear output function. The large secret states of the two ciphers are updated in a nonlinear way, and table lookup (with changing tables) is used in the generation of keystream.

HC-128 and HC-256 are very efficient on modern microprocessors. For long message, the encryption speed of HC-128 is about 2.1 cycles/byte on 32-bit Intel Core 2 microprocessor, and the encryption speed of HC-256 is about 3.3 cycles/byte on 32-bit Core 2 microprocessor. The encryption speed of HC-128 is the fastest among the secure stream ciphers being submitted to eSTREAM proejct.

HC-256 and HC-128 are not covered by any patent and they are freely-available.


The papers and souce codes of HC stream ciphers submitted to eSTREAM are available at eSTREAM HC

Documents
1. Hongjun Wu. ``The Stream Cipher HC-128.'' New Stream Cipher Designs -- The eSTREAM Finalists, LNCS 4986, pp. 39--47, Springer-Verlag, 2008. (PDF)
2. Hongjun Wu. ``A New Stream Cipher HC-256.'' Fast Software Encryption -- FSE 2004, LNCS 3017, pp. 226--244, Springer-Verlag 2004. (PDF)
    (the full version of HC-256 is available at the IACR eprint, http://eprint.iacr.org/2004/092.pdf)

Source Code in C

HC-128     Reference implementation:   hc128_ref.h
Optimized implementation for 32-bit Core 2 processor:   hc128_opt32.h   2.1 cycles/byte
Code for generating keystream:   hc128_TestKeystream.c  
Code for measuring speed:   hc128_MeasureSpeed.c  
 
HC-256     Reference implementation:   hc256_ref.h
Optimized implementation for 32-bit Core 2 processor:   hc256_opt32.h   3.3 cycles/byte
Code for generating keystream:   hc256_TestKeystream.c  
Code for measuring speed:   hc256_MeasureSpeed.c  


Last Modified on December 15 2009