Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

CBC-MAC

From Wikipedia, the free encyclopedia
Message authentication code algorithm

Incryptography, acipher block chaining message authentication code (CBC-MAC) is a technique for constructing amessage authentication code (MAC) from ablock cipher. The message is encrypted with some block cipher algorithm incipher block chaining (CBC) mode to create a chain of blocks such that each block depends on the proper encryption of the previous block. This interdependence ensures that a change to any of the plaintext bits will cause the final encrypted block to change in a way that cannot be predicted or counteracted without knowing the key to the block cipher.

CBC-MAC construction

To calculate the CBC-MAC of messagem, one encryptsm in CBC mode with zeroinitialization vector and keeps the last block. The following figure sketches the computation of the CBC-MAC of a message comprising blocksm1m2mx{\displaystyle m_{1}\|m_{2}\|\cdots \|m_{x}} using a secret keyk and a block cipherE:

CBC-MAC on its own is not secure for variable-length messages[1] (see the discussion below) and is currently used to construct apseudorandom function family[2] and as a component of theCCM mode.

Use in standards

[edit]

The CBC-MAC construct is used as part of theCCM mode utilized inIEEE 802.11i andNIST SP 800-97 (asCCMP, the CCM encryption protocol forWPA2),IPsec,[3] andTLS 1.2,[4] as well asBluetooth Low Energy (as ofBluetooth 4.0, seeNIST SP 800-121 Rev2).[5] It is available for TLS 1.3, but not enabled by default inOpenSSL.[6]

CBC-MAC is also used as a "conditioning component" (a.k.a. randomness extractor,[2] a method to generate bitstrings withfull entropy) inNIST SP 800-90B.

Standards that define the algorithm

[edit]

FIPS PUB 113Computer Data Authentication is a (now obsolete)U.S. government standard that specified the CBC-MAC algorithm usingDES as the block cipher.

The CBC-MAC algorithm is also included into ANSI X9.9, ANSI X9.19, ISO 8731-1, andISO/IEC 9797-1 MAC (Algorithm 1).[7]

Security with fixed and variable-length messages

[edit]

If the block cipher used is secure (meaning that it is apseudorandom permutation), then CBC-MAC is secure for fixed-length messages.[1] However, by itself, it is not secure for variable-length messages. Thus, any single key must only be used for messages of a fixed and known length. This is because an attacker who knows the correctauthentication tag (i.e. CBC-MAC) pairs for two messages(m,t){\displaystyle (m,t)} and(m,t){\displaystyle (m',t')} can generate a third messagem{\displaystyle m''} whose CBC-MAC will also bet{\displaystyle t'}. This is simply done by XORing the first block ofm{\displaystyle m'} witht and then concatenatingm with this modifiedm{\displaystyle m'}; i.e., by makingm=m[(m1t)m2mx]{\displaystyle m''=m\|[(m_{1}'\oplus t)\|m_{2}'\|\dots \|m_{x}']}. When computing the MAC for the messagem{\displaystyle m''}, it follows that we compute the MAC form in the usual manner ast, but when this value is chained forwards to the stage computingEKMAC(m1t){\displaystyle E_{K_{\text{MAC}}}(m_{1}'\oplus t)} we will perform an exclusive OR operation with the value derived for the MAC of the first message. The presence of that tag in the new message means it will cancel, leaving no contribution to the MAC from the blocks of plain text in the first messagem:EKMAC(m1tt)=EKMAC(m1){\displaystyle E_{K_{\text{MAC}}}(m_{1}'\oplus t\oplus t)=E_{K_{\text{MAC}}}(m_{1}')} and thus the tag form{\displaystyle m''} ist{\displaystyle t'}.

This problem cannot be solved by adding a message-size block to the end.[8] There are three main ways of modifying CBC-MAC so that it is secure for variable length messages: 1) Input-length key separation; 2) Length-prepending; 3) Encrypt last block.[8] In such a case, it may also be recommended to use a different mode of operation, for example,CMAC orHMAC to protect the integrity of variable-length messages.

Length prepending

[edit]

One solution is to include the length of the message in the first block;[9] in fact CBC-MAC has been proven secure as long as no two messages that are prefixes of each other are ever used and prepending the length is a special case of this.[10] This can be problematic if the message length may not be known when processing begins.

Encrypt-last-block

[edit]
Computation of CBC-MAC Encrypt-last-block.

Encrypt-last-block CBC-MAC (ECBC-MAC)[11] is defined asCBC-MAC-ELB(m, (k1,k2)) =E(k2, CBC-MAC(k1,m)).[8] Compared to the other discussed methods of extending CBC-MAC to variable-length messages, encrypt-last-block has the advantage of not needing to know the length of the message until the end of the computation.

Attack methods against incorrect use

[edit]

As with many cryptographic schemes, naïve use of ciphers and other protocols may lead to attacks being possible, reducing the effectiveness of the cryptographic protection (or even rendering it useless). We present attacks which are possible due to using the CBC-MAC incorrectly.[12]

Using the same key for encryption and authentication

[edit]

One common mistake is to reuse the same keyk for CBC encryption and CBC-MAC. Although a reuse of a key for different purposes is a bad practice in general, in this particular case the mistake leads to a spectacular attack:

Suppose Alice has sent to Bob the cipher text blocksC=C1C2Cn{\displaystyle C=C_{1}\|C_{2}\|\dots \|C_{n}}. During the transmission process, Eve can tamper with any of theC1,,Cn1{\displaystyle C_{1},\dots ,C_{n-1}} cipher-text blocks and adjust any of the bits therein as she chooses, provided that the final block,Cn{\displaystyle C_{n}}, remains the same. We assume, for the purposes of this example and without loss of generality, that the initialization vector used for the encryption process is a vector of zeroes.

When Bob receives the message, he will first decrypt the message by reversing the encryption process which Alice applied, using the cipher text blocksC=C1C2Cn{\displaystyle C=C_{1}\|C_{2}\|\cdots \|C_{n}}. The tampered message, delivered to Bob in replacement of Alice's original, isC=C1Cn1Cn{\displaystyle C'=C_{1}'\|\dots \|C_{n-1}'\|C_{n}}.

Bob first decrypts the message received using the shared secret keyK to obtain corresponding plain text. Note that all plain text produced will be different from that which Alice originally sent, because Eve has modified all but the last cipher text block. In particular, the final plain text,Pn{\displaystyle P_{n}'}, differs from the original,Pn{\displaystyle P_{n}}, which Alice sent; althoughCn{\displaystyle C_{n}} is the same,Cn1Cn1{\displaystyle C_{n-1}'\not =C_{n-1}}, so a different plain textPn{\displaystyle P_{n}'} is produced when chaining the previous cipher text block into the exclusive-OR after decryption ofCn{\displaystyle C_{n}}:Pn=Cn1EK1(Cn){\displaystyle P_{n}'=C_{n-1}'\oplus E_{K}^{-1}(C_{n})}.

It follows that Bob will now compute the authentication tag using CBC-MAC over all the values of plain text which he decoded. The tag for the new message,t{\displaystyle t'}, is given by:

t=EK(PnEK(Pn1EK(EK(P1)))){\displaystyle t'=E_{K}(P_{n}'\oplus E_{K}(P_{n-1}'\oplus E_{K}(\dots \oplus E_{K}(P_{1}'))))}

Notice that this expression is equal to

t=EK(PnCn1){\displaystyle t'=E_{K}(P_{n}'\oplus C_{n-1}')}

which is exactlyCn{\displaystyle C_{n}}:

t=EK(Cn1EK1(Cn)Cn1)=EK(EK1(Cn))=Cn{\displaystyle t'=E_{K}(C_{n-1}'\oplus E_{K}^{-1}(C_{n})\oplus C_{n-1}')=E_{K}(E_{K}^{-1}(C_{n}))=C_{n}}

and it follows thatt=Cn=t{\displaystyle t'=C_{n}=t}.

Therefore, Eve was able to modify the cipher text in transit (without necessarily knowing what plain text it corresponds to) such that an entirely different message,P{\displaystyle P'}, was produced, but the tag for this message matched the tag of the original, and Bob was unaware that the contents had been modified in transit. By definition, a Message Authentication Code isbroken if we can find a different message (a sequence of plain-text pairsP{\displaystyle P'}) which produces the same tag as the previous message,P, withPP{\displaystyle P\not =P'}. It follows that the message authentication protocol, in this usage scenario, has been broken, and Bob has been deceived into believing Alice sent him a message which she did not produce.

If, instead, we use different keys for the encryption and authentication stages, sayK1{\displaystyle K_{1}} andK2{\displaystyle K_{2}}, respectively, this attack is foiled. The decryption of the modified cipher-text blocksCi{\displaystyle C_{i}'} obtains some plain text stringPi{\displaystyle P_{i}'}. However, due to the MAC's usage of a different keyK2{\displaystyle K_{2}}, we cannot "undo" the decryption process in the forward step of the computation of the message authentication code so as to produce the same tag; each modifiedPi{\displaystyle P_{i}'} will now be encrypted byK2{\displaystyle K_{2}} in the CBC-MAC process to some valueMACiCi{\displaystyle \mathrm {MAC} _{i}\not =C_{i}'}.

This example also shows that a CBC-MAC cannot be used as a collision-resistant one-way function: given a key it is trivial to create a different message which "hashes" to the same tag.

Allowing the initialization vector to vary in value

[edit]

When encrypting data using a block cipher incipher block chaining (or another) mode, it is common to introduce aninitialization vector to the first stage of the encryption process. It is typically required that this vector be chosen randomly (anonce) and that it is not repeated for any given secret key under which the block cipher operates. This provides semantic security, by means of ensuring the same plain text is not encrypted to the same cipher text, allowing an attacker to infer a relationship exists.

When computing a message authentication code, such as by CBC-MAC, the use of an initialization vector is a possible attack vector.

In the operation of a ciphertext block chaining cipher, the first block of plain text is mixed with the initialization vector using an exclusive OR (P1IV{\displaystyle P_{1}\oplus IV}). The result of this operation is the input to the block cipher for encryption.

However, when performing encryption and decryption, we are required to send the initialization vector in plain text - typically as the block immediately preceding the first block of cipher text - such that the first block of plain text can be decrypted and recovered successfully. If computing a MAC, we will also need to transmit the initialization vector to the other party in plain text so that they can verify the tag on the message matches the value they have computed.

If we allow the initialization vector to be selected arbitrarily, it follows that the first block of plain text can potentially be modified (transmitting a different message) while producing the same message tag.

Consider a messageM1=P1|P2|{\displaystyle M_{1}=P_{1}|P_{2}|\dots }. In particular, when computing the message tag for CBC-MAC, suppose we choose an initialization vectorIV1{\displaystyle IV_{1}} such that computation of the MAC begins withEK(IV1P1){\displaystyle E_{K}(IV_{1}\oplus P_{1})}. This produces a (message, tag) pair(M1,T1){\displaystyle (M_{1},T_{1})}.

Now produce the messageM2=P1|P2|{\displaystyle M_{2}=P_{1}'|P_{2}|\dots }. For each bit modified inP1{\displaystyle P_{1}'}, flip the corresponding bit in the initialization vector to produce the initialization vectorIV1{\displaystyle IV_{1}'}. It follows that to compute the MAC for this message, we begin the computation byEK(P1IV1){\displaystyle E_{K}(P_{1}'\oplus IV_{1}')}. As bits in both the plain text and initialization vector have been flipped in the same places, the modification is cancelled in this first stage, meaning the input to the block cipher is identical to that forM1{\displaystyle M_{1}}. If no further changes are made to the plain text, the same tag will be derived despite a different message being transmitted.

If the freedom to select an initialization vector is removed and all implementations of CBC-MAC fix themselves on a particular initialization vector (often the vector of zeroes, but in theory, it could be anything provided all implementations agree), this attack cannot proceed.

To sum up, if the attacker is able to set the IV that will be used for MAC verification, he can perform arbitrary modification of the first data block without invalidating the MAC.

Using predictable initialization vector

[edit]

Sometimes IV is used as a counter to prevent message replay attacks.However, if the attacker can predict what IV will be used for MAC verification,he or she can replay previously observed message by modifying the first data block to compensate for the change in the IV that will be used for the verification.For example, if the attacker has observed messageM1=P1|P2|{\displaystyle M_{1}=P_{1}|P_{2}|\dots } withIV1{\displaystyle IV_{1}} and knowsIV2{\displaystyle IV_{2}}, he can produceM1=(P1IV1IV2)|P2|{\displaystyle M_{1}'=(P_{1}\oplus IV_{1}\oplus IV_{2})|P_{2}|\dots } that will pass MAC verification withIV2{\displaystyle IV_{2}}.

The simplest countermeasure is to encrypt the IV before using it (i.e., prepending IV to the data). Alternatively MAC in CFB mode can be used, because in CFB mode the IV is encrypted before it is XORed with the data.

Another solution (in case protection against message replay attacks is not required) is to always use a zero vector IV.[13] Note that the above formula forM1{\displaystyle M_{1}'} becomesM1=(P100)|P2|=P1|P2|=M1{\displaystyle M_{1}'=(P_{1}\oplus 0\oplus 0)|P_{2}|\dots =P_{1}|P_{2}|\dots =M_{1}}. So sinceM1{\displaystyle M_{1}} andM1{\displaystyle M_{1}'} are the same message, by definition they will have the same tag. This is not a forgery, rather the intended use of CBC-MAC.

See also

[edit]
  • CMAC – A block-cipher–based MAC algorithm which is secure for messages of different lengths (recommended byNIST).
  • OMAC andPMAC – Other methods to turn block ciphers into message authentication codes (MACs).
  • One-way compression function – Hash functions can be made from block ciphers. But note, there are significant differences in function and uses for security betweenMACs (such as CBC-MAC) andhashes.

References

[edit]
  1. ^abM. Bellare, J. Kilian and P. Rogaway.The security of the cipher block chaining message authentication code. JCSS 61(3):362–399, 2000.
  2. ^abCliff, Boyd & Gonzalez Nieto 2009, p. 5.
  3. ^RFC 4309 Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP)
  4. ^RFC 6655 AES-CCM Cipher Suites for Transport Layer Security (TLS)
  5. ^"Bluetooth Low Energy Security". Archived fromthe original on 2016-04-02. Retrieved2017-04-20.
  6. ^Caswell, Matt (2017-05-04)."Using TLS1.3 With OpenSSL".OpenSSL blog. Retrieved2024-10-11.
  7. ^Preneel & van Oorschot 1999, p. 7.
  8. ^abcSee Section 5 of Bellare, et al.
  9. ^ISO/IEC 9797-1:1999Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher, clause 6.1.3 Padding Method 3
  10. ^C. Rackoff and S. Gorbunov. On the Security of Block Chaining Message Authentication Code.
  11. ^Boneh, Dan."Message Integrity: CBC-MAC and NMAC".spark-university.s3.amazonaws.com. Archived fromthe original on April 22, 2017.
  12. ^Why I hate CBC-MAC byMatthew D. Green
  13. ^Introduction to Modern Cryptography, Second Edition by Jonathan Katz and Yehuda Lindell

Sources

[edit]
Common functions
SHA-3 finalists
Other functions
Password hashing/
key stretching functions
General purpose
key derivation functions
MAC functions
Authenticated
encryption
modes
Attacks
Design
Standardization
Utilization
General
Mathematics
Retrieved from "https://en.wikipedia.org/w/index.php?title=CBC-MAC&oldid=1315210630"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp