The purpose of encryption is to conceal information from prying eyes. Given a message, called a plaintext, a cipher will turn this into an encrypted form, called a ciphertext. To do this it makes use of a key, otherwise known as a password.
ICE is an example of a class of ciphers called private-key block ciphers. Other ciphers of this type include DES, IDEA, LOKI, and FEAL. The private-key part means that its security relies on the key being kept secret, as opposed to public-key ciphers such as RSA, where the security relies on certain mathematical properties of the key.
The block cipher part means that ICE encrypts data in blocks (with a block size of 64 bits). In other words, given a 64-bit plaintext and a key, the ICE algorithm will produce a 64-bit ciphertext. And given the same key, ICE can convert the ciphertext back to its original plaintext. This is different from stream ciphers, which produce a stream of bits which are exclusive-ORed with a plaintext to produce the ciphertext.
In a well-designed cipher, the only way to decrypt an intercepted message is to exhaustively try every key. Because of this, the key size of a cipher is very important in determining its security.
ICE has multiple variants with different levels of security. At levels 0 and 1, the key size is 64 bits. This means that an exhaustive key search would require an average of 263 (approx 1019) encryptions. Level 2 uses a 128-bit key, level 3 a 192-bit key, and so on. The level of security against exhaustive key searches is limited only by speed requirements (which scale roughly with key size), and the ability of the user to generate and remember long passwords.
The ICE variants are as follows
To validate an implementation of ICE, the following triplets should be used.
Variant | Key | Plaintext | Ciphertext |
---|---|---|---|
ICE | deadbeef01234567 | fedcba9876543210 | 7d6ef1ef30d47a96 |
Thin-ICE | deadbeef01234567 | fedcba9876543210 | de240d83a00a9cc0 |
ICE-2 | 00112233445566778899aabbccddeeff | fedcba9876543210 | f94840d86972f21c |