Hash Functions Part 1: Core Properties, Security Requirements and Practical Applications

The article provides a detailed introduction to hash functions, explaining how they map arbitrary-length input to fixed-length output while satisfying three fundamental security properties. It covers preimage resistance, second preimage resistance, and collision resistance, along with the avalanche effect that makes even minor input changes produce unrecognizable output. The text explains why a 256-bit digest is required to achieve 128-bit collision resistance, referencing the birthday paradox and its implications for MD5 and SHA-1. Practical guidance includes using OpenSSL for hashing, applying hashes in commitment schemes, enforcing subresource integrity on web pages, and securely storing passwords with Argon2 and bcrypt. The post emphasizes that hash functions alone do not guarantee integrity without proper transmission of the digest and announces a follow-up on SHA-2 and SHA-3 internals.

HabrTranslated from Russian

Read at source

Hash Functions. Part 1: Fundamentals

Hash function is a function that accepts data of arbitrary length and produces a fixed-length output called a hash or digest. In practice, three core security properties must hold: preimage resistance, second-preimage resistance, and collision resistance. In addition, a good hash function exhibits the avalanche effect: the smallest change in input produces an unrecognizable change in output.

What is a Hash Function?

Preimage resistance means it is computationally infeasible to recover the original input from the digest. Second-preimage resistance means that, given an input and its digest, finding a different input that yields the same digest is practically impossible. Collision resistance means finding any two distinct inputs that produce the same digest is infeasible; neither input is fixed in advance.

Methods for Ensuring Hash Function Security

The theoretical properties have practical limits. Input data must possess sufficient entropy and length; otherwise an attacker can precompute hashes for all possible values and reverse the digest. The output size is equally critical. A minimum digest length of 256 bits is now considered mandatory because it delivers 128 bits of security against collision attacks. A 128-bit digest suffices only for the first two properties, since modern hardware cannot exhaust 2^128 possibilities.

The birthday paradox illustrates why 256 bits are required for collision resistance. The question “How many people must be in a room for a 50 percent chance that at least two share a birthday?” yields the answer 23. Mathematically, when sampling from a space of size 2^N, a collision is expected after roughly 2^(N/2) attempts. Therefore a 256-bit digest is needed to obtain 128-bit collision security. Because of insufficient collision resistance, MD5 and SHA-1 are considered broken.

Hash Functions in Practice

Hashing can be performed directly from the command line with OpenSSL:

echo -n "some words" | openssl dgst -sha256

Any supported algorithm may replace sha256, and a file path may be supplied instead of a string.

Hash functions enable commitment schemes: a party hashes secret data, publishes the digest, and later reveals the original value for verification. The function simultaneously hides the secret and binds the committer to the original data. They also protect web subresource integrity. When loading scripts or stylesheets from a CDN, the integrity attribute allows the browser to verify that the received file matches the expected digest:

  • <link rel="stylesheet" href="https://my-provider.com" integrity="sha256-HASH_OF_STYLE" crossorigin="anonymous">
  • <script src="https://my-provider.com" integrity="sha256-HASH_OF_SCRIPT" crossorigin="anonymous"></script>

The most widespread use is password storage with memory-hard functions such as Argon2 and bcrypt. Only the digest is stored; when a user supplies a password it is hashed and compared with the stored value. Because the digest itself must be transmitted securely, a hash function alone does not provide integrity; it must be used within a properly designed protocol.

This concludes Part 1. The next installment will examine the internal structure of SHA-2 and SHA-3, their respective strengths and weaknesses, and the appropriate use of XOF functions.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Other

Mail.ru Reduces Lifetime 1TB Cloud Storage Promo to Standard 8GB Quota for Select Users
Kimi K3 Open Model Surpasses Closed AI Leaders with Million-Token Context and 896 Experts
Innostage Completes Functional Testing of PT NGFW 1.10.3 Across 156 Criteria