Content deleted Content added
Denisarona (talk | contribs) m Reverted edits by 103.206.105.66 (talk) to last version by Klbrain |
m Replaced 1 bare URLs by {{Cite web}}; Replaced "Archived copy" by actual titles |
||
(13 intermediate revisions by 12 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
In the second category are functions
==Types of security of hash functions==
Generally, the ''basic'' security of [[cryptographic hash functions]] can be seen from
* '''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 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 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]]
===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]]. However, it is considered secure only with keys that are at least 1024 bits large.
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==
{{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,
A cryptographic hash function has
It means that if finding collisions would be feasible in polynomial time by algorithm ''A'',
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 68 ⟶ 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==
|