Fact-checked by Grok 2 weeks ago

scrypt

Scrypt is a password-based (KDF) designed by in to derive one or more secret keys from a password or , with a focus on resisting large-scale brute-force attacks through its sequential memory-hard construction. This approach combines computational intensity with high memory requirements, making it significantly more expensive for attackers to parallelize computations using specialized hardware such as GPUs or compared to traditional KDFs. At a high level, scrypt operates in three main steps: it first applies (using HMAC-SHA256) to the input and an optional to generate a pseudo-random B consisting of p blocks each of 128 * r bytes; this is then processed by the core sequential memory-hard function SMix, which relies on the Salsa20/8 to perform a large number of memory-intensive block mixes requiring N iterations and N * r * 128 bytes of ; finally, another invocation on the output of SMix produces the derived key DK of the desired length. The algorithm is tunable via three key parameters: N (a power-of-2 integer >= 2 representing the primary cost factor for both and ), r (block size, typically 1 to 8), and p (parallelization factor, allowing up to p independent SMix computations to balance trade-offs between time, space, and parallelism). These parameters enable implementers to adjust levels based on available resources, with recommended defaults like N=2^14, r=8, and p=1 providing a balance suitable for many applications. Scrypt's memory-hard nature, proven sequential under the random oracle model for its SMix component, provides strong protection against time-memory trade-offs and hardware optimizations that plagued earlier functions like (which requires only ~100 bytes of storage for high iteration counts) and (limited to ~4 KB). For instance, cracking a scrypt-protected with N=2^14 can be estimated at over 20,000 times more costly in hardware than equivalent setups, assuming attacker optimizations. Standardized in RFC 7914 by the IETF in August 2016, scrypt is implemented in libraries such as and is recommended for hashing and key derivation in secure systems, though modern alternatives like are sometimes preferred for even stronger memory-hard guarantees.

History and Development

Origins and Motivation

Scrypt was developed in 2009 by as a component of the Tarsnap online backup service, specifically to enable secure passphrase protection for user key files in response to frequent customer requests for enhanced password-based security. At the time, Tarsnap required robust protection against unauthorized access to encrypted backups, but existing cryptographic tools fell short in defending against evolving threats from specialized hardware. The primary motivation stemmed from the vulnerabilities of prior password-based key derivation functions, such as and , which were primarily and consumed minimal , making them susceptible to acceleration by graphics processing units (GPUs) or application-specific integrated circuits (). These functions allowed attackers to parallelize brute-force attacks efficiently, drastically reducing the computational cost of over time despite increased iteration counts; for instance, hardware advancements could lower the relative expense of dictionary attacks on low- passwords, which studies estimated averaged around 42 bits of . sought to address this by designing a function that imposed significant requirements, rendering large-scale parallelization economically prohibitive for custom implementations. Central to scrypt's conception was the concept of a "memory-hard" , where the memory usage scales nearly linearly with the number of operations, thereby elevating the physical and financial barriers for attackers relying on or GPU clusters. To further counter , Percival emphasized sequential memory access patterns, ensuring that computations could not be easily divided across multiple processors without incurring asymptotic cost penalties, as algorithms would still demand substantial memory per . Early evaluations, including benchmarks on contemporary like a 2.5 GHz processor, confirmed scrypt's viability for interactive use (around 64 ms) while highlighting its resistance to hardware-optimized attacks compared to predecessors.

Publication and Initial Adoption

The was formally published in May 2009 through a paper titled "Stronger Key Derivation via Sequential Memory-Hard Functions" authored by and presented at the BSDCan conference. The paper introduced scrypt as a memory-hard designed to enhance resistance against hardware-accelerated attacks on password-based . Following its publication, scrypt was promptly integrated into the Tarsnap online backup service, for which it was originally developed to support passphrase-protected key files. This implementation demonstrated scrypt's practical viability in a production environment shortly after its announcement, with source code released under a BSD license to facilitate broader use. Early adoption extended to open-source projects, notably its inclusion in the libsodium cryptography library with the release of version 1.0.0 in September 2014, providing developers with a portable and audited implementation. Concurrently, the cryptography community engaged in initial discussions and standardization efforts, exemplified by the first IETF Internet Draft "The scrypt Password-Based Key Derivation Function" (draft-josefsson-scrypt-kdf-00) published in September 2012 by Colin Percival and Simon Josefsson, which sought to formalize scrypt's parameters and usage for interoperability.

Design Principles

Core Objectives

Scrypt was designed primarily to derive secret keys from passwords in a manner that imposes high computational and memory costs on potential attackers attempting brute-force searches, while remaining feasible for legitimate users performing single evaluations, such as during or . This asymmetry aims to elevate the expense of exhaustive , particularly when attackers deploy specialized hardware like or GPUs, by making the process prohibitively resource-intensive without similarly burdening everyday cryptographic operations. A key goal of scrypt is to resist optimizations afforded by parallel hardware architectures, which have historically accelerated attacks on traditional key derivation functions like or . By mandating large, sequential memory allocations—targeting practical implementations that require on the order of 1 GiB or more—scrypt forces attackers to either incur massive costs in custom hardware design or settle for slower, less efficient general-purpose computing. This design leverages the abundance of in modern systems to create a barrier that scales poorly with parallelism, as doubling the computational effort can quadratically increase hardware costs under ideal conditions. Beyond its specific mechanics, scrypt seeks to advance the broader class of sequential memory-hard functions as a to the growing dominance of hardware-accelerated cracking in password security. Originating from the need to secure passphrase-protected backups in the Tarsnap , it promotes functions that are provably memory-hard in models like the , ensuring that attackers cannot economically parallelize the derivation process to undermine password-based systems.

Relation to Other Key Derivation Functions

Scrypt differs from , defined in 2898, primarily in its incorporation of a memory-hard component to deter hardware-accelerated attacks. relies on repeated iterations of a pseudorandom function, such as , to increase computational cost, making it CPU-intensive but easy to parallelize on GPUs or due to its constant memory requirements. In contrast, scrypt builds upon a similar iterative structure but introduces the ROMix function, which enforces sequential memory access over a large , raising the barrier for parallelization and custom hardware by tying cost to both time and memory. Compared to , which adapts the Blowfish cipher's key setup to create a hashing process with adjustable cost via exponential iterations, scrypt extends this resistance beyond computation alone. Bcrypt's design focuses on maximizing CPU cycles through an expensive , limiting optimizations like pipelining, but it remains vulnerable to ASIC acceleration since it demands minimal memory. Scrypt's memory requirement, parameterized by N (the number of hash iterations in ROMix), amplifies the economic cost of specialized hardware, as fabricating large on-chip memory for becomes prohibitively expensive relative to off-the-shelf . Scrypt served as a precursor to more advanced memory-hard functions like , the winner of the 2015 , which further refines resistance to both GPU parallelization and side-channel attacks. enhances scrypt's memory-hardness by achieving higher memory-filling rates and better support for multi-core parallelism through tunable lanes, while variants like Argon2i employ data-independent addressing to mitigate timing leaks from cache behavior. According to guidelines, while scrypt remains a viable option when is unavailable, Argon2id is now preferred for new systems due to its superior protection against side-channel vulnerabilities. Scrypt strikes a balance among time, memory, and parallelism costs via parameters N, r, and p, allowing implementers to scale difficulty without excessive resource demands on legitimate users, though this flexibility introduces trade-offs. For instance, increasing parallelism (p) boosts throughput on multi-core systems but can reduce the sequential barrier's effectiveness against if not tuned carefully. Additionally, scrypt's reliance on sequential access in ROMix makes it susceptible to cache-timing attacks in poorly implemented versions, where attackers exploit patterns to reconstruct passwords more efficiently than .

Algorithm Details

Parameters and Setup

The scrypt key derivation function requires several configurable parameters to balance computational , usage, and parallelism in its execution. The primary parameters are N, the CPU/ ; r, the ; and p, the parallelization . N must be a positive greater than 1 and typically a power of 2 to facilitate efficient array sizing, with values like N = 2^{14} (16384) serving as a baseline for moderate levels. This primarily controls the length of the sequential memory-hard computation chain, making it the dominant in resisting hardware-optimized attacks. r is a positive that influences the of blocks processed in each iteration, typically set to 8 to provide a good trade-off between CPU and . Meanwhile, p is also a positive that determines the degree of parallelism, allowing the function to leverage multiple processing units; it is commonly set to 1 for single-threaded environments but can be increased (e.g., to 16) for multi-core systems without proportionally increasing per thread. In setup, scrypt takes as inputs a passphrase P (of arbitrary length), a S (at least 8 bytes, randomly generated for each use), and the derived length dkLen (in octets, 1 ≤ dkLen ≤ $2^{32} - 1). These are combined with the parameters N, r, and p to produce the output derived DK of exactly dkLen bytes, suitable for use in symmetric encryption or other . The S ensures that identical passphrases yield different keys, mitigating attacks, while dkLen allows flexibility in output size based on the application's needs. Memory consumption in scrypt is approximated by the formula $128 \times [r](/page/R) \times [N](/page/N+) \times [p](/page/P′′) bytes, where the [N](/page/N+) term drives the sequential access requirements that enforce memory-hardness. For instance, with [N](/page/N+) = 2^{14}, [r](/page/R) = 8, and [p](/page/P′′) = 1, this yields about 16 of usage, scaling linearly with [p](/page/P′′) for parallel instances. Guidelines for parameter selection emphasize tuning based on available resources and security goals, prioritizing increases in [N](/page/N+) over [r](/page/R) or [p](/page/P′′) to maximize resistance to ASIC or GPU attacks. A conservative choice for servers is [N](/page/N+) = 2^{18} (approximately 256 with [r](/page/R) = 8, [p](/page/P′′) = 1), balancing protection against brute-force attempts with denial-of-service risks from excessive resource demands on the host system. Higher values, such as [N](/page/N+) = 2^{20}, are recommended for offline derivations where latency is less critical, but implementers must validate compatibility and monitor for potential vulnerabilities when allowing client-specified parameters.

Computational Steps

The scrypt key derivation function takes as inputs a passphrase P, a salt S, and parameters N (a power of 2 greater than 1 and less than $2^{128 \cdot r / 8}), r (block size factor), p (parallelization factor, at most ((2^{32}-1) \cdot 32) / (128 \cdot r)), and dkLen (derived key length in octets, 1 ≤ dkLen ≤ $2^{32} - 1). The algorithm proceeds in three main phases: initialization of a salt-augmented block via PBKDF2, application of the memory-hard mixing function to each parallel block, and final key derivation via PBKDF2. First, compute the initial block B of length p \cdot 128 \cdot r octets using PBKDF2 with HMAC-SHA256: B = \text{PBKDF2-HMAC-SHA256}(P, S, 1, p \cdot 128 \cdot r). This block B consists of p sub-blocks, each of size $128 \cdot r octets. Next, for each integer i from 0 to p-1, apply the ROMix function to the i-th sub-block B_i: B_i = \text{scryptROMix}(r, B_i, N). The ROMix function is the core memory-hard component, designed to require sequential access to a large array. It operates as follows on an input block B of $128 \cdot r octets:
X = B
V = array of N blocks, each 128*r octets
for i = 0 to N-1 do
    V[i] = X
    X = scryptBlockMix(X)
end for
for i = 0 to N-1 do
    j = Integerify(X) mod N
    T = X XOR V[j]
    X = scryptBlockMix(T)
end for
B' = X
Here, \text{Integerify}(X) interprets the last 64 octets of X (specifically, the final 64-octet block when r=1) as a little-endian integer. This double-loop structure enforces O(N) sequential memory accesses, each involving a large XOR and mixing operation. The \text{scryptBlockMix} subroutine mixes a $128 \cdot r-octet input B, treated as $2r consecutive 64-octet blocks, to produce a $128 \cdot r-octet output. It ensures dependency between blocks via the Salsa20/8 core:
X = B[2r-1]  // Last 64-octet block
Y = array of 2r blocks of 64 octets
for i = 0 to 2r-1 do
    T = X XOR B[i]
    X = Salsa20/8(T)
    Y[i] = X
end for
B' = (Y[0], Y[2], ..., Y[2r-2], Y[1], Y[3], ..., Y[2r-1])
This interleaves even and odd-indexed outputs, creating a chain of dependencies that resists parallelization. After all p sub-blocks are processed, concatenate them to form the updated B. Finally, derive the output key DK of length dkLen octets: DK = \text{[PBKDF2-HMAC-SHA256](/page/PBKDF2)}(P, B, 1, dkLen). This integrates the computationally expensive mixing into a standard framework, with the total cost parameterized by p \cdot N \cdot 2 \cdot r iterations of the Salsa20/8 core across all parallel paths. The Salsa20/8 core, used in BlockMix, is a fixed 8-round version of the Salsa20 core, operating on a 64-octet (16 × 32-bit word) input block. It performs quarter-round operations in column and row rounds, with left rotations: for words a, b, c, d, \begin{align*} &b \leftarrow (b + a) \bmod 2^{32}, \quad d \leftarrow (d \xor b) \ll 16, \\ &c \leftarrow (c + d) \bmod 2^{32}, \quad b \leftarrow (b \xor c) \ll 12, \\ &a \leftarrow (a + b) \bmod 2^{32}, \quad d \leftarrow (d \xor a) \ll 8, \\ &c \leftarrow (c + d) \bmod 2^{32}, \quad b \leftarrow (b \xor c) \ll 7. \end{align*} Four double rounds (each consisting of four column quarter-rounds followed by four row quarter-rounds) are applied, followed by adding the input words to the output words. This provides a fast, secure mixing primitive resistant to certain hardware optimizations.

Applications

In Cryptocurrencies

Scrypt was first implemented as a proof-of-work (PoW) hashing algorithm in , launched on October 7, 2011, by Charlie Lee, a former engineer. Designed as a lighter alternative to , Litecoin replaced Bitcoin's SHA-256 algorithm with scrypt to promote more decentralized mining by favoring memory-intensive computations that could be performed efficiently on standard CPU and GPU hardware rather than specialized . This choice aimed to lower , enabling broader participation in network security without requiring expensive, custom-built equipment. The adoption of scrypt extended to other cryptocurrencies, including , which launched in December 2013 and utilized the algorithm for its PoW consensus to achieve faster block times and accessibility similar to . Verge, introduced in 2014 as DogeCoinDark, incorporated scrypt as one of its five supported multi-algorithm hashing options to enhance mining inclusivity and features. Additional altcoins like Feathercoin and Gridcoin initially embraced scrypt in their early implementations, leveraging its memory-hard properties to resist centralization, though both later switched to other algorithms (NeoScrypt for Feathercoin in 2014 and for Gridcoin in 2014). To further combat ASIC proliferation, variants such as scrypt-N emerged in projects like Garlicoin (launched January 2018), which briefly used a dynamic N parameter for ASIC resistance before switching to in May 2018. In the mining process, serves as the core applied to the block header in scrypt-based PoW systems, incorporating sequential through its SMix subroutine, which performs iterations of a double Salsa20/8 core function to produce the final digest. This -hard initially deterred ASIC , sustaining CPU/GPU dominance until mid-2014, when the first scrypt ASICs, such as ZeusMiner's models, shipped and began shifting power toward specialized . Subsequent advancements, including Innosilicon's A4 series in 2017, accelerated this trend. While scrypt's implementation broadened early mining participation and network resilience in cryptocurrencies like and , the eventual rise of efficient led to mining centralization among large-scale operators, mirroring Bitcoin's challenges. This evolution prompted ongoing debates and some post-2020 explorations of algorithm migrations in lesser-known scrypt chains to restore , though major networks like have retained the core scrypt mechanism as of 2025.

In Password-Based Systems

Scrypt plays a crucial role in password-based systems by deriving secure keys from user passwords for and purposes, leveraging its memory-hard design to thwart hardware-accelerated brute-force attacks. This makes it suitable for applications requiring robust protection against offline attacks on stored credentials or derived keys. In secure storage scenarios, scrypt is applied to generate keys for protecting sensitive data, such as filesystems, , and backups. A prominent example is the Tarsnap online backup system, where scrypt derives keys from passphrases to encrypt backup archives and secure key files, ensuring that even if data is compromised, decryption remains computationally infeasible without the original password. This early adoption in Tarsnap demonstrated scrypt's effectiveness for practical, high-security storage needs. Scrypt is integrated into various authentication frameworks and tools for key stretching during password verification. For instance, Spring Security supports scrypt for hashing passwords in Java-based applications, enhancing protection in web and enterprise authentication systems. Additionally, the Node.js crypto module implements scrypt to derive keys from passwords, commonly used for securing API keys or encrypting application data in server-side environments. Best practices for deploying scrypt in these systems emphasize the use of unique, random salts for each or key instance to mitigate precomputed attacks. Recommended parameters for interactive logins, balancing security with usability, include N=2^{14}, r=8, and p=1, which typically yield a time of around 100 ms on modern hardware, deterring rapid guessing attempts without excessively delaying legitimate users. Due to scrypt's resource-intensive nature, particularly its high memory and CPU demands during verification, it is advisable to avoid its use in high-traffic servers without complementary measures like rate limiting on authentication attempts, as unchecked requests could enable denial-of-service attacks by overwhelming system resources.

Security Considerations

Advantages and Memory-Hardness

Scrypt's primary advantage lies in its memory-hard design, which significantly raises the cost of large-scale attacks by requiring substantial random access memory (RAM) alongside computational effort. The core component enabling this is the ROMix function, which performs sequential memory accesses over a large array of size N, forcing an attacker to allocate O(N) space to compute the function efficiently. Under the random oracle model, ROMix is proven to be sequential memory-hard, meaning that parallelizing the computation across M processors still requires O(N²/M(N)) total time, thereby limiting the benefits of hardware acceleration and increasing the overall cost to approximately N times the CPU time compared to non-memory-hard alternatives like PBKDF2. This memory-hardness provides strong resistance to attacks using graphics processing units (GPUs) or application-specific integrated circuits (), as it demands large amounts of per processing core, which constrains parallelism and elevates hardware expenses. For instance, in the context of , which adopted scrypt in 2011, the first commercial scrypt ASICs did not ship until 2014, delaying the development of specialized hardware by over two years due to the challenges of integrating high-bandwidth memory. Additional benefits include scrypt's tunable parameters (N for memory cost, r and p for block size and parallelism), which allow system designers to adjust the computational and memory demands to counter evolving threats, such as offline dictionary attacks, by making each hash attempt prohibitively expensive in both time and resources. Furthermore, scrypt builds upon the framework by incorporating SMix between two PBKDF2 invocations, facilitating seamless integration with existing password-based key derivation infrastructures without requiring wholesale system overhauls. Quantitatively, with N=2²⁰, r=8, and p=1—common parameters for sensitive storage—scrypt demands approximately 1 GiB of per invocation, rendering single hashes on commodity feasible but scaling poorly for attackers; for example, brute-forcing a 10-character password under these settings was estimated in to cost $175 trillion in for a one-year attack, far exceeding alternatives like at $8.3 billion. On modern commodity systems, such a takes around 4 seconds, with the memory requirement dominating costs over pure CPU cycles, which would be negligible without the RAM constraint.

Potential Attacks and Mitigations

Scrypt, being a data-dependent -hard function, is susceptible to side-channel attacks that exploit implementation-specific behaviors, such as cache-timing attacks. from 2017 demonstrated a practical cache-timing attack on scrypt using the PRIME+PROBE technique to observe access patterns during SMix evaluation to infer outputs from the initial step, potentially leaking information about the or key derivation. To mitigate these vulnerabilities, implementations should employ constant-time accesses where possible, though the data-dependent nature of scrypt makes full resistance challenging; libraries like libsodium incorporate constant-time comparisons for steps in hashing to prevent timing leaks during checks. Additionally, techniques such as input blinding—randomizing intermediate values to obscure patterns—can be applied in custom implementations, though they increase computational overhead. High parameter values in scrypt, particularly large or , pose denial-of-service () risks on servers by enabling attackers to trigger excessive through repeated derivations. For server-side applications, it is recommended to set =1 to limit parallelism and reduce amplification, combined with moderate (e.g., 2^14 for 16 MB usage) to balance security against brute-force attacks without overwhelming system resources. Complementary mitigations include rate-limiting login attempts and integrating mechanisms to deter automated abuse, ensuring that legitimate users are not impacted by resource exhaustion. The initial design of scrypt aimed to resist specialized hardware through hardness, but by 2014, application-specific integrated circuits () had overcome this barrier, with the first commercial scrypt ASICs like the ZeusMiner shipping and enabling orders-of-magnitude efficiency gains over general-purpose hardware. Theoretical analyses have further revealed time- trade-off attacks on scrypt, allowing adversaries to reduce required to O(N^{1/2}) at the cost of increased computation time by recomputing dependent blocks instead of storing the full array, as formalized in early work on -hard function . These developments highlight scrypt's vulnerability to optimized attackers who can trade space for time in parallel environments. Contemporary security guidance considers scrypt somewhat outdated for new deployments, with the Password Storage Cheat Sheet prioritizing over scrypt due to the latter's superior resistance to GPU/ASIC parallelization and side-channel attacks via data-independent addressing (type-2 memory hardness). For systems still using scrypt, hybrid approaches combining it with or gradual migration to are advised to enhance overall resilience against evolving threats.

Implementations

Software Libraries and Tools

Several core software libraries provide implementations of the scrypt (KDF), ensuring cross-platform compatibility and security features like constant-time operations to mitigate timing attacks. Libsodium, a popular library for , includes a scrypt implementation that is cross-platform and designed with constant-time characteristics as part of its overall secure coding practices, available since version 1.0.0 released in 2014. , another foundational library, added scrypt support in version 1.1.0 (2016) via the EVP_KDF-SCRYPT interface, implementing the memory-hard design as specified in RFC 7914, though it remains available in subsequent versions without deprecation. Language-specific libraries build on these foundations or provide native bindings for broader accessibility. In Python, the cryptography library exposes scrypt through its hazmat.primitives.kdf module, allowing developers to derive keys with tunable parameters like memory cost (N), block size (r), and parallelism (p) for password storage. Java's Bouncy Castle cryptography API includes a dedicated SCrypt class in its org.bouncycastle.crypto.generators package, supporting the full parameter set for secure key generation compliant with RFC 7914. For JavaScript environments, including browsers, the noble-hashes library (@noble/hashes) offers a pure-JS, audited scrypt implementation that is lightweight and tree-shakeable, ensuring side-channel resistance without native dependencies. Scrypt implementations adhere to established standards for and . RFC 7914, published by the IETF in 2016, formalizes scrypt as a password-based KDF, defining its parameters and output format to derive secret keys from passwords while emphasizing memory hardness. Test vectors from Colin Percival's original 2009 paper provide essential benchmarks for validating implementations, including specific inputs for passwords, salts, and parameters yielding predictable 64-byte outputs. Supporting tools facilitate testing, benchmarking, and practical use of scrypt. , an advanced password recovery suite, includes optimized scrypt support (hash mode 8900) for cracking and performance evaluation on CPUs and GPUs, aiding security audits by simulating attack scenarios. The scrypt command-line utility, distributed by Tarsnap, enables direct key derivation and file encryption via CLI, using scrypt with AES-256-CTR and HMAC-SHA-256 for straightforward password-based operations.

Hardware Adaptations and Performance

Hardware adaptations for the scrypt have primarily focused on application-specific integrated circuits () and field-programmable gate arrays (FPGAs), driven by the demands of where scrypt's memory-hardness initially aimed to resist specialized hardware but ultimately spurred innovation in efficient implementations. The first commercial scrypt emerged in 2014, with ZeusMiner announcing the model as the initial shipping device, delivering 72-80 MH/s at a cost of around $9,999 per unit. By contrast, as of 2025, modern scrypt , such as the Antminer L9 released in 2024, achieve 16 GH/s while consuming 3360 W of power, representing a substantial leap in hash rate and integration for large-scale operations. FPGAs played a key role in early scrypt before widespread ASIC adoption, offering customizable logic that balanced access with computational efficiency better than general-purpose GPUs in the pre-2014 era. Open-source implementations, such as the FPGA-Litecoin-Miner project targeting devices, utilized on-chip RAM to handle scrypt's Salsa20/8 core and block mixing, enabling portable designs across FPGAs with at least 1 Mbit of . These FPGA cores, often deployed in rigs, provided hash rates in the range of hundreds of KH/s per board while consuming tens of watts, making them viable for hobbyist setups until dominated due to superior scaling. Performance benchmarks for scrypt vary significantly by hardware and parameter settings, with often serving as the primary constraint rather than raw compute power. On CPUs like the i7-8700K, scrypt (N=1024, r=1, p=1) yields approximately 27 H/s, limited by sequential memory operations. GPUs, such as the 4090, can achieve higher throughput for key derivation tasks; in benchmarks with N=16384, r=8, p=1, it reaches about 7,126 H/s, though this drops for mining-optimized parameters due to the algorithm's design favoring parallel memory access over GPU strengths. System-level scaling for scrypt is further bottlenecked by , with memory constraints limiting effective hash rates in multi-threaded scenarios due to shared bandwidth contention. Key challenges in scrypt hardware implementations stem from its memory-hard requirements, which demand high bandwidth for the ROMix function's random access patterns, complicating designs for both and general . achieve power efficiencies of 0.2-0.36 J/, as seen in the Antminer L7's 0.36 J/ rating, far outperforming CPUs at approximately 3-10 J/ due to optimized memory hierarchies. However, this efficiency comes at the cost of flexibility, and scrypt's demands make it rare for resource-constrained environments like mobile or devices, where limited (often <1 ) and budgets (<1 ) render full implementations impractical without severe performance degradation or simplified parameters.

References

  1. [1]
    [PDF] stronger key derivation via sequential memory-hard functions colin ...
    Password-based key derivation functions are used for two primary purposes: First, to hash passwords so that an attacker who gains access to a password file does ...
  2. [2]
    EVP_KDF-SCRYPT - OpenSSL Documentation
    The EVP_KDF-SCRYPT algorithm implements the scrypt password-based key derivation function, as described in RFC 7914. ... In the original paper of Colin Percival ( ...
  3. [3]
    On the use of a life - daemonology.net
    Sep 20, 2020 · In 2009, having had many users ask for passphrase-protected Tarsnap key files, and having determined that the current state of the art of ...Missing: origins | Show results with:origins
  4. [4]
    The scrypt key derivation function and encryption utility - Tarsnap
    The scrypt key derivation function was originally developed for use in the Tarsnap online backup system and is designed to be far more secure against hardware ...Missing: origins | Show results with:origins
  5. [5]
    [PDF] scrypt: A new key derivation function - Tarsnap
    May 9, 2009 · Using ASICs, it is possible to pack many copies of a cryptographic circuit onto a single piece of silicon. Moore's law: Every 18–24 months, ...
  6. [6]
  7. [7]
    [PDF] BSDCan 2009: The Technical BSD Conference - USENIX
    Percival's paper describing scrypt in more detail (including proofs), the full estimate comparison, and a cross-platform. BSD-licensed implementation of ...
  8. [8]
    The scrypt key derivation function - daemonology.net
    May 9, 2009 · The scrypt key derivation function. One of the commonly requested features for Tarsnap is passphrase-protected key files.Missing: implementation | Show results with:implementation
  9. [9]
    Tarsnap/scrypt: The scrypt key derivation function was ... - GitHub
    The scrypt key derivation function was originally developed for use in the Tarsnap online backup system and is designed to be far more secure against hardware ...
  10. [10]
    The Scrypt function | Libsodium documentation - GitBook
    Jul 11, 2025 · Sodium provides an implementation of the scrypt password hashing function. However, unless you have specific reasons to use scrypt, you should ...Missing: integration | Show results with:integration
  11. [11]
    RFC 2898: Password-Based Cryptography Specification, Version 2.0
    PBKDF2 is recommended for new applications; PBKDF1 is included only for compatibility with existing applications, and is not recommended for new applications. A ...
  12. [12]
    [PDF] A Future-Adaptable Password Scheme - USENIX
    This paper discusses ways of building systems in which password security keeps up with hardware speeds. We present two algorithms with adaptable cost| ...
  13. [13]
    RFC 9106: Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications
    ### Summary of Argon2 Improvements and Features from RFC 9106
  14. [14]
    Password Storage - OWASP Cheat Sheet Series
    scrypt is a password-based key derivation function created by Colin Percival. While Argon2id should be the best choice for password hashing, scrypt should be ...<|control11|><|separator|>
  15. [15]
    RFC 7914: The scrypt Password-Based Key Derivation Function
    ### Summary of scrypt Parameters and Process from RFC 7914
  16. [16]
    scrypt - OpenSSL Documentation
    The EVP_PKEY_SCRYPT algorithm implements the scrypt password based key derivation function, as described in RFC 7914. It is memory-hard.
  17. [17]
  18. [18]
    Who Is Charlie Lee? - Investopedia
    Initially, Lee's choice of Scrypt did allow Litecoin to be mined on CPUs, but that advantage proved to be short-lived. When mining software and application- ...
  19. [19]
    Scrypt Mining Algorithm Overview - Komodo Platform
    Jan 11, 2025 · Scrypt is a hashing algorithm used on certain Proof of Work blockchains. It was first introduced with the launch of Tenebrix (TBX) in 2011.
  20. [20]
    Litecoin: All About This Cryptocurrency - Coinhouse
    Litecoin uses the Scrypt algorithm for mining, promoting broader participation by allowing mining with more accessible equipment (CPU/GPU) compared to Bitcoin's ...
  21. [21]
    Dogecoin | Digital Assets - Bullish
    Oct 9, 2025 · Dogecoin uses a scrypt hash function for its proof-of-work consensus mechanism. The scrypt algorithm was specifically designed to make it ...
  22. [22]
    FAQ - Mining - VergeCurrency.com
    Verge is one of the few cryptocurrencies that support five different hashing algorithms; Namely, Scrypt, X17, Lyra2rev2, myr-groestl and blake2s.
  23. [23]
    Scrypt-adaptive-N (ASIC resistant) - consensus - GitBook
    Aug 31, 2018 · Scrypt-N relies on the “Adaptive N-Factor” in which N is the memory required to complete new hashing functions. The idea is that N (memory ...Missing: 2018 dynamic
  24. [24]
    [PDF] Scrypt Mining with ASICs - David Watkins
    Scrypt Call-Flow. Figure 2 Scrypt algorithm call flow. Begins with a Sha-256 hash. Then performs a ROM Mix, Block Mix, and 1024 iterations of Salsa20/8, twice.
  25. [25]
    ZeusMiner Announces The First Scrypt ASIC Miners To Ship ...
    Apr 28, 2014 · ZeusMiner has announced the first Scrypt ASICs in the world with a confirmed shipping date prior to the 31st of May 2014.Missing: Innosilicon A4
  26. [26]
    Innosilicon A4+ Review - Scrypt ASIC Miner Confirmed?
    Sep 22, 2017 · As for today, the first tests of the A4+ prototype gave some nice results for Litecoin mining. The average hashrate is 550Mhs at 750W. According ...
  27. [27]
    Scrypt ASIC Race Intensifies, KnCMiner Scores $2 Million in Preorders
    Mar 20, 2014 · KnCMiner announced its first scrypt miner yesterday and today it's reporting that it already has $2m worth of pre-orders.
  28. [28]
    Litecoin (LTC): Strengths, Weaknesses, Risks | CryptoEQ
    One of Litecoin's initial selling points was ASIC resistance, but it has since abandoned that goal. It now exhibits a similar hashrate distribution as ...
  29. [29]
    Password Storage :: Spring Security
    {scrypt}$e0801$8bWJaSu2IKSn9Z9kM+TPXfOc/9bdYSrN1oD9qfVThWEwdRTnO7re7Ei+ ... With the above configuration, when a password manager navigates to /.well ...Password Storage History · Password Storage Format · Getting Started Experience
  30. [30]
    Crypto | Node.js v25.1.0 Documentation
    The node:crypto module provides cryptographic functionality including wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.
  31. [31]
    Why You Shouldn't be Using BCrypt and Scrypt - Ben Prime
    Jan 13, 2019 · Scrypt is designed so as to rely on high memory requirements as opposed to high requirements on computational power.
  32. [32]
    The scrypt parameters - Filippo Valsorda
    Oct 4, 2017 · In this post I summed up how each parameter impacts the whole scrypt algorithm. Finally, I had a look at what parameters you should use in 2017.Missing: rp | Show results with:rp
  33. [33]
    [PDF] Attacking scrypt via Cache Timing Side-Channel
    called scrypt, and an overview of cache timing attacks. A cache timing attack against scrypt is introduced and described in detail. Finally, additional work ...
  34. [34]
    [PDF] Libsodium v1.0.12 and v1.0.13 Security Assessment
    Libsodium provides a similar API specifically for scrypt, which is a widely deployed safe alternative to Argon2 via crypto_pwhash_scryptsalsa208sha256() for ...
  35. [35]
    What We Do in the /etc/shadow – Cryptography with Passwords
    Dec 29, 2022 · You're incentivized to have shorter server-side run times to avoid DoS ... scrypt with N = 32768, r = 8, p = 1 and a random salt at least ...
  36. [36]
    [PDF] Tradeoff Cryptanalysis of Memory-Hard Functions
    So far there have been only a few attempts to develop tradeoff attacks on memory-hard functions. A simple tradeoff for scrypt has been known in folklore and was ...
  37. [37]
    Key derivation functions — Cryptography 47.0.0.dev1 documentation
    Scrypt is a KDF designed for password storage by Colin Percival to be resistant against hardware-assisted attackers by having a tunable memory cost. It is ...
  38. [38]
    SCrypt (Bouncy Castle Library 1.81 API Specification)
    Implementation of the scrypt a password-based key derivation function. Scrypt was created by Colin Percival and is specified in RFC 7914.
  39. [39]
    example_hashes [hashcat wiki]
    You can test your commands against example hashes. Unless otherwise noted, the password for all example hashes is hashcat.
  40. [40]
    L7 Specifications - BITMAIN Support
    Jan 18, 2022 · L7 Specifications ; Version, L7 ; Model, 240-L ; Crypto Algorithm/Coins, Scrypt ; Hashrate, MH/s, 9500 ± 3% ; power on wall@25℃, Watt, 3420± 10%.
  41. [41]
    A litecoin scrypt miner implemented with FPGA on-chip memory.
    The scrypt algorithm is implemented using on-chip FPGA RAM, so should be portable to any FPGA large enough to support 1024kBit of RAM (512kBit with ...
  42. [42]
    Is any benchmark of INTEL cpu s ? - Hashcat
    Mar 15, 2020 · Hello , i am intresting in buying of xeon for Scrypt hash. What can i expect from e5-2699v3 in Scrypt? My i7-8700k speed is ~27 h/s. Find.Missing: performance N=
  43. [43]
    Hashcat v6.2.6 benchmark on the Nvidia RTX 4090 - GitHub Gist
    Benchmark was run at stock clocks on an Asus Strix 4090. hashcat (v6.2.6) starting in benchmark mode. Benchmarking uses hand-optimized ...
  44. [44]
    Scrypt (Litecoin) memory / performance tradeoff
    Jan 27, 2014 · The key to speedup scrypt is parallelism, because the mining process is to find a valid nonce among the very large solution space. ... That's the ...
  45. [45]
    0.31 j/Mh - Miners efficiency and ROI - ASIC Miner Value
    Miners efficiency. Compare electrical efficiency on specific algorithms. Efficiency is the power used divided by the hashrate. Algorithm.
  46. [46]
    Scrypt Mining Algorithm: A Secure, Memory-Intensive Crypto Algorithm
    Scrypt is a proof-of-work algorithm designed to make mining more accessible. Learn how Scrypt ensures security and prevents mining centralization by being ...