Content deleted Content added
No edit summary |
m Undid revision 1282109863 by 2A14:B86:4539:FECE:DCBB:3F05:88B6:BE60 (talk) |
||
(74 intermediate revisions by 50 users not shown) | |||
Line 1:
{{Short description|Cryptographic primitive}}
In [[cryptography]], a '''one-way compression function''' is a function that transforms
[[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.
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 ==▼
▲== Compression ==
A compression function mixes two fixed length inputs and produces a single fixed length output of the same size as one of the inputs. This can also be seen as that the compression function transforms one large fixed-length input into a shorter, fixed-length output.
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
Some compression functions
The mixing is done in such a way that full [[avalanche effect]] is achieved. That is, every output bit depends on every input bit.
== One-way ==
{{Main article|one-way function}}
A [[one-way function]] is a function that is easy to compute but hard to invert. A one-way compression function (also called hash function) should have the following properties:
* Easy to compute: If you
* 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 ==
{{Main article|Merkle–Damgård construction}}
[[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.
{{clear}}
▲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 x 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>.
== Construction from block ciphers ==
[[Image:Block cipher.svg|thumb|
One-way compression functions are often built from block ciphers.
Line 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
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.
The constructions presented below: Davies–Meyer, Matyas–Meyer–Oseas, Miyaguchi–Preneel and Hirose have been shown to be secure under the [[black-box]] analysis.<ref>John Black, Phillip Rogaway, and Tom Shrimpton. ''Black-Box Analysis of the Block-Cipher-Based Hash-Function Constructions from PGV.'' Advances in Cryptology
== Davies–Meyer ==
[[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}}
▲The security of the Davies–Meyer construction in the Ideal Cipher Model was first proved by R. Winternitz.<ref>R. Winternitz. ''A secure one-way hash function built from DES.'' In Proceedings of the IEEE Symposium on Information Security and Privacy, p. 88-90. IEEE Press, 1984.</ref>
== Matyas–Meyer–Oseas ==
Line 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 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
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.
== Sponge construction==
The [[sponge construction]] can be used to build one-way compression functions.
== See also ==
* [[
* [[CBC-MAC]], [[One-key MAC|OMAC]], and [[PMAC (cryptography)|PMAC]]
== References ==
* ''[http://www.cacr.math.uwaterloo.ca/hac/ Handbook of Applied Cryptography]'' by Menezes, van Oorschot and Vanstone (2001), chapter 9.▼
=== Citations ===
{{Reflist}}
=== Sources ===
{{refbegin}}
▲*
{{refend}}
{{Cryptography navbox|hash}}
|