## Symmetric Ciphers

Symmetric ciphers use the same cryptographic keys for both encryption of plaintext and decryption of ciphertext. They are faster than asymmetric ciphers and allow encrypting large sets of data. However, they require sophisticated mechanisms to securely distribute the secret keys to both parties.

Definition A symmetric cipher defined over (K, M, C), where:
• K - a set of all possible keys,
• M - a set of all possible messages,
• C - a set of all possible ciphertexts
is a pair of efficient algorithms (E, D), where:
• E: K × M -> C
• D: K × C -> M
such that for every m belonging to M, k belonging to K there is an equality:
• D(k, E(k, m)) = m   (the consistency rule)
• Function E is often randomized
• Function D is always deterministic

There are two kinds of symmetric ciphers: stream ciphers and block ciphers:

### Stream Ciphers Stream ciphers use one secret key bit (or byte) at a time, and use it to encrypt a corresponding bit (or byte) of input data.

### Block Ciphers Block ciphers work on larger fragments of data (called blocks) at a time, by encrypting data blocks one by one.