メッセージ認証符号
MACアルゴリズムは他の暗号プリミティブから構築でき、ハッシュ関数を使う方式(HMAC)、ブロック暗号アルゴリズムを使う方式(OMAC/CMAC、CBC-MAC、PMAC)などがある。 また、 Poly1305などの高速なMACアルゴリズムはuniversal hashingをベースとしている。
鍵付きハッシュ関数の一種であるuniversal hashing、特にpairwise independentという性質を持つハッシュ関数は、鍵を一回ごとに使い捨てにするならば、安全なメッセージ認証符号として使うことができる。これは、暗号化におけるワンタイムパッドのMAC版と考えることができる。
Pairwise independentという性質は、鍵 k {\displaystyle k} を知らないならば、ある m {\displaystyle m} のハッシュ値 h a s h k ( m ) {\displaystyle hash_{k}(m)} が分かったとしても、別のメッセージ m ′ ( ≠ m ) {\displaystyle m'(\neq m)} のハッシュ値 h a s h k ( m ′ ) {\displaystyle hash_{k}(m')} を推測できないという性質である。このような性質を持つハッシュ関数は、次のように簡単に作れる。素数 p {\displaystyle p} に対して鍵を k = ( a , b ) {\displaystyle k=(a,b)} としたとき、 メッセージ m {\displaystyle m} のハッシュ値(MACにおけるタグ)は、 h a s h k ( m ) = a m + b mod p {\displaystyle hash_{k}(m)=am+b\mod p} である。
応用例として、MACはSSH2においてトランスポート層のデータ一貫性を確保するために使用されている。MACの検証に用いる共通鍵は、通信の暗号化、復号に用いるセッション鍵と同様に、セッション開始時にディフィー・ヘルマン鍵共有によって生成された共有秘密からハッシュ関数によって生成される。実際に通信が始まったら、SSHプログラムは受信したパケットを復号したあと、MACと計算値を比較することでデータの完全性を検証している。