Reference C implementation of Argon2, the memory-hard password hashing function that won the Password Hashing Competition.
Argon2 is a password-hashing function designed to be memory-hard, making it resistant to GPU and ASIC cracking attacks. It won the Password Hashing Competition (PHC) and is used for securely storing passwords, deriving keys, and other cryptographic applications. The project provides the reference C implementation, including libraries and a command-line tool.
Developers and system architects building secure authentication systems, password managers, or cryptographic applications that require robust password storage and key derivation.
It offers state-of-the-art security with tunable parameters, multiple variants for different threat models, and a well-vetted design as the PHC winner, ensuring reliability and resistance to modern attack vectors.
The password hash Argon2, winner of PHC
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Designed to maximize memory filling rate, making it highly resistant to GPU and ASIC brute-force attacks, as emphasized in the README's state-of-the-art description.
Offers Argon2i for side-channel resistance, Argon2d for GPU resistance, and Argon2id hybrid, allowing tailored security based on application needs, per the README's detailed explanations.
Configurable time cost, memory cost, and parallelism degree enable precise balancing of security and performance, evidenced by command-line options and API examples.
Provides both high-level simple hash functions and low-level contexts for advanced features like keyed hashing and secure memory clearing, as shown in the example C code.
Choosing optimal time, memory, and parallelism requires cryptographic knowledge to avoid weakening security or harming performance, with no default safe settings for all use cases.
Inherently memory-hard design means high RAM usage and slower hashing times, which can impact server load and scalability, as benchmarking in the README shows significant cycles.
The reference implementation is in C, requiring compilation and integration efforts that add complexity compared to drop-in libraries in higher-level languages, though bindings are listed.