Content deleted Content added
VulcanSphere (talk | contribs) Adding short description: none (Shortdesc helper) |
m Replaced 1 bare URLs by {{Cite web}}; Replaced "Archived copy" by actual titles |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1:
{{Short description|None}}
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
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]].
Line 7:
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
* '''Second pre-image resistance''': given an input {{Math|''m''<
* '''Collision resistance''': it should be ''hard'' to find two different messages {{Math|''m''<
* '''Pseudo-randomness''': it should be ''hard'' to distinguish
===The meaning of
The basic question is the meaning of
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]]
▲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]]. However, it is considered secure only with keys that are at least 2048 bits large.
===Password case===
| 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
Line 32 ⟶ 30:
{{Main article|Cryptographic hash function}}
Most hash functions are built on an ad
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.
==Provably secure hash functions==
In this approach,
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.▼
▲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===
Examples of problems
* [[Discrete logarithm
* [[Quadratic residue|
* [[Integer factorization
* [[Subset sum problem|Subset
===Downsides of the provable approach===
* 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
* 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
===Example of (impractical)
But the algorithm is quite inefficient because it requires on average 1.5 multiplications modulo
===More practical provably secure hash functions===
* [[Very smooth hash|VSH
* [[MuHASH]]
* [[Elliptic curve only hash|ECOH]]—[[Elliptic
* [[Fast Syndrome Based Hash|FSB]]—[[Fast
* [[SWIFFT]]
* [[Chaum, van Heijst, Pfitzmann hash function]]
* [[Knapsack-based hash functions]]
* [[The Zémor-Tillich hash function]]
| last1 = Petit | first1 = C.
| last2 = Quisquater | first2 = J.-J.
Line 82 ⟶ 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-url = http://www-rocq.inria.fr/secret/Jean-Pierre.Tillich/publications/CTRSA.pdf }}</ref>
* [[Hash functions from Sigma Protocols]]
==References==
|