Security of cryptographic hash functions: Difference between revisions
Typo fixing using AWB |
m Typographical error |
||
| (19 intermediate revisions by 18 users not shown) | |||
| Line 1: | Line 1: | ||
{{Short description|None}} |
|||
{{Merge to|Cryptographic hash function|discuss=Talk:Security of cryptographic hash functions#Merge Proposal|date=January 2014}} |
|||
In [[cryptography]], [[cryptographic hash functions]] can be divided into two main categories. In the first category are those functions whose designs are based on |
In [[cryptography]], [[cryptographic hash functions]] can be divided into two main categories. In the first category are those functions whose designs are based on mathematical problems, and whose security thus follows from rigorous mathematical proofs, [[Computational complexity theory|complexity theory]] and [[Reduction (complexity)|formal reduction]]. These functions are called ''provably secure cryptographic hash functions''. To construct these is very difficult, and few examples have been introduced. Their practical use is limited. |
||
In the second category are functions |
In the second category are functions which are not based on mathematical problems, but on an ad-hoc constructions, in which the bits of the message are mixed to produce the hash. These are then believed to be hard to break, but no formal proof is given. Almost all hash functions in widespread use reside in this category. Some of these functions are already broken, and are no longer in use. ''See'' [[Hash function security summary]]. |
||
==Types of security of hash functions== |
==Types of security of hash functions== |
||
Generally, the ''basic'' security of [[cryptographic hash functions]] can be seen from |
Generally, the ''basic'' security of [[cryptographic hash functions]] can be seen from different angles: pre-image resistance, second pre-image resistance, collision resistance, and pseudo-randomness. |
||
* '''Pre-image resistance''': given a hash h it should be ''hard'' to find any message m such that h = hash(m). This concept is related to that of |
* '''Pre-image resistance''': given a hash {{Mvar|h}}, it should be ''hard'' to find any message {{Mvar|m}} such that {{Math|1=''h'' = hash(''m'')}}. This concept is related to that of the [[one-way function]]. Functions that lack this property are vulnerable to [[pre-image attack]]s. |
||
* '''Second pre-image resistance''': given an input < |
* '''Second pre-image resistance''': given an input {{Math|''m''<sub>1</sub>}}, it should be ''hard'' to find another input {{Math|''m''<sub>2</sub> ≠ ''m''<sub>1</sub>}} such that {{Math|1=hash(''m''<sub>1</sub>) = hash(''m''<sub>2</sub>)}}. This property is sometimes referred to as weak collision resistance. Functions that lack this property are vulnerable to [[second pre-image attack]]s. |
||
* '''Collision resistance''': it should be ''hard'' to find two different messages < |
* '''Collision resistance''': it should be ''hard'' to find two different messages {{Math|''m''<sub>1</sub>}} and {{Math|''m''<sub>2</sub>}} such that {{Math|1=hash(''m''<sub>1</sub>) = hash(''m''<sub>2</sub>)}}. Such a pair is called a (cryptographic) hash collision. This property is sometimes referred to as strong collision resistance. It requires a hash value at least twice as long as what is required for pre-image resistance; otherwise, collisions may be found by a [[birthday attack]]. |
||
* '''Pseudo-randomness''': it should be ''hard'' to distinguish a pseudo-random number generator based on the hash function from true random number generator; for example, it passes usual [[randomness tests]]. |
|||
===The meaning of |
===The meaning of ''hard''=== |
||
The basic question is the meaning of |
The basic question is the meaning of ''hard''. There are two approaches to answer this question. First is the intuitive/practical approach: "''hard'' means that it is almost certainly beyond the reach of any adversary who must be prevented from breaking the system for as long as the security of the system is deemed important." The second approach is theoretical and is based on the [[computational complexity theory]]: if problem ''A'' is hard, then there exists a formal [[Reduction (complexity)|security reduction]] from a problem which is widely considered unsolvable in [[polynomial time]], such as [[integer factorization]] or the [[discrete logarithm]] problem. |
||
| ⚫ | However, non-existence of a polynomial time algorithm does not automatically ensure that the system is secure. The difficulty of a problem also depends on its size. For example, [[RSA public key cryptography|RSA public-key cryptography]] (which relies on the difficulty of [[integer factorization]]) is considered secure only with keys that are at least 2048 bits long, whereas keys for the [[ElGamal encryption|ElGamal cryptosystem]] (which relies on the difficulty of the [[discrete logarithm]] problem) are commonly in the range of 256–512 bits. |
||
The second approach is theoretical and is based on the [[computational complexity theory]]. If problem A is hard, there exists a formal [[Reduction (complexity)|security reduction]] from a problem which is widely considered unsolvable in [[polynomial time]], such as [[integer factorization]] problem or [[discrete logarithm]] problem. |
|||
===Password case=== |
|||
| ⚫ | However, non-existence of a polynomial time algorithm does not automatically ensure that the system is secure. The difficulty of a problem also depends on its size. For example, [[RSA public key cryptography]] relies on the difficulty of [[integer factorization]] |
||
If the set of inputs to the hash is relatively small or is ordered by likelihood in some way, then a brute force search may be practical, regardless of theoretical security. The likelihood of recovering the preimage depends on the input set size and the speed or cost of computing the hash function. A common example is the use of hashes to store [[password]] validation data. Rather than store the plaintext of user passwords, an access control system typically stores a hash of the password. When a person requests access, the password they submit is hashed and compared with the stored value. If the stored validation data is stolen, then the thief will only have the hash values, not the passwords. However, most users choose passwords in predictable ways, and passwords are often short enough so that all possible combinations can be tested if fast hashes are used.<ref>{{cite web |
|||
| url=https://arstechnica.com/information-technology/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/ |
|||
| title=25-GPU cluster cracks every standard Windows password in <6 hours |
|||
| date=2012-12-10 |
|||
| first=Dan |
|||
| last=Goodin |
|||
| publisher=[[Ars Technica]] |
|||
| access-date=2020-11-23}}</ref> Special hashes called [[key derivation function]]s have been created to slow searches. ''See'' [[Password cracking]]. |
|||
==Cryptographic hash functions== |
==Cryptographic hash functions== |
||
{{Main article|Cryptographic hash function}} |
{{Main article|Cryptographic hash function}} |
||
Most hash functions are built on an ad |
Most hash functions are built on an ad-hoc basis, where the bits of the message are nicely mixed to produce the hash. Various [[bitwise operation]]s (e.g. rotations), [[Modular arithmetic|modular additions]], and [[One-way compression function|compression functions]] are used in iterative mode to ensure high complexity and pseudo-randomness of the output. In this way, the security is very hard to prove and the proof is usually not done. Only a few years ago{{When|date=August 2024}}, one of the most popular hash functions, [[SHA-1]], was shown to be less secure than its length suggested: collisions could be found in only 2<sup>51</sup><ref>{{Cite web| title=Classification and Generation of Disturbance Vectors for Collision Attacks against SHA-1 | url=http://eprint.iacr.org/2008/469.pdf | archive-url=https://web.archive.org/web/20090115213127/http://eprint.iacr.org/2008/469.pdf | archive-date=2009-01-15}}</ref> tests, rather than the brute-force number of 2<sup>80</sup>. |
||
In other words, most of the hash functions in use nowadays are not provably collision-resistant. These hashes are not based on purely mathematical functions. This approach results generally in more effective hashing functions, but with the risk that a weakness of such a function will be eventually used to find collisions. |
In other words, most of the hash functions in use nowadays are not provably collision-resistant. These hashes are not based on purely mathematical functions. This approach results generally in more effective hashing functions, but with the risk that a weakness of such a function will be eventually used to find collisions. One famous case is [[MD5]]. |
||
Meaning of "hard to find collision" in these cases means "almost certainly beyond the reach of any adversary who must be prevented from breaking the system for as long as the security of the system is deemed important." The meaning of the term is therefore somewhat dependent on the application, since the effort that a malicious agent may put into the task is usually proportional to his expected gain. |
|||
==Provably secure hash functions== |
==Provably secure hash functions== |
||
In this approach, |
In this approach, the security of a hash function is based on some hard mathematical problem, and it is proved that finding collisions of the hash function is as hard as breaking the underlying problem. This gives a somewhat stronger notion of security than just relying on complex mixing of bits as in the classical approach. |
||
A cryptographic hash function has |
A cryptographic hash function has ''provable security against collision attacks'' if finding collisions is provably [[Polynomial-time reduction|polynomial-time reducible]] from a problem ''P'' which is supposed to be unsolvable in polynomial time. The function is then called provably secure, or just provable. |
||
It means that if finding collisions would be feasible in polynomial time by algorithm A, |
It means that if finding collisions would be feasible in polynomial time by algorithm ''A'', then one could find and use polynomial time algorithm ''R'' (reduction algorithm) that would use algorithm ''A'' to solve problem ''P'', which is widely supposed to be unsolvable in polynomial time. That is a contradiction. This means that finding collisions cannot be easier than solving ''P''. |
||
However, this only indicates that finding collisions is difficult in ''some'' cases, as not all instances of a computationally hard problem are typically hard. Indeed, very large instances of NP-hard problems are routinely solved, while only the hardest are practically impossible to solve. |
|||
Hash functions with the proof of their security are based on mathematical functions. |
|||
===Hard problems=== |
===Hard problems=== |
||
Examples of problems |
Examples of problems that are assumed to be not solvable in polynomial time include |
||
* [[Discrete logarithm |
* [[Discrete logarithm]] |
||
* [[Quadratic residue| |
* [[Quadratic residue|Modular square roots]] |
||
* [[Integer factorization |
* [[Integer factorization]] |
||
* [[Subset sum problem|Subset |
* [[Subset sum problem|Subset sum]] |
||
===Downsides of provable approach=== |
===Downsides of the provable approach=== |
||
* Current collision-resistant hash algorithms that have provable security [[Reduction (complexity)|reductions]] are too inefficient to be used in practice. In comparison to classical hash functions, they tend to be relatively slow and do not always meet all of criteria traditionally expected of cryptographic hashes. [[Very smooth hash]] is an example. |
* Current{{When|date=August 2024}} collision-resistant hash algorithms that have provable security [[Reduction (complexity)|reductions]] are too inefficient to be used in practice. In comparison to classical hash functions, they tend to be relatively slow and do not always meet all of criteria traditionally expected of cryptographic hashes. [[Very smooth hash]] is an example. |
||
* Constructing a hash function with provable security is much more difficult than using a classical approach where |
* Constructing a hash function with provable security is much more difficult than using a classical approach where one just hopes that the complex mixing of bits in the hashing algorithm is strong enough to prevent adversary from finding collisions. |
||
* The proof is often a reduction to a problem with asymptotically hard [[Worst-case complexity|worst-case]] or [[average-case complexity]]. Worst-case measures the difficulty of solving pathological cases rather than typical cases of the underlying problem. Even a reduction to a problem with hard average complexity offers only limited security as there still can be an algorithm that easily solves the problem for a subset of the problem space. For example, early versions of [[Fast Syndrome Based Hash]] turned out to be insecure. This problem was solved in the latest version. |
* The proof is often a reduction to a problem with asymptotically hard [[Worst-case complexity|worst-case]] or [[average-case complexity]]. Worst-case complexity measures the difficulty of solving pathological cases rather than typical cases of the underlying problem. Even a reduction to a problem with hard average-case complexity offers only limited security, as there still can be an algorithm that easily solves the problem for a subset of the problem space. For example, early versions of [[Fast Syndrome Based Hash]] turned out to be insecure. This problem was solved in the latest version. |
||
[[SWIFFT]] is an example of a hash function that circumvents these security problems. It can be shown that for any algorithm that can break SWIFFT with probability |
[[SWIFFT]] is an example of a hash function that circumvents these security problems. It can be shown that, for any algorithm that can break SWIFFT with probability {{Mvar|p}} within an estimated time {{Mvar|t}}, one can find an algorithm that solves the ''worst-case'' scenario of a certain difficult mathematical problem within time {{Math|''t''′}} depending on {{Mvar|t}} and {{Mvar|p}}.<ref name="SWIFFT Paper">{{cite journal |last1=Lyubashevsky |first1=Vadim |last2=Micciancio |first2=Daniele |last3=Peikert |first3=Chris |last4=Rosen |first4=Alon |title=SWIFFT: A Modest Proposal for FFT Hashing |url=https://cseweb.ucsd.edu/~vlyubash/papers/swifft.pdf |access-date=16 January 2026}}</ref> |
||
===Example of (impractical) |
===Example of (impractical) provably secure hash function=== |
||
Let {{Math|1=hash(''m'') = ''x''<sup>''m''</sup> mod ''n''}}, where {{Mvar|n}} is a hard-to-factor composite number, and {{Mvar|x}} is some prespecified base value. A collision {{Math|''x''<sup>''m''<sub>1</sub></sup> ≡ ''x''<sup>''m''<sub>2</sub></sup> (mod ''n'')}} reveals a multiple {{Math|''m''<sub>1</sub> − ''m''<sub>2</sub>}} of the [[multiplicative order]] of {{Mvar|x}} modulo {{Mvar|n}}. This information can be used to factor {{Mvar|n}} in polynomial time, assuming certain properties of {{Mvar|x}}. |
|||
But the algorithm is quite inefficient because it requires on average 1.5 multiplications modulo |
But the algorithm is quite inefficient because it requires on average 1.5 multiplications modulo {{Mvar|n}} per message-bit. |
||
===More practical provably secure hash functions=== |
===More practical provably secure hash functions=== |
||
* [[Very smooth hash|VSH |
* [[Very smooth hash|VSH]]—Very Smooth Hash—a provably secure collision-resistant hash function assuming the hardness of finding nontrivial modular square roots modulo composite number {{Mvar|n}} (this is proven to be as hard as [[Integer factorization|factoring]] {{Mvar|n}}). |
||
* [[MuHASH]] |
* [[MuHASH]] |
||
* [[Elliptic curve only hash|ECOH |
* [[Elliptic curve only hash|ECOH]]—[[Elliptic curve only hash|Elliptic Curve Only hash function]]—based on the concept of [[Elliptic curve|elliptic curves]], the [[subset sum problem]], and summation of polynomials. The security proof of the collision resistance was based on weakened assumptions, and eventually a second pre-image attack was found. |
||
* [[Fast Syndrome Based Hash|FSB |
* [[Fast Syndrome Based Hash|FSB]]—[[Fast Syndrome Based Hash|Fast Syndrome-Based hash function]]—it can be proven that breaking FSB is at least as difficult as solving ''regular syndrome decoding'', which is known to be NP-complete. |
||
* [[SWIFFT]] |
* [[SWIFFT]]—SWIFFT is based on the [[fast Fourier transform]] and is provably collision resistant, under a relatively mild assumption about the worst-case difficulty of finding short vectors in cyclic/[[Ideal lattice cryptography|ideal lattices]]. |
||
* [[Chaum, van Heijst, Pfitzmann hash function]] |
* [[Chaum, van Heijst, Pfitzmann hash function]]—a compression function where finding collisions is as hard as solving the [[discrete logarithm|discrete logarithm problem]] in a finite group {{Math|''F''<sub>2''p''+1</sub>}}. |
||
* [[Knapsack-based hash functions]] |
* [[Knapsack-based hash functions]]—a family of hash functions based on the [[knapsack problem]]. |
||
* [[The Zémor-Tillich hash function]] |
* [[The Zémor-Tillich hash function]]—a family of hash functions that relies on the arithmetic of the group of matrices [[Special linear group|SL<sub>2</sub>]]. Finding collisions is at least as difficult as finding factorization of certain elements in this group. This is supposed to be hard, at least [[PSPACE-complete]].{{Dubious|PSPACE-complete?!|date=January 2019}} For this hash, an attack was eventually discovered with a time complexity close to {{Math|2<sup>''n''/2</sup>}}. This beat by far the birthday bound and ideal pre-image complexities, which are {{Math|2<sup>3''n''/2</sup>}} and {{Math|2<sup>3''n''</sup>}} for the Zémor-Tillich hash function. As the attacks include a birthday search in a reduced set of size {{Math|2''n''}}, they indeed do not destroy the idea of provable security or invalidate the scheme but rather suggest that the initial parameters were too small.<ref>{{Citation |
||
| last1 = Petit | first1 = C. |
| last1 = Petit | first1 = C. |
||
| last2 = Quisquater | first2 = J.-J. |
| last2 = Quisquater | first2 = J.-J. |
||
| Line 69: | Line 76: | ||
| contribution = Hard and easy Components of Collision Search in the Zémor-Tillich hash function:new Attacks and Reduced Variants with Equivalent Security |
| contribution = Hard and easy Components of Collision Search in the Zémor-Tillich hash function:new Attacks and Reduced Variants with Equivalent Security |
||
| contribution-url = http://www-rocq.inria.fr/secret/Jean-Pierre.Tillich/publications/CTRSA.pdf }}</ref> |
| contribution-url = http://www-rocq.inria.fr/secret/Jean-Pierre.Tillich/publications/CTRSA.pdf }}</ref> |
||
* [[Hash functions from Sigma Protocols]] |
* [[Hash functions from Sigma Protocols]]—there exists a general way of constructing a provably secure hash, specifically from any (suitable) [[Proof of knowledge#Sigma protocols|sigma protocol]]. A faster version of [[Very smooth hash|VSH]] (called VSH*) could be obtained in this way. |
||
==References== |
==References== |
||
Latest revision as of 10:46, 29 July 2026
In cryptography, cryptographic hash functions can be divided into two main categories. In the first category are those functions whose designs are based on mathematical problems, and whose security thus follows from rigorous mathematical proofs, complexity theory and formal reduction. These functions are called provably secure cryptographic hash functions. To construct these is very difficult, and few examples have been introduced. Their practical use is limited.
In the second category are functions which are not based on mathematical problems, but on an ad-hoc constructions, in which the bits of the message are mixed to produce the hash. These are then believed to be hard to break, but no formal proof is given. Almost all hash functions in widespread use reside in this category. Some of these functions are already broken, and are no longer in use. See Hash function security summary.
Types of security of hash functions
[edit | edit source]Generally, the basic security of cryptographic hash functions can be seen from different angles: pre-image resistance, second pre-image resistance, collision resistance, and pseudo-randomness.
- Pre-image resistance: given a hash h, it should be hard to find any message m such that h = hash(m). This concept is related to that of the one-way function. Functions that lack this property are vulnerable to pre-image attacks.
- Second pre-image resistance: given an input m1, it should be hard to find another input m2 ≠ m1 such that hash(m1) = hash(m2). This property is sometimes referred to as weak collision resistance. Functions that lack this property are vulnerable to second pre-image attacks.
- Collision resistance: it should be hard to find two different messages m1 and m2 such that hash(m1) = hash(m2). Such a pair is called a (cryptographic) hash collision. This property is sometimes referred to as strong collision resistance. It requires a hash value at least twice as long as what is required for pre-image resistance; otherwise, collisions may be found by a birthday attack.
- Pseudo-randomness: it should be hard to distinguish a pseudo-random number generator based on the hash function from true random number generator; for example, it passes usual randomness tests.
The meaning of hard
[edit | edit source]The basic question is the meaning of hard. There are two approaches to answer this question. First is the intuitive/practical approach: "hard means that it is almost certainly beyond the reach of any adversary who must be prevented from breaking the system for as long as the security of the system is deemed important." The second approach is theoretical and is based on the computational complexity theory: if problem A is hard, then there exists a formal security reduction from a problem which is widely considered unsolvable in polynomial time, such as integer factorization or the discrete logarithm problem.
However, non-existence of a polynomial time algorithm does not automatically ensure that the system is secure. The difficulty of a problem also depends on its size. For example, RSA public-key cryptography (which relies on the difficulty of integer factorization) is considered secure only with keys that are at least 2048 bits long, whereas keys for the ElGamal cryptosystem (which relies on the difficulty of the discrete logarithm problem) are commonly in the range of 256–512 bits.
Password case
[edit | edit source]If the set of inputs to the hash is relatively small or is ordered by likelihood in some way, then a brute force search may be practical, regardless of theoretical security. The likelihood of recovering the preimage depends on the input set size and the speed or cost of computing the hash function. A common example is the use of hashes to store password validation data. Rather than store the plaintext of user passwords, an access control system typically stores a hash of the password. When a person requests access, the password they submit is hashed and compared with the stored value. If the stored validation data is stolen, then the thief will only have the hash values, not the passwords. However, most users choose passwords in predictable ways, and passwords are often short enough so that all possible combinations can be tested if fast hashes are used.[1] Special hashes called key derivation functions have been created to slow searches. See Password cracking.
Cryptographic hash functions
[edit | edit source]Most hash functions are built on an ad-hoc basis, where the bits of the message are nicely mixed to produce the hash. Various bitwise operations (e.g. rotations), modular additions, and compression functions are used in iterative mode to ensure high complexity and pseudo-randomness of the output. In this way, the security is very hard to prove and the proof is usually not done. Only a few years ago[when?], one of the most popular hash functions, SHA-1, was shown to be less secure than its length suggested: collisions could be found in only 251[2] tests, rather than the brute-force number of 280.
In other words, most of the hash functions in use nowadays are not provably collision-resistant. These hashes are not based on purely mathematical functions. This approach results generally in more effective hashing functions, but with the risk that a weakness of such a function will be eventually used to find collisions. One famous case is MD5.
Provably secure hash functions
[edit | edit source]In this approach, the security of a hash function is based on some hard mathematical problem, and it is proved that finding collisions of the hash function is as hard as breaking the underlying problem. This gives a somewhat stronger notion of security than just relying on complex mixing of bits as in the classical approach.
A cryptographic hash function has provable security against collision attacks if finding collisions is provably polynomial-time reducible from a problem P which is supposed to be unsolvable in polynomial time. The function is then called provably secure, or just provable.
It means that if finding collisions would be feasible in polynomial time by algorithm A, then one could find and use polynomial time algorithm R (reduction algorithm) that would use algorithm A to solve problem P, which is widely supposed to be unsolvable in polynomial time. That is a contradiction. This means that finding collisions cannot be easier than solving P.
However, this only indicates that finding collisions is difficult in some cases, as not all instances of a computationally hard problem are typically hard. Indeed, very large instances of NP-hard problems are routinely solved, while only the hardest are practically impossible to solve.
Hard problems
[edit | edit source]Examples of problems that are assumed to be not solvable in polynomial time include
Downsides of the provable approach
[edit | edit source]- Current[when?] collision-resistant hash algorithms that have provable security reductions are too inefficient to be used in practice. In comparison to classical hash functions, they tend to be relatively slow and do not always meet all of criteria traditionally expected of cryptographic hashes. Very smooth hash is an example.
- Constructing a hash function with provable security is much more difficult than using a classical approach where one just hopes that the complex mixing of bits in the hashing algorithm is strong enough to prevent adversary from finding collisions.
- The proof is often a reduction to a problem with asymptotically hard worst-case or average-case complexity. Worst-case complexity measures the difficulty of solving pathological cases rather than typical cases of the underlying problem. Even a reduction to a problem with hard average-case complexity offers only limited security, as there still can be an algorithm that easily solves the problem for a subset of the problem space. For example, early versions of Fast Syndrome Based Hash turned out to be insecure. This problem was solved in the latest version.
SWIFFT is an example of a hash function that circumvents these security problems. It can be shown that, for any algorithm that can break SWIFFT with probability p within an estimated time t, one can find an algorithm that solves the worst-case scenario of a certain difficult mathematical problem within time t′ depending on t and p.[3]
Example of (impractical) provably secure hash function
[edit | edit source]Let hash(m) = xm mod n, where n is a hard-to-factor composite number, and x is some prespecified base value. A collision xm1 ≡ xm2 (mod n) reveals a multiple m1 − m2 of the multiplicative order of x modulo n. This information can be used to factor n in polynomial time, assuming certain properties of x.
But the algorithm is quite inefficient because it requires on average 1.5 multiplications modulo n per message-bit.
More practical provably secure hash functions
[edit | edit source]- VSH—Very Smooth Hash—a provably secure collision-resistant hash function assuming the hardness of finding nontrivial modular square roots modulo composite number n (this is proven to be as hard as factoring n).
- MuHASH
- ECOH—Elliptic Curve Only hash function—based on the concept of elliptic curves, the subset sum problem, and summation of polynomials. The security proof of the collision resistance was based on weakened assumptions, and eventually a second pre-image attack was found.
- FSB—Fast Syndrome-Based hash function—it can be proven that breaking FSB is at least as difficult as solving regular syndrome decoding, which is known to be NP-complete.
- SWIFFT—SWIFFT is based on the fast Fourier transform and is provably collision resistant, under a relatively mild assumption about the worst-case difficulty of finding short vectors in cyclic/ideal lattices.
- Chaum, van Heijst, Pfitzmann hash function—a compression function where finding collisions is as hard as solving the discrete logarithm problem in a finite group F2p+1.
- Knapsack-based hash functions—a family of hash functions based on the knapsack problem.
- The Zémor-Tillich hash function—a family of hash functions that relies on the arithmetic of the group of matrices SL2. Finding collisions is at least as difficult as finding factorization of certain elements in this group. This is supposed to be hard, at least PSPACE-complete.[dubious – discuss] For this hash, an attack was eventually discovered with a time complexity close to 2n/2. This beat by far the birthday bound and ideal pre-image complexities, which are 23n/2 and 23n for the Zémor-Tillich hash function. As the attacks include a birthday search in a reduced set of size 2n, they indeed do not destroy the idea of provable security or invalidate the scheme but rather suggest that the initial parameters were too small.[4]
- Hash functions from Sigma Protocols—there exists a general way of constructing a provably secure hash, specifically from any (suitable) sigma protocol. A faster version of VSH (called VSH*) could be obtained in this way.
References
[edit | edit source]- ↑ Goodin, Dan (2012-12-10). "25-GPU cluster cracks every standard Windows password in <6 hours". Ars Technica. Retrieved 2020-11-23.
- ↑ "Classification and Generation of Disturbance Vectors for Collision Attacks against SHA-1" (PDF). Archived from the original (PDF) on 2009-01-15.
- ↑ Lyubashevsky, Vadim; Micciancio, Daniele; Peikert, Chris; Rosen, Alon. "SWIFFT: A Modest Proposal for FFT Hashing" (PDF). Retrieved 16 January 2026.
{{cite journal}}: Cite journal requires|journal=(help) - ↑ Petit, C.; Quisquater, J.-J.; Tillich, J.-P., "Hard and easy Components of Collision Search in the Zémor-Tillich hash function:new Attacks and Reduced Variants with Equivalent Security" (PDF),
{{citation}}: Missing or empty|title=(help)