# S-box

In cryptography, an **S-box** (**substitution-box**) is a basic component of which performs substitution. In , they are typically used to obscure the relationship between the key and the — property of .

In general, an S-box takes some number of input bits, *m*, and transforms them into some number of output bits, *n*, where *n* is not necessarily equal to *m*. An *m*×*n* S-box can be implemented as a with 2^{m} words of *n* bits each. Fixed tables are normally used, as in the Data Encryption Standard (DES), but in some the tables are generated dynamically from the (e.g. the and the encryption algorithms).

One good example of a fixed table is the S-box from DES (S_{5}), mapping 6-bit input into a 4-bit output:

S_{5} | Middle 4 bits of input | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | ||

Outer bits | 00 | 0010 | 1100 | 0100 | 0001 | 0111 | 1010 | 1011 | 0110 | 1000 | 0101 | 0011 | 1111 | 1101 | 0000 | 1110 | 1001 |

01 | 1110 | 1011 | 0010 | 1100 | 0100 | 0111 | 1101 | 0001 | 0101 | 0000 | 1111 | 1010 | 0011 | 1001 | 1000 | 0110 | |

10 | 0100 | 0010 | 0001 | 1011 | 1010 | 1101 | 0111 | 1000 | 1111 | 1001 | 1100 | 0101 | 0110 | 0011 | 0000 | 1110 | |

11 | 1011 | 1000 | 1100 | 0111 | 0001 | 1110 | 0010 | 1101 | 0110 | 1111 | 0000 | 1001 | 1010 | 0100 | 0101 | 0011 |

Given a 6-bit input, the 4-bit output is found by selecting the row using the outer two bits (the first and last bits), and the column using the inner four bits. For example, an input “**0**1101**1**” has outer bits “**01**” and inner bits “1101”; the corresponding output would be “1001”.

The 8 S-boxes of DES were the subject of intense study for many years out of a concern that a — a known only to its designers — might have been planted in the cipher. The S-box design criteria were eventually published (in ) after the public rediscovery of , showing that they had been carefully tuned to increase resistance against this specific attack. Biham and Shamir found that even small modifications to an S-box could significantly weaken DES.

There has been a great deal of research into the design of good S-boxes, and much more is understood about their use in block ciphers than when DES was released.

Any S-box where each output bit is produced by a of the input bits, and where any linear combination of the output bits is also a bent function of the input bits, is a **perfect S-box**.