espondence tables, squares, or grids, kept secret between the corresponding parties. Alternatively, the secret key could have been a codeword (named keyword), usually simple to pass on and memorize, but more or less difficult to guess. Nowadays, full and public knowledge of the algorithm used in cryptographic standards poses no threat whatsoever to security. Rather, secrecy is based entirely on the secret key, its type, length, means of exchange, and rapid renewal (the last two points to be addressed later). A third party who may try to make sense of a ciphertext without the key must resolve the enigma through more or less extensive labor. Such a task is referred to as cryptoanal- ysis (or, for short, cryptoanalysis). The goal of cryptanalysis, also called code breaking, is to "break" the cipher or ciphertext (familiarly called "code"), meaning recovering the plaintext by practical, inexpensive, hopefully rapid, and effortless methods. Note 25.1 Message encryption, decryption, and code breaking that code breaking should not be confused with the nobler, academic notion of code cracking. 1 In any case, the task of trying either to "break" or "crack" a code is referred to as an attack, giving a military flavor. Codes may be attacked either by sophisti- cated cryptanalysis algorithms or, more directly, by sheer "brute force" (hence the name brute-force attack in crypto jargon). This latter approach refers to various techniques of guessing keys at random, exploring what is referred to as the keyspace. For an N-bit key size, the keyspace corresponds to 2N possibilities. In code breaking, rapidity execution is essential, because the plaintext is generally not only content-sensitive but also time-sensitive. This is the reason why successive generations of cryptosystems and key sizes have been designed to make it virtually impossible to a third party, even a state with powerful cryptanalysis and computing means, to break them. With a key size of N = 64 bits, the keyspace is 264 = = 1.8 X 1019. At a rate of trying out one 