# Cryptographic Hash Functions, Message Authentication Codes, and Digital Signatures

## Cryptographic Hash Functions

When sending encrypted data, TLS typically uses a cryptographic hash function to ensure data integrity. The hash function prevents Charlie from tampering with data that Alice sends to Bob.

A cryptographic hash function is similar to a checksum. The main difference is that whereas a
checksum is designed to detect accidental alterations in data, a cryptographic hash function is
designed to detect deliberate alterations. When data is processed by a cryptographic hash function,
a small string of bits, known as a `hash`

, is generated. The slightest change to the
message typically makes a large change in the resulting hash. A cryptographic hash function does not
require a cryptographic key. A hash function often used with TLS is Secure Hash Algorithm (SHA). SHA
was proposed by the U.S.
National Institute of Standards and Technology (NIST).

## Message Authentication Code

A message authentication code (MAC) is similar to a cryptographic hash, except that it is based on a secret key. When secret key information is included with the data that is processed by a cryptographic hash function, the resulting hash is known as an HMAC.

If Alice wants to be sure that Charlie does not tamper with her message to Bob, she can calculate an HMAC for her message and append the HMAC to her original message. She can then encrypt the message plus the HMAC using a secret key that she shares with Bob. When Bob decrypts the message and calculates the HMAC, he will be able to tell if the message was modified in transit. With TLS, an HMAC is used with the transmission of secure data.

## Digital Signatures

Once a cryptographic hash is created for a message, the hash is encrypted with the sender's private key. This encrypted hash is called a digital signature.