Fact-checked by Grok 2 weeks ago

RIPEMD

RIPEMD (RACE Integrity Primitives Evaluation Message Digest) is a family of cryptographic s designed for applications such as digital signatures, message , and verification. Developed by Hans Dobbertin, Antoon Bosselaers, and Preneel as part of the Union's RACE Integrity Primitives Evaluation (RIPE) project (1988–1992), the original RIPEMD was introduced in 1992 as a 128-bit hash function inspired by the , aiming to provide secure message digests on 32-bit processors. In 1996, due to emerging cryptanalytic weaknesses in the original design and related functions like and , the team published RIPEMD-160 as a strengthened variant. This iteration produces a 160-bit value, incorporates five rounds of processing (up from three in the original), and employs two parallel computation lines with distinct Boolean functions, rotations, and message word permutations to enhance and overall security. RIPEMD-160 was explicitly intended as a more secure replacement for 128-bit hashes like and the initial RIPEMD, with design choices tuned for efficient software implementation on 32-bit architectures. The RIPEMD family was later expanded to include additional variants: RIPEMD-128 (a direct 128-bit successor to the original), RIPEMD-256 (producing 256 bits), and RIPEMD-320 (producing 320 bits), each maintaining the core parallel structure while adjusting output lengths for varying security needs. While the original RIPEMD and RIPEMD-128 are no longer recommended due to identified vulnerabilities, RIPEMD-160 remains considered secure against practical attacks as of 2025, though theoretical advances in continue; it has been largely supplanted by the family in modern standards. RIPEMD-160 is specified in the original design document and included in the ISO/IEC 10118-3:2018 standard on dedicated hash-functions, and it has found niche use in legacy systems, certain protocols requiring lightweight hashing, and notably in the for generating addresses from public keys.

Overview

Definition and Purpose

RIPEMD is a family of cryptographic hash functions designed to produce a fixed-size output, typically 128 to 320 bits, from messages of arbitrary length, serving as one-way functions for secure message digestion. These functions map input data to a compact digest that uniquely represents the original message without allowing easy reversal. The primary purpose of RIPEMD in is to ensure by detecting unauthorized modifications, support message authentication through verifiable digests, and enable digital signatures by providing a secure basis for signing fixed-length values. It resists key attacks including preimage (finding an input for a given output), second-preimage (finding a different input for the same output), and collision (finding two inputs with the same output) attacks, with levels scaling to the output size, such as approximately 2^80 operations for collisions in 160-bit variants. Key design goals for the RIPEMD family include providing a European-developed alternative to the and hash functions, with an emphasis on strong and the , where even a single-bit change in the input produces a significantly different output (at least 50% bit flips on average). The functions are deterministic, computationally efficient for software implementation on 32-bit processors, and maintain these properties across variants, with RIPEMD-160 being the most widely adopted for its balanced security and performance.

Family of Variants

The RIPEMD family encompasses several cryptographic hash functions designed primarily for message authentication and integrity verification, evolving from the original proposal to address emerging security needs. The original RIPEMD, introduced in 1992, produces a 128-bit output with an internal state of 128 bits (four 32-bit words), utilizing two parallel branches inspired by MD4 to enhance collision resistance. In 1996, strengthened variants were developed to mitigate identified weaknesses in the original design, including a plug-in replacement RIPEMD-128 with a 128-bit output and 128-bit internal state (four 32-bit words), and RIPEMD-160 with a 160-bit output and 160-bit internal state (five 32-bit words). These updates incorporated refinements such as increased round counts and differentiated operations between branches. The family further includes RIPEMD-256 and RIPEMD-320, both proposed in 1996 as double-length extensions of RIPEMD-128 and RIPEMD-160, respectively, yielding 256-bit and 320-bit outputs with corresponding internal states of 256 bits and 320 bits to support applications requiring longer digests. These variants were created to bolster security margins against brute-force attacks, where larger output sizes exponentially increase the effort required for preimage or collision searches, while maintaining compatibility with the core double-branch architecture.
VariantOutput Size (bits)Internal State Size (bits)Publication YearPrimary Design Improvements
Original RIPEMD1281281992Parallel MD4-like branches with varied shifts and constants
RIPEMD-1281281281996Plug-in strengthening with four rounds and refined message ordering
RIPEMD-1601601601996Five rounds, enhanced branch differences, and rotation mechanisms for added
RIPEMD-2562562561996Double-length extension of RIPEMD-128 with for inter-branch
RIPEMD-3203203201996Double-length extension of RIPEMD-160 with for inter-branch

History

Development in the RIPE Project

The RIPE (RACE Integrity Primitives Evaluation) project was an initiative funded by the Commission's RACE (Research and Development in Advanced Communications Technologies in ) program, running from 1988 to 1992, with the primary goal of developing a suite of cryptographic integrity primitives suitable for open networks, particularly the emerging Integrated Broadband Communication (IBC) systems. This effort focused on creating secure mechanisms for , message , and related functions, excluding confidentiality primitives, to foster and in pan-European . The consortium involved academic and industrial partners, including Katholieke Universiteit (KU ), which played a central role in the design of hash functions. Within this framework, the original RIPEMD (RIPE Message Digest) emerged as a key output, designed by Antoon Bosselaers and Bart Preneel at . Hans Dobbertin later contributed to its and the development of strengthened variants. Proposed in 1992 as RIPEMD-0, it was structured as an enhanced variant of Ronald Rivest's algorithm, incorporating a 128-bit output length to provide robust for practical applications. The design emphasized software efficiency on 32-bit processors while addressing early vulnerabilities identified in MD4 through structural modifications, such as lines. The project's motivations were driven by concerns over the of U.S.-developed hash functions like and the subsequent , which had shown susceptibility to partial attacks, prompting a need for independent European alternatives. RIPEMD was thus positioned as a for primitives, aiming to support secure information systems in distributed environments without relying on designs. This initial version laid the groundwork for subsequent refinements within the RIPEMD family.

Evolution of Variants

Following the initial development of RIPEMD in 1992 as part of the European RACE Integrity Primitives Evaluation (RIPE) project, significant weaknesses were identified in its design by early 1995, prompting major revisions. Specifically, cryptanalyst Hans Dobbertin demonstrated collisions in the last two rounds of the original RIPEMD, exploiting similarities to the vulnerable . In response, Dobbertin, along with Antoon Bosselaers and Bart Preneel, introduced strengthened variants in 1996: RIPEMD-128, which retained a 128-bit output but added an extra round for improved resistance, and RIPEMD-160, which extended the output to 160 bits with five rounds total. These revisions addressed the original's insufficient security margin against brute-force attacks, where a 128-bit could theoretically be collided in days using specialized hardware costing around $10 million. A key evolutionary refinement in RIPEMD-160 was the enhancement of its parallel branch structure for superior of changes across the message digest. Unlike RIPEMD's more uniform parallel MD4-like branches, RIPEMD-160 incorporated distinct functions, shifted message word orders, and periodic exchanges of variables between branches every round, making attacks significantly harder. This design directly countered the early collision findings while maintaining compatibility with 32-bit processors for efficient implementation. RIPEMD-160 quickly gained traction as a secure alternative to , influencing subsequent European cryptographic efforts by providing a model for parallel-branch hashes resistant to known MD-family vulnerabilities. To accommodate emerging needs for longer hash outputs without proportionally increasing computational security requirements, RIPEMD-256 and RIPEMD-320 were introduced as double-length extensions of RIPEMD-128 and RIPEMD-160, respectively, in the same 1996 framework. These variants apply the core compression function twice per block, with register swapping between iterations to ensure avalanche effects, targeting applications like digital signatures where 256- or 320-bit digests enhance for larger key spaces. Standardization efforts solidified the family's role in international . RIPEMD-160 and RIPEMD-128 were formally adopted in the ISO/IEC 10118-3 for dedicated hash functions in 2004, with revisions in 2018 confirming their specifications and s for . RIPEMD-256 received an from TeleTrusT. This timeline reflected growing recognition of RIPEMD's contributions to secure hash design in , bridging the gap between prototypes and deployable s.

Algorithm Design

General Structure

The RIPEMD family of cryptographic hash functions employs the Merkle-Damgård construction to process input messages securely. The overall process begins with the input message to a length that is a multiple of the 512-bit block size. This involves appending a single '1' bit, followed by sufficient '0' bits to reach 448 bits modulo 512, and concluding with a 64-bit little-endian representation of the original message length in bits. This ensures unambiguous recovery of the message length and prevents ambiguities in . The hashing iteration initializes a set of variables that maintain the across blocks. Variants differ in state size: earlier ones like RIPEMD and RIPEMD-128 use four 32-bit words (A, B, C, D), while RIPEMD-160 and later use five (A, B, C, D, E). These are initialized to fixed constants derived from the fractional parts of the square roots of the first few prime numbers (√2, √3, etc.), scaled by $2^{32} and taken as integers. For example, in RIPEMD-160:
  • h0 = 0x67452301 (from √2)
  • h1 = 0xefcdab89 (from √3)
  • h2 = 0x98badcfe (from √5)
  • h3 = 0x10325476 (from √7)
  • h4 = 0xc3d2e1f0 (from √11)
    RIPEMD-128 uses the first four of these. These "nothing-up-my-sleeve" constants provide a verifiable, non-arbitrary starting point to enhance trust in the .
Each padded 512-bit block is divided into 16 consecutive 32-bit words, denoted X0 to X15, processed in little-endian byte order. The block undergoes iterative compression by updating the chaining variables through a number of sequential steps grouped into rounds, varying by variant: 48 steps in three rounds for the original RIPEMD, 64 steps in four rounds for RIPEMD-128, and 80 steps in five rounds for RIPEMD-160. In each step, nonlinear functions, modular additions, left rotations, and constant additions are applied to the state words, incorporating message words in a specific nonlinear unique to each round. This processing occurs in two parallel branches—a left branch mirroring an MD4-like structure and a right branch with modified operations—before the branches interact in the final steps to produce the updated variables for the next block. Key structural variations across the family include the number of rounds and functions used (three functions f1-f3 for original RIPEMD, four f1-f4 for RIPEMD-128, five f1-f5 for RIPEMD-160), message word permutations, and branch combination methods (e.g., RIPEMD-256 and RIPEMD-320 output both branches separately without final mixing for longer digests). Upon completing the for all blocks, the final chaining variables are concatenated in order to yield the digest. Depending on the variant, the output may be truncated to a specific length, such as 160 bits for RIPEMD-160 or 128 bits for RIPEMD-128.

Compression Function

The compression function in RIPEMD variants processes a 512-bit message block together with the current chaining variables (e.g., 128-bit for RIPEMD-128 or 160-bit for RIPEMD-160) to produce updated chaining variables of the same length, forming the core of the Merkle-Damgård construction used across the family. This mechanism iteratively compresses the input message by incorporating block data and prior state through a series of bitwise and arithmetic operations designed for . The number of rounds varies by variant, with each consisting of 16 steps (e.g., five rounds for 80 steps in RIPEMD-160). Each round applies nonlinear functions operating on three 32-bit words x, y, z via bitwise operations to introduce nonlinearity. The functions differ by variant: earlier ones use f1 to f3 or f4; RIPEMD-160 uses five, denoted f1 to f5:
  • f1(x, y, z) = x ⊕ y ⊕ z
  • f2(x, y, z) = (x ∧ y) ∨ (¬x ∧ z)
  • f3(x, y, z) = (x ∨ ¬y) ⊕ z
  • f4(x, y, z) = (x ∧ z) ∨ (y ∧ ¬z)
  • f5(x, y, z) = x ⊕ (y ∨ ¬z)
These functions, inspired by but diversified for enhanced diffusion, are applied sequentially across rounds, with the left branch using them in forward order and the right branch in reverse (where applicable). In each step, the nonlinear function output is combined with a 32-bit word, a round-specific constant, and the current value via modulo 232, followed by a left and another to the . Specifically, for a register A, the is A ← ((A + f(B, C, D) + Xi + Kj) ≪ s) + E, where Xi is the word, Kj is the constant, s is the rotation amount (varying from 5 to 30 bits across steps), and cycle through the . words are fed into the steps via permutations that differ between branches, ensuring thorough mixing. All variants employ two parallel branches—a left and a right line—each performing the independently on the same input but with distinct permutations, constants, and schedules to amplify against attacks. The branches are combined at the end by adding corresponding output registers pairwise modulo 232 (with selective final rotations on some registers in certain variants), yielding the new chaining variables that propagate to the next block. This dual-line design, present since the original RIPEMD but refined in later variants, distinguishes the family from single-branch functions like by promoting greater avalanche effects and resistance to linear approximations. For RIPEMD-256 and RIPEMD-320, the branches are not combined, allowing longer outputs.

RIPEMD-160

Specifications

RIPEMD-160 produces a 160-bit value, represented as five 32-bit words, serving as the output from the final state of the compression function. The algorithm initializes five 32-bit registers, denoted as A, B, C, D, and E, with the following hexadecimal constants:
A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476
E = 0xC3D2E1F0
These values are the same as the initial chaining variables used in MD5.
Message padding follows the MD4 convention: a single '1' bit is appended to the input message, followed by zero or more '0' bits to ensure the total length is congruent to 448 512 bits; then, the original message length in bits is appended as a 64-bit big-endian , making the padded message a multiple of 512 bits. The compression function employs 80 steps divided into five rounds, with distinct constants K_j for the left branch and K'_j for the right branch, applied across the steps j = 0 to $79. These constants are selected as fractional parts of the square roots of prime numbers, scaled and truncated to bits, and vary by round as shown in the table below:
Step RangeLeft Constant K_j (hex)Right Constant K'_j (hex)
0–150x000000000x50A28BE6
16–310x5A8279990x5C4DD124
32–470x6ED9EBA10x6D703EF3
48–630x8F1BBCDC0x7A6D76E9
64–790xA953FD4E0x00000000
Left rotations are applied to intermediate values in each step, with amounts s_j for the left branch and s'_j for the right branch, chosen to enhance and effects. The rotation schedules, grouped by round, are:
Step RangeLeft Rotations s_jRight Rotations s'_j
0–1511,14,15,12,5,8,,9,11,13,14,15,6,,9,88,9,9,11,13,15,15,5,,,8,11,14,14,12,6
16–31,6,8,13,11,9,,15,,12,15,9,11,,13,129,13,15,,12,8,9,11,,,12,,6,15,13,11
32–4711,13,6,,14,9,13,15,14,8,13,6,5,12,,59,,15,11,8,6,6,14,12,13,5,14,13,13,,5
48–6311,12,14,15,14,15,9,8,9,14,5,6,8,6,5,1215,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8
64–799,15,5,11,6,8,13,12,5,12,13,14,11,8,5,68,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11
The left branch processes five rounds using nonlinear functions in sequence: f_1(j) = (X_j \oplus Y_j \oplus Z_j), f_2(j) = (X_j \land Y_j) \lor (\lnot X_j \land Z_j), f_3(j) = (X_j \lor \lnot Y_j) \oplus Z_j, f_4(j) = (X_j \land Z_j) \lor (Y_j \land \lnot Z_j), and f_5(j) = X_j \oplus (Y_j \lor \lnot Z_j), with message words selected in orders derived from , rotations \rho, \rho^2, \rho^3, and \rho^4 permutations. The right branch mirrors this structure but applies the functions in reverse order (f_5 to f_1) and uses permuted message orders based on \pi, \rho \pi, \rho^2 \pi, \rho^3 \pi, and \rho^4 \pi, ensuring parallel computation with independent diffusion paths. The message word indices r(j) and r'(j) for the left and right branches, respectively, are as follows:
Step RangeLeft Indices r(j)Right Indices r'(j)
0–150,1,2,3,4,5,6,7,8,9,10,11,12,13,14,155,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12
16–317,4,13,1,10,6,15,3,12,0,9,5,2,14,11,86,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2
32–473,10,14,4,9,15,8,1,2,7,0,6,13,11,5,1215,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13
48–631,9,11,10,0,8,12,4,13,3,7,15,14,5,6,28,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14
64–794,0,5,9,7,12,2,10,14,1,3,8,11,6,15,1312,9,15,5,0,4,8,6,2,7,13,1,3,10,11,14

Step-by-Step Process

The preprocessing step in RIPEMD-160 pads the input message to ensure its length is a multiple of 512 bits, following the same method as MD4. Specifically, a single '1' bit (represented as the byte 0x80) is appended to the message, followed by zero or more '0' bits until the total length modulo 512 equals 448 bits. Then, the original message length in bits is appended as a 64-bit big-endian integer, resulting in a padded message divided into t blocks of 512 bits each, where each block comprises 16 32-bit words denoted X to X. For example, an empty message of 0 bits is padded by appending 0x80, followed by 55 zero bytes (440 zero bits), making the total length 448 bits, and then eight zero bytes for the length, forming a single 512-bit block. The computation begins by initializing five 32-bit chaining variables: h₀ = 0x67452301, h₁ = 0xEFCDAB89, h₂ = 0x98BADCFE, h₃ = 0x10325476, h₄ = 0xC3D2E1F0. For each 512-bit message block Xᵢ, these chaining variables are copied to two sets of working variables for : the left line (A = h₀, B = h₁, C = h₂, D = h₃, E = h₄) and the right line (A' = h₀, B' = h₁, C' = h₂, D' = h₃, E' = h₄). Each line then performs 80 iterative steps, grouped into five rounds of 16 steps each (j = 0 to 79), where all operations are 2³². In each step j of the left line, a temporary value T is computed as
T = \rho_{s(j)} \left( A + f_j(B, C, D) + X_{r(j)} + K_j \right) + E,
where \rho_s denotes a left rotation by s bits, f_j is the round-dependent nonlinear function, r(j) selects the message word index, and K_j is the round constant; the working variables are then updated as A ← E, E ← D, D ← \rho_{10}(C), C ← B, B ← T. The right line follows an analogous process but applies the nonlinear functions in reverse order (f5 to f1 across the five rounds):
T' = \rho_{s'(j)} \left( A' + f(79-j)(B', C', D') + X_{r'(j)} + K'_j \right) + E',
followed by A' ← E', E' ← D', D' ← \rho_{10}(C'), C' ← B', B' ← T', with distinct s'(j), r'(j), and K'_j. The nonlinear functions f_j, rotation amounts s(j) and s'(j), message word orders r(j) and r'(j), and constants K_j and K'_j are predefined per round as specified in the RIPEMD-160 parameters.
After completing the 80 steps, the final working variables from both lines are combined to update the chaining variables as follows:
h₀ ← h₁ + C + D',
h₁ ← h₂ + D + E',
h₂ ← h₃ + E + A',
h₃ ← h₄ + A + B',
h₄ ← h₀ + B + C'. This updated 160-bit chaining value (concatenation of h₀ to h₄) is fed as input to the next block, and after all blocks are processed, it forms the final output.
The following pseudocode outlines the compression function for a single 512-bit block:
procedure RIPEMD160_Compress(h0, h1, h2, h3, h4, X[0..15])
    // Copy chaining vars to left and right lines
    A = h0; B = h1; C = h2; D = h3; E = h4
    A_ = h0; B_ = h1; C_ = h2; D_ = h3; E_ = h4  // Right line with prime notation

    for j = 0 to 79 do
        // Left line step
        if j < 16 then
            f = B xor C xor D
            K = 0x00000000
            s = s_left[j]
            r_idx = r_left[j]
        else if j < 32 then
            f = (B and C) or (not B and D)
            K = 0x5A827999
            s = s_left[j]
            r_idx = r_left[j]
        else if j < 48 then
            f = (B or not C) xor D
            K = 0x6ED9EBA1
            s = s_left[j]
            r_idx = r_left[j]
        else if j < 64 then
            f = (B and D) or (C and not D)
            K = 0x8F1BBCDC
            s = s_left[j]
            r_idx = r_left[j]
        else
            f = B xor (C or not D)
            K = 0xA953FD4E
            s = s_left[j]
            r_idx = r_left[j]
        T = rol_s(A + f + X[r_idx] + K) + E
        A = E; E = D; D = rol_10(C); C = B; B = T

        // Right line step (reversed rounds)
        if j < 16 then
            f_ = B_ xor (C_ or not D_)
            K_ = 0x50A28BE6
            s_ = s_right[j]
            r_idx_ = r_right[j]
        else if j < 32 then
            f_ = (B_ and D_) or (C_ and not D_)
            K_ = 0x5C4DD124
            s_ = s_right[j]
            r_idx_ = r_right[j]
        else if j < 48 then
            f_ = (B_ or not C_) xor D_
            K_ = 0x6D703EF3
            s_ = s_right[j]
            r_idx_ = r_right[j]
        else if j < 64 then
            f_ = (B_ and C_) or (not B_ and D_)
            K_ = 0x7A6D76E9
            s_ = s_right[j]
            r_idx_ = r_right[j]
        else
            f_ = B_ xor C_ xor D_
            K_ = 0x00000000
            s_ = s_right[j]
            r_idx_ = r_right[j]
        T_ = rol_{s_}(A_ + f_ + X[r_idx_] + K_) + E_
        A_ = E_; E_ = D_; D_ = rol_10(C_); C_ = B_; B_ = T_

    // Finalization: Update chaining variables
    h0 = h1 + C + D_
    h1 = h2 + D + E_
    h2 = h3 + E + A_
    h3 = h4 + A + B_
    h4 = h0 + B + C_

    return (h0, h1, h2, h3, h4)
(Note: The arrays s_left, r_left, s_right, and r_right contain the predefined and indexing values for each j; rol denotes left ; all additions and XORs are 2³².)

Known Weaknesses and Attacks

The original RIPEMD , proposed in 1992, was found to have significant weaknesses shortly after its publication. Hans Dobbertin demonstrated a on the reduced two-round version of its compression function, achieving collisions with a complexity of approximately $2^{18} computations, which highlighted structural vulnerabilities in the and prompted the of strengthened variants like RIPEMD-160. This attack exploited differential paths in the MD4-like structure, revealing that the parallel branch did not sufficiently mitigate propagation of differences, though it did not directly break the full three-round function in practical time. For RIPEMD-160, cryptanalytic efforts have focused on reduced-round variants, with no practical full collisions known as of 2025. In 2013, researchers presented a semi-free-start on 36 steps (out of 80) starting from the first step, with a practical of $2^{31} compression function evaluations, using advanced differential path searches and message modification techniques tailored to the dual-branch architecture. This result demonstrated vulnerabilities in the early rounds but remained far from threatening the full function, as the complexity exceeds brute-force bounds only for the reduced version. Subsequent improvements in 2023 achieved a on 36 steps with $2^{64.5}, and a practical collision on 40 steps (found in 16 hours using 115 threads), using MILP to optimize characteristics and SAT/SMT solvers for message pair finding. In 2025, further advances presented semi-free-start collision attacks on up to 44 steps with complexity $2^{76.9}, including practical attacks on 41 steps ($2^{49.8}) and 42 steps ($2^{53.9}), employing enhanced automatic search models, clustering, and dedicated message modification techniques. These advances underscore ongoing concerns about the function's long-term security margin, though full collisions remain infeasible with current computational resources. Among other variants, RIPEMD-128 has been subjected to a pseudo-preimage attack on a 36-step reduced version with complexity $2^{123}, and a with $2^{126.5}, leveraging meet-in-the-middle techniques on the double-branch structure to find messages mapping to the same hash value more efficiently than generic bounds. In contrast, RIPEMD-256 and RIPEMD-320 have withstood significant and remain unbroken against practical collision or preimage attacks as of 2025, owing to their larger output sizes and enhanced round structures. Overall, while RIPEMD-160 resists practical full attacks, its age and the incremental progress in reduced-round cryptanalysis have led to recommendations against its use in new cryptographic systems, favoring modern alternatives with stronger proven security.

Comparison with Other Hash Functions

RIPEMD, developed as a European successor to the MD4 hash function, was designed to address vulnerabilities in the MD family, particularly MD5. While MD5, with its 128-bit output, succumbed to practical collision attacks with a complexity of approximately $2^{39} operations as demonstrated by Wang et al. in 2004, RIPEMD-160 provides stronger resistance, maintaining its full 160-bit collision security at the birthday bound of $2^{80} without known practical breaks. This makes RIPEMD-160 a more robust alternative for legacy systems requiring 160-bit hashes, though its design emphasizes parallel processing of two streams to enhance security margins over MD5's sequential approach. In comparison to the SHA family, RIPEMD-160 offers comparable output length to but superior practical security, as has been compromised with collisions achievable at $2^{63} complexity via differential cryptanalysis by et al. in , leading to its . SHA-256, with a 256-bit output, achieves a higher of $2^{128}, making it preferable for modern applications demanding long-term security. RIPEMD-160's 160-bit design thus provides $2^{80} security, which is adequate for many uses but inferior to SHA-256 or SHA-512's $2^{256} level against brute-force threats. Performance-wise, RIPEMD-160 is slower than on 32-bit systems, requiring about 1013 cycles per 512-bit block compared to 's 837 cycles on a processor, due to its dual-line computation. However, it outperforms on the same architecture, as 's 64-bit word operations incur overhead on 32-bit hardware, often doubling or tripling cycle counts relative to 32-bit-optimized hashes like RIPEMD-160. As of , RIPEMD-160 remains in adoption, notably for address generation alongside , while faces full phase-out by 2030 per NIST guidelines, and / variants are recommended for new deployments.
Hash FunctionCollision ResistanceRelative Speed (32-bit Systems)Adoption Status (2025)
Broken ($2^{39})FastestDeprecated
RIPEMD-160$2^{80}Medium (1013 cycles/block)Legacy (e.g., )
Broken ($2^{63})Faster than RIPEMD-160 (837 cycles/block)Deprecated (phase-out by 2030)
SHA-256$2^{128}FastWidely used
SHA-512$2^{256}Slow (64-bit overhead)Widely used

Applications

Cryptographic Uses

RIPEMD-160 has been employed in schemes for , particularly within the OpenPGP for creating and verifying signatures on electronic messages and files. Although newer implementations discourage its use for new signatures due to security considerations, it remains supported for compatibility in tools like GnuPG that handle legacy PGP keys. In infrastructures, RIPEMD-160 has been utilized to data before signing with algorithms such as , appearing in some end-entity certificates for in public key infrastructures. A prominent application of RIPEMD-160 persists in technology, where it is integral to 's address generation process. To derive a address, the public key is first hashed with SHA-256, and the resulting 256-bit digest is then processed through RIPEMD-160 to produce a 160-bit , which is further encoded with versioning and checksums to form the final . This double-hashing approach enhances security by combining the strengths of both functions, and RIPEMD-160's role remains unchanged in 's protocol as of 2025, supporting the network's ongoing operations. In other protocols, RIPEMD-160 provides support for cryptographic operations, such as in older SSL/TLS implementations where it could be selected as a for handshake integrity, though modern configurations favor SHA-based alternatives via providers like OpenSSL's legacy module. For file integrity verification, systems leverage RIPEMD-160 through command-line tools like OpenSSL's dgst -ripemd160 to compute checksums, ensuring data has not been altered during transfer or storage. However, its adoption has declined broadly following NIST recommendations to prioritize the and families for approved cryptographic s, citing their standardized security profiles over non-FIPS options like RIPEMD-160. RIPEMD-160 finds continued niche applications in resource-constrained environments, such as smart cards and embedded systems, where its 160-bit output provides adequate security for legacy-compatible while minimizing computational overhead compared to longer-hash alternatives. These deployments often pair it with accelerators optimized for its structure, suitable for scenarios like verification or device signing where 160-bit suffices.

Software Implementations

RIPEMD-160 implementations are available in several prominent open-source cryptographic libraries, enabling integration into various software projects for legacy or specific use cases. The library provides support for RIPEMD-160 through its EVP_MD , though in version 3.0 and later, it is included in the legacy provider rather than the default one, requiring explicit loading for use. Bouncy Castle, a widely used library for and .NET environments, offers comprehensive RIPEMD-160 support via its provider classes, including digest computation and integration with JCA/JCE standards. Similarly, the Crypto++ C++ library includes a dedicated RIPEMD160 class for efficient message digest computation, supporting 160-bit output as part of its suite. Language-specific support for RIPEMD-160 is provided through standard or extended cryptographic APIs, often relying on underlying libraries like those mentioned above. In , the hashlib module allows creation of RIPEMD-160 hashes using hashlib.new('ripemd160'), though availability depends on the system's configuration, as newer versions (3.0+) may disable it by default. For example:
python
import hashlib
data = b"Hello, RIPEMD-160!"
h = hashlib.new('ripemd160')
h.update(data)
digest = h.hexdigest()
print(digest)  # Outputs the 40-character hex digest
In , RIPEMD-160 can be accessed via java.security.MessageDigest.getInstance("RIPEMD160"), but this typically requires a third-party provider like Bouncy Castle, as it is not natively included in the JDK. A basic usage example with Bouncy Castle registered is:
java
import java.security.MessageDigest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.Security;

Security.addProvider(new BouncyCastleProvider());
MessageDigest md = MessageDigest.getInstance("RIPEMD160");
md.update("Hello, RIPEMD-160!".getBytes());
byte[] digest = md.digest();
System.out.println(bytesToHex(digest));  // Custom method to convert to hex
Hardware support for RIPEMD remains limited and primarily software-based, with partial implementations in some smart card processors for legacy cryptographic operations, such as those based on ARM SecurCore architectures. Unlike SHA family hashes, RIPEMD-160 lacks dedicated hardware instructions in modern Intel or ARM CPUs, relying on general-purpose processing or FPGA-based accelerators for high-performance needs. Due to evolving standards, RIPEMD-160 is considered a legacy and has been deprecated in many modern cryptographic libraries and tools, though it persists for compatibility with systems like address generation.

References

  1. [1]
    The RIPEMD-160 page
    Feb 5, 2025 · RIPEMD-160 is a 160-bit cryptographic hash function, designed by Hans Dobbertin, Antoon Bosselaers, and Bart Preneel. It is intended to be used ...
  2. [2]
    A secure and efficient cryptographic hash function based on ...
    The first RIPEMD hash function was introduced in 1992 under the European RIPE (RACE Integrity Primitives Evaluation) project. It produces 128 bit hash value.
  3. [3]
    [PDF] RIPEMD-160: A Strengthened Version of RIPEMD*
    Apr 18, 1996 · Bosselaers on two (out of three) rounds of. MD4 [3] and on the compression function of MD5 [4] were the first indications that some structural ...
  4. [4]
    Meet-in-the-Middle Preimage Attacks on Double-Branch Hash ...
    We first present meet-in-the-middle preimage attacks on RIPEMD, whose output length is 128 bits and internal state size is 256 bits. With this internal state ...
  5. [5]
    Race Integrity Primitives Evaluation (RIPE): A status report
    Jan 1, 2001 · Early in 1989, a call for integrity primitives was disseminated within the cryptographic community by the RIPE consortium.
  6. [6]
    [PDF] Race Integrity Primitives Evaluation (RIPE): A status report.
    Early in 1989, a call for integrity primitives was disseminated within the crypto- graphic community by the RIPE consortium. The goal of this consortium is ...
  7. [7]
    RIPEMD | SpringerLink
    Jun 1, 2005 · RIPEMD. In: Bosselaers, A., Preneel, B. (eds) Integrity Primitives for Secure Information Systems. Lecture Notes in Computer Science, vol ...
  8. [8]
    Integrity Primitives for Secure Information Systems - SpringerLink
    Integrity Primitives for Secure Information Systems. Final RIPE Report of ... RIPEMD. Antoon Bosselaers, Bart Preneel. Pages 69-111. RIPE-MAC. Antoon ...
  9. [9]
    [PDF] Cryptanalysis of Full RIPEMD-128 - Cryptology ePrint Archive
    In this article, we proposed a new cryptanalysis technique for RIPEMD-128, that led to a collision attack on the full compression function as well as a ...
  10. [10]
    RIPEMD-160: A strengthened version of RIPEMD - ResearchGate
    Aug 7, 2025 · Dobbertin, A. Bosselaers, and B. Preneel on the basis of MD4 in 1996; and the secure hash standard (SHA) [9] designed by the National Security ...
  11. [11]
    ISO/IEC 10118-3:2004 - Dedicated hash-functions
    ISO/IEC 10118-3:2004 specifies the following seven dedicated hash-functions, i.e. specially-designed hash-functions: the first hash-function (RIPEMD-160) in ...
  12. [12]
    RIPEMD-160: A strengthened version of RIPEMD - SpringerLink
    Cryptographic hash functions are an important tool in cryptography for applications such as digital fingerprinting of messages, message authentication, ...Missing: original | Show results with:original
  13. [13]
    None
    ### Summary of RIPEMD-160 Constants, Rotations, Initialization Vectors, and Padding
  14. [14]
    Improved Cryptanalysis of Reduced RIPEMD-160 - SpringerLink
    In addition, we also describe a 36-step semi-free-start collision attack which starts from the first step. Download to read the full chapter text ...
  15. [15]
    (Second) Preimage Attacks on Step-Reduced RIPEMD/RIPEMD ...
    A pseudo-preimage and second preimage attacks on the first 47 steps of RIPEMD (full version: 48 steps) are proposed with complexities of 2119 and 2124.5 ...
  16. [16]
    [PDF] Musings on the Wang et al. MD5 Collision - Cryptology ePrint Archive
    Our results indicate that the differential can be used for: – a collision attack with complexity 242.2;. – a second pre-image attack with complexity 2285;. – a ...
  17. [17]
    Notes on the Wang et al. $2^{63}$ SHA-1 Differential Path
    Although advances in SHA-1 cryptanalysis have been made since the 2005 announcement of a 2 63 attack by Wang et al., the details of the attack have not yet been ...
  18. [18]
    [PDF] Improved Semi-Free-Start Collision Attacks on RIPEMD-160 (Full ...
    In this paper, we improve the current (SFS) collision attack framework in two aspects. First, we enhance the automatic search model to identify differential.
  19. [19]
    RFC 9580: OpenPGP
    Implementations MUST NOT generate signatures with MD5, SHA-1, or RIPEMD-160. Implementations MUST NOT use MD5, SHA-1, or RIPEMD-160 as a hash function in an ...<|separator|>
  20. [20]
    C Digital Signature Profiles (Normative) - DICOM
    The creator of a digital signature shall use one of the RIPEMD-160, MD5, SHA-1 or SHA-2 family (SHA256, SHA384, SHA512) of hashing functions to generate a ...Missing: PGP | Show results with:PGP
  21. [21]
    X.509 Style Guide - School of Computer Science
    ... certificates will be signed with RSA/MD5, however published end-entity certs have appeared which are signed with RSA/RIPEMD-160. These aren't invalid, they ...
  22. [22]
    Analysis of RIPEMD-160: New Collision Attacks and Finding ...
    In this paper, we propose a new collision attack on RIPEMD-160 that can reach up to 36 rounds with time complexity 2 64.5.
  23. [23]
    Creating RIPEMD-160 Checksums in Linux - Jt Spratley
    Aug 29, 2020 · Use the command `openssl dgst -rmd160 file` to create RIPEMD-160 checksums in Linux. RMD160 is the only option with openssl.Missing: integrity | Show results with:integrity
  24. [24]
    Hash Functions | CSRC - NIST Computer Security Resource Center
    NIST recommends that federal agencies transition away from SHA-1 for all applications as soon as possible. Federal agencies should use SHA-2 or SHA-3 as an ...
  25. [25]
    ASIC-hardware-focused comparison for hash functions MD5 ...
    Aug 7, 2025 · The hash functions MD5, RIPEMD-160, and SHA-1/224/256/384/512 were implemented by using a 0.13-μm CMOS standard cell library with two ...
  26. [26]
    EVP_MD-RIPEMD160 - OpenSSL Documentation
    This implementation is available in both the default and legacy providers, and is identified with any of the names "RIPEMD-160", "RIPEMD160", "RIPEMD" and " ...Missing: TLS | Show results with:TLS
  27. [27]
    RIPEMD160 missing in default provider although security is not ...
    Feb 17, 2022 · It might be possible to duplicate RIPEMD160 in the default provider & the legacy provider which circumvents the compatibility concern. React ...
  28. [28]
    RIPEMD160 (Bouncy Castle Library 1.81 API Specification)
    Method Summary. Methods inherited from class java.lang.Object. clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait.Missing: .net
  29. [29]
    Specification & Interoperability - Bouncycastle
    Bouncy Castle Java supports the following formats and standards. ... RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320. SHA-1. FIPS PUB 180-4. FIPS PUB ...
  30. [30]
    RIPEMD160 Class Reference - Crypto++ Library 8.9
    RIPEMD-160 message digest. Digest size is 160-bits. See also: RIPEMD-160. Since: Crypto++ 2.1. Definition at line 17 ...
  31. [31]
    Hashing and Validation of RIPEMD-160 in Java Implementation
    RIPEMD-160 is a cryptographic hash function designed to produce a 160-bit hash value from input data of any size. Developed in the mid-1990s as an ...
  32. [32]
    SecurCore smartcard processors - Arm Developer
    SecurCore processors are for smartcards and tamper-resistant circuits. SC100 supports ARM/Thumb, SC200 adds Jazelle, and SC300 is based on Cortex-M3.Missing: RIPEMD Intel
  33. [33]
    (PDF) On the hardware implementation of RIPEMD processor
    The proposed processor FPGA implementation achieves high speed hashing up to 2 Gbps. Comparing with previous published hardware designs, the proposed processor ...Missing: Intel ARM
  34. [34]
    Why is RIPEMD160 not avaible in VeraCrypt anymore?
    Dec 15, 2017 · RIPEMD-160 is an old algorithm that has been deprecated by all major security solutions in favor of more modern algorithms.Missing: Chrome | Show results with:Chrome
  35. [35]
    proposal: x/crypto: support for ripemd160 · Issue #64196 · golang/go
    Nov 15, 2023 · So I call on Hyrum's law to ask if anyone else feels like the hash function deprecation should not be in a bijective relation with the crypto ...<|control11|><|separator|>