Hash functions Most modern
cryptographic hash functions process messages in fixed-length blocks; all but the earliest hash functions include some sort of padding scheme. It is critical for cryptographic hash functions to employ termination schemes that prevent a hash from being vulnerable to
length extension attacks. Many padding schemes are based on appending predictable data to the final block. For example, the pad could be derived from the total length of the message. This kind of padding scheme is commonly applied to hash algorithms that use the
Merkle–Damgård construction such as
MD-5,
SHA-1, and
SHA-2 family such as SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, and SHA-512/256
Block cipher mode of operation Cipher-block chaining (CBC) mode is an example of
block cipher mode of operation. Some block cipher modes (CBC and PCBC essentially) for
symmetric-key encryption algorithms require plain text input that is a multiple of the block size, so messages may have to be padded to bring them to this length. There is currently a shift to use streaming mode of operation instead of block mode of operation. An example of streaming mode encryption is the
counter mode of operation. Streaming modes of operation can encrypt and decrypt messages of any size and therefore do not require padding. More intricate ways of ending a message such as
ciphertext stealing or
residual block termination avoid the need for padding. A disadvantage of padding is that it makes the plain text of the message susceptible to
padding oracle attacks. Padding oracle attacks allow the attacker to gain knowledge of the plain text without attacking the block cipher primitive itself. Padding oracle attacks can be avoided by making sure that an attacker cannot gain knowledge about the removal of the padding bytes. This can be accomplished by verifying a
message authentication code (MAC) or
digital signature before removal of the padding bytes, or by switching to a streaming mode of operation.
Bit padding Bit padding can be applied to messages of any size. A single '1' bit is added to the message and then as many '0' bits as required (possibly none) are added. The number of '0' bits added will depend on the block boundary to which the message needs to be extended. In bit terms this is "1000 ... 0000". This method can be used to pad messages which are any number of bits long, not necessarily a whole number of bytes long. For example, a message of 23 bits that is padded with 9 bits in order to fill a 32-bit block: ... | 1011 1001 1101 0100 0010 011
1 0000 0000 | This padding is the first step of a two-step padding scheme used in many
hash functions including
MD5 and
SHA. In this context, it is specified by RFC1321 step 3.1. This padding scheme is defined by
ISO/IEC 9797-1 as Padding Method 2.
Byte padding Byte padding can be applied to messages that can be encoded as an integral number of
bytes.
ANSI X9.23 In ANSI X9.23, between 1 and 8 bytes are always added as padding. The block is padded with random bytes (although many implementations use 00) and the last byte of the block is set to the number of bytes added. Example: In the following example the block size is 8 bytes, and padding is required for 4 bytes (in hexadecimal format) ... | DD DD DD DD DD DD DD DD | DD DD DD DD
00 00 00 04 |
ISO 10126 ISO 10126 (withdrawn in 2007) specifies that the padding should be done at the end of that last block with random bytes, and the padding boundary should be specified by the last byte. Example: In the following example the block size is 8 bytes and padding is required for 4 bytes ... | DD DD DD DD DD DD DD DD | DD DD DD DD
81 A6 23 04 |
PKCS#5 and PKCS#7 PKCS#7 is described in RFC 5652. Padding is in whole bytes. The value of each added byte is the number of bytes that are added, i.e. bytes, each of value are added. The number of bytes added will depend on the block boundary to which the message needs to be extended. The padding will be one of: 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05 06 06 06 06 06 06 etc. This padding method (as well as the previous two) is well-defined if and only if is less than 256. Example: In the following example, the block size is 8 bytes and padding is required for 4 bytes ... | DD DD DD DD DD DD DD DD | DD DD DD DD
04 04 04 04 | If the length of the original data is an integer multiple of the block size , then an extra block of bytes with value is added. This is necessary so the deciphering algorithm can determine with certainty whether the last byte of the last block is a pad byte indicating the number of padding bytes added or part of the plaintext message. Consider a plaintext message that is an integer multiple of bytes with the last byte of plaintext being
01. With no additional information, the deciphering algorithm will not be able to determine whether the last byte is a plaintext byte or a pad byte. However, by adding bytes each of value after the
01 plaintext byte, the deciphering algorithm can always treat the last byte as a pad byte and strip the appropriate number of pad bytes off the end of the ciphertext; said number of bytes to be stripped based on the value of the last byte. PKCS#5 padding is identical to PKCS#7 padding, except that it has only been defined for block ciphers that use a 64-bit (8-byte) block size. In practice, the two can be used interchangeably. The maximum block size is 255, as it is the biggest number a byte can contain.
ISO/IEC 7816-4 ISO/IEC 7816-4:2005 is identical to the bit padding scheme, applied to a plain text of
N bytes. This means in practice that the first byte is a mandatory byte valued '80' (Hexadecimal) followed, if needed, by 0 to
N − 1 bytes set to '00', until the end of the block is reached. ISO/IEC 7816-4 itself is a communication standard for smart cards containing a file system, and in itself does not contain any cryptographic specifications. Example: In the following example the block size is 8 bytes and padding is required for 4 bytes ... | DD DD DD DD DD DD DD DD | DD DD DD DD
80 00 00 00 | The next example shows a padding of just one byte ... | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD
80 |
Zero padding All the bytes that are required to be padded are padded with zero. The zero padding scheme has not been standardized for encryption, although it is specified for hashes and MACs as Padding Method 1 in ISO/IEC 10118-1 and
ISO/IEC 9797-1. Example: In the following example the block size is 8 bytes and padding is required for 4 bytes ... | DD DD DD DD DD DD DD DD | DD DD DD DD
00 00 00 00 | Zero padding may not be reversible if the original file ends with one or more zero bytes, making it impossible to distinguish between plaintext data bytes and padding bytes. It may be used when the length of the message can be derived
out-of-band. It is often applied to binary encoded
strings (
null-terminated string) as the
null character can usually be stripped off as
whitespace. Zero padding is sometimes also referred to as "null padding" or "zero byte padding". Some implementations may add an additional block of zero bytes if the plaintext is already divisible by the block size. ==Public key cryptography==