Content deleted Content added
line 12: style matching: '''input B'''->''input B'' |
m Undid revision 1282109863 by 2A14:B86:4539:FECE:DCBB:3F05:88B6:BE60 (talk) |
||
(31 intermediate revisions by 24 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 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'' being the block size in bits) if the used ''f''-function is collision-resistant.<ref name="damgard89">Ivan Damgård. [https://link.springer.com/content/pdf/10.1007%2F0-387-34805-0_39.pdf 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. [https://link.springer.com/content/pdf/10.1007%2F0-387-34805-0_40.pdf 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 ''m''<sub>1</sub> an attacker finds another message ''m''<sub>2</sub> to satisfy hash(''m''<sub>1</sub>) = hash(''m''<sub>2</sub>)) can be done according to Kelsey and Schneier<ref name="ks05">John Kelsey and Bruce Schneier. [https://www.schneier.com/academic/paperfiles/paper-preimages.pdf 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 of this attack reaches a minimum of 2<sup>3''n''/4+2</sup> for long messages when ''k'' = 2<sup>''n''/4</sup> and approaches 2<sup>''n''</sup> when messages are short.
{{clear}}
== Construction from block ciphers ==
[[Image:Block cipher.svg|thumb|
One-way compression functions are often built from block ciphers.
Line 63 ⟶ 64:
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: for any
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}}
|