Content deleted Content added
→Construction from block ciphers: less->fewer Tags: Mobile edit Mobile web edit |
m Undid revision 1282109863 by 2A14:B86:4539:FECE:DCBB:3F05:88B6:BE60 (talk) |
||
(40 intermediate revisions by 29 users not shown) | |||
Line 1:
{{Short description|Cryptographic primitive}}
In [[cryptography]], a '''one-way compression function''' is a function that transforms two fixed-length inputs into a fixed-length output.<ref name=":0">Handbook of Applied Cryptography by Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Fifth Printing (August 2001) page 328.</ref> The transformation is [[one-way function|"one-way"]], meaning that it is difficult given a particular output to compute inputs which compress to that output. One-way compression functions are not related to conventional [[data compression]] algorithms, which instead can be inverted exactly (lossless compression) or approximately (lossy compression) to the original data.
[[Image:One-way compression.svg|thumb|
One-way compression functions are for instance used in the [[Merkle–Damgård construction]] inside [[cryptographic hash function]]s.
Line 7 ⟶ 8:
One-way compression functions are often built from [[block cipher]]s.
Some methods to turn any normal block cipher into a one-way compression function are '''Davies–Meyer''', '''Matyas–Meyer–Oseas''', '''Miyaguchi–Preneel''' (single-block-length compression functions) and '''MDC-2/Meyer–Schilling''', '''MDC-4''', '''Hirose''' (double-block-length compression functions). These methods are described in detail further down. ([[MDC-2]] is also the name of a hash function patented by [[IBM]].)
Another method is '''2BOW''' (or '''NBOW''' in general), which is a "high-rate multi-block-length hash function based on block ciphers"<ref name=":0" /> and typically achieves (asymptotic) rates between 1 and 2 independent of the hash size (only with small constant overhead). This method has not yet seen any serious security analysis, so should be handled with care.
== Compression ==
Line 13 ⟶ 16:
For instance, ''input A'' might be 128 bits, ''input B'' 128 bits and they are compressed together to a single output of 128 bits. This is equivalent to having a single 256-bit input compressed to a single output of 128 bits.
Some compression functions do not compress by half, but instead by some other factor. For example, ''input A'' might be 256 bits, and
The mixing is done in such a way that full [[avalanche effect]] is achieved. That is, every output bit depends on every input bit.
Line 23 ⟶ 26:
* Easy to compute: If you have some input(s), it is easy to calculate the output.
* Preimage-resistance: If an attacker only knows the output it should be
* Second preimage-resistance: Given an input
* [[Collision resistance|Collision-resistance:]] It should be hard to find any two different inputs that compress to the same output i.e. an attacker should not be able to find a pair of messages
Ideally one would like the "
== The Merkle–Damgård construction ==
Line 33 ⟶ 36:
[[Image:Merkle-Damgard hash big.svg|thumb|400px|right|The Merkle–Damgård hash construction. The boxes labeled [f] are a one-way compression function.]]
A common use of one-way compression functions is in the Merkle–Damgård construction inside cryptographic hash functions. Most widely used hash functions, including [[MD5]], [[SHA-1]] (which is deprecated<ref>{{Cite web|url=https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html| title=Announcing the first SHA1 collision|website=Google Online Security Blog| language=en|access-date=2020-01-12}}</ref>) and [[SHA-2]] use this construction.
A hash function must be able to process an arbitrary-length message into a fixed-length output. This can be achieved by breaking the input up into a series of equal-sized blocks, and operating on them in sequence using a one-way compression function. The compression function can either be specially designed for hashing or be built from a block cipher. The last block processed should also be [[Padding (cryptography)|length padded]], which is crucial to the security of this construction.
When length padding (also called MD-strengthening) is applied, attacks cannot find collisions faster than the birthday paradox (
A second preimage attack (given a message
▲When length padding (also called MD-strengthening) is applied, attacks cannot find collisions faster than the birthday paradox (2<sup>n/2</sup>, n is the block size in bits) if the used f-function is collision-resistant.<ref name="damgard89">Ivan Damgård. A design principle for hash functions. In Gilles Brassard, editor, CRYPTO, volume 435 of LNCS, pages 416–427. Springer, 1989.</ref><ref name="merkle89">Ralph Merkle. One way hash functions and DES. In Gilles Brassard, editor, CRYPTO, volume 435 of LNCS, pages 428–446. Springer, 1989.</ref> Hence, the Merkle–Damgård hash construction reduces the problem of finding a proper hash function to finding a proper compression function.
▲A second preimage attack (given a message m1 an attacker finds another message m2 to satisfy hash(m1) = hash(m2)) can be done according to Kelsey and Schneier<ref name="ks05">John Kelsey and Bruce Schneier. Second preimages on n-bit hash functions for much less than 2<sup>n</sup> work. In Ronald Cramer, editor, EUROCRYPT, volume 3494 of LNCS, pages 474–490. Springer, 2005.</ref> for a 2<sup>k</sup>-message-block message in time k × 2<sup>n/2+1</sup>+2<sup>n-k+1</sup>. Note that the complexity is above 2<sup>n/2</sup> but below 2<sup>n</sup> when messages are long and that when messages get shorter the complexity of the attack approaches 2<sup>n</sup>.
{{clear}}
== Construction from block ciphers ==
[[Image:Block cipher.svg|thumb|
One-way compression functions are often built from block ciphers.
Line 59 ⟶ 60:
If a block cipher has a [[Block size (cryptography)|block size]] of say 128 bits single-block-length methods create a hash function that has the block size of 128 bits and produces a hash of 128 bits. Double-block-length methods make hashes with double the hash size compared to the block size of the block cipher used. So a 128-bit block cipher can be turned into a 256-bit hash function.
These methods are then used inside the
Using a block cipher to build the one-way compression function for a hash function is usually somewhat slower than using a specially designed one-way compression function in the hash function. This is because all known secure constructions do the [[Key schedule|key scheduling]] for each block of the message. Black, Cochran and Shrimpton have shown that it is impossible to construct a one-way compression function that makes only one call to a block cipher with a fixed key.<ref>John Black, Martin Cochran, and Thomas Shrimpton. ''On the Impossibility of Highly-Efficient Blockcipher-Based Hash Functions.'' Advances in Cryptology – EUROCRYPT '05, Aarhus, Denmark, 2005. The authors define a hash function "highly efficient if its compression function uses exactly one call to a block cipher whose key is fixed".</ref> In practice reasonable speeds are achieved provided the key scheduling of the selected block cipher is not a too heavy operation.
But, in some cases it is easier because a single implementation of a block cipher can be used for both a block cipher and a hash function. It can also save [[machine code|code]] space in very tiny [[embedded system]]s like for instance [[smart card]]s or [[Electronic control unit|nodes in cars]] or other machines.
Therefore, the hash-rate or rate gives a glimpse of the efficiency of a hash function based on a certain compression function. The rate of an iterated hash function outlines the ratio between the number of block cipher operations and the output. More precisely,
<math>R_h=\frac{\left|m_i\right|}{s\cdot n}</math> The hash function can only be considered secure if at least the following conditions are met:
* The block cipher has no special properties that distinguish it from ideal ciphers, such as
* The resulting hash size is big enough. According to the [[birthday attack]] a [[security level]] of 2<sup>80</sup> (generally assumed to be infeasible to compute today){{Citation needed|date=October 2015}} is desirable thus the hash size should be at least 160 bits.
* The last block is properly length padded prior to the hashing. (See [[Merkle–Damgård construction]].) Length padding is normally implemented and handled internally in specialised hash functions like [[SHA-1]] etc.
Line 77 ⟶ 80:
[[Image:Davies-Meyer hash.svg|thumb|230px|right|The Davies–Meyer one-way compression function]]
The Davies–Meyer single-block-length compression function feeds each block of the message (
In [[mathematical notation]] Davies–Meyer can be described as:
:<math>H_i = E_{m_i}{(H_{i-1})} \oplus {H_{i-1}}
The scheme has the rate (k is the keysize):
:<math>R_{DM}=\frac{k}{1\cdot n} = \frac{k}{n}
If the block cipher uses for instance 256-bit keys then each message block (
Variations of this method replace XOR with any other group operation, such as addition on 32-bit unsigned integers.
A notable property of the Davies–Meyer construction is that even if the underlying block cipher is totally secure, it is possible to compute [[Fixed point (mathematics)|fixed points]] for the construction
The security of the Davies–Meyer construction in the Ideal Cipher Model was first
{{clear}}
Line 101 ⟶ 104:
The Matyas–Meyer–Oseas single-block-length one-way compression function can be considered the dual (the opposite) of Davies–Meyer.
It feeds each block of the message (
If the block cipher has different block and key sizes the hash value (
In mathematical notation Matyas–Meyer–Oseas can be described as:
:<math>H_i = E_{g(H_{i-1})}(m_i)\oplus m_i
The scheme has the rate:
:<math>R_{MMO} = \frac{n}{1\cdot n} = 1
A second preimage attack (given a message
== Miyaguchi–Preneel ==
Line 120 ⟶ 123:
The Miyaguchi–Preneel single-block-length one-way compression function is an extended variant of Matyas–Meyer–Oseas. It was independently proposed by [[Shoji Miyaguchi]] and [[Bart Preneel]].
It feeds each block of the message (
If the block cipher has different block and key sizes the hash value (
In mathematical notation Miyaguchi–Preneel can be described as:
:<math>H_i = E_{g(H_{i-1})}(m_i)\oplus H_{i-1}\oplus m_i
The scheme has the rate:
:<math>R_{MP}=\frac{n}{1\cdot n}=1
The roles of
{{clear}}
A second preimage attack (given a message
== Hirose ==
[[Image:Hirose.png|thumb|230px|right|The Hirose double-block-length compression function]]
The Hirose<ref name="Hirose06"/> double-block-length one-way compression function consists of a block cipher plus a permutation <math>p</math>.
It uses a block cipher whose key length
Each round accepts a portion of the message
First,
* <math>G_i = E_{K_i}(G_{i-1}) \oplus G_{i-1}</math>
* <math>H_i = E_{K_i}(p(G_{i-1})) \oplus p(G_{i-1})</math>
Each encryption resembles the standard Davies–Meyer construction. The advantage of this scheme over other proposed double-block-length schemes is that both encryptions use the same key, and thus key scheduling effort may be shared.
The final output is
Hirose also provides a proof in the Ideal Cipher Model.
Line 163 ⟶ 164:
== See also ==
* [[Whirlpool (cryptography)|Whirlpool]]
* [[CBC-MAC]], [[One-key MAC|OMAC]], and [[PMAC (cryptography)|PMAC]]
== References ==
=== Citations ===
{{Reflist}}
* {{cite book |url=http://cacr.uwaterloo.ca/hac/ |title=Handbook of Applied Cryptography |last=Menezes |last2=van Oorschot |last3=Vanstone |year=2001 |chapter=Hash Functions and Data Integrity |chapterurl=http://cacr.uwaterloo.ca/hac/about/chap9.pdf }}▼
=== Sources ===
{{refbegin}}
▲* {{cite book |url=http://cacr.uwaterloo.ca/hac/ |title=Handbook of Applied Cryptography |last=Menezes |last2=van Oorschot |last3=Vanstone |year=2001 |chapter=Hash Functions and Data Integrity |
{{refend}}
{{Cryptography navbox|hash}}
|