retter, upholds cryptography
It's a collection of hash functions, ciphers, tools, libraries, and materials related to cryptography.
NOTE: If you see mistakes or would like to expand the list. Feel free to contribute to this project! It is still in the process of creating...
About
The purpose of this project is to promote and develop cryptography.
It includes the collection of known tools, libraries, articles, materials, hash functions, and ciphers.
Also it's a place for people who share an interest in cryptography and want to discuss about it.
If you invent a new hash function or ciphers, or write an paper related to cryptography just add it here. That is the right place. See contributing section in README.md
Further reading:
- Definitions: Basic concepts.
- List of hash functions: The set of all known functions.
- Cyclic redundancy checks: List of cyclic redundancy checks functions.
- Checksums: List of checksums functions.
- Non-cryptographic hash functions: List of non-cryptographic hash functions.
- Cryptographic hash functions: List of cryptographic hash functions.
- Message authentication codes: List of message authentication code functions.
- List of ciphers: The set of all known ciphers.
- Symmetric key algorithms: List of symmetric key algorithms.
- Asymmetric key algorithms: List of asymmetric key algorithms.
- Tools: Collection of cryptanalysis apparatus.
- Libraries: List of security/crypto libraries.
- Articles: Pages related to cryptography.
- Contributing: Explanation of how you can join the project.
Definitions
Hash functions
Hash function - any function that can be used to map digital data of arbitrary size to digital data of fixed size, with slight differences in input data producing very big differences in output data.
Used in: Database, Filters, Hash tables, Unique identifiers, Passwords, Diff utilities, and File system
Avalanche - a measure of how the output bits change based on each input bit. Ideally each input bit will affect each output bit with 1/2 probability.
Realistically, many hash functions do not achieve perfect avalanche and are still useable for many sets of keys.
Ciphers
Cipher - an algorithm for performing encryption or decryption—a series of well-defined steps that can be followed as a procedure.
There are 2 types of key algorithms: Symmetric and Asymmetric
Block cipher - a deterministic algorithm operating on fixed-length groups of bits, called blocks, with an unvarying transformation that is specified by a symmetric key.
It can also be continuous stream of symbols. (stream ciphers)
List of hash functions
This is a list of hash functions, including cyclic redundancy checks, checksum functions, and cryptographic hash functions.
For each function are included: description, implementations and materials.
Cyclic redundancy checks
A cyclic redundancy check (often CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data.
Name | Length | Type | Published | Authors | Information |
---|---|---|---|---|---|
CRC | 8, 16, 32, 64 bits | cyclic codes | 1961 | W. Wesley Peterson | more [⬆] |
BSD | 16 bits | CRC | -- | -- | more [⬆] |
SYSV | 16 bits | CRC | -- | -- | more [⬆] |
Checksums
A checksum or hash sum is a small-size datum from an arbitrary block of digital data for the purpose of detecting errors which may have been introduced during its transmission or storage.
Name | Length | Type | Published | Authors | Information |
---|---|---|---|---|---|
Luhn algorithm | 4 bits | sum | 1954 | Hans Peter Luhn | more [⬆] |
Verhoeff algorithm | 4 bits | sum | 1969 | Jacobus Verhoeff | more [⬆] |
Fletcher | 4, 8, 16, 32 bits | sum | 1970 | John Gould Fletcher | more [⬆] |
Adler-32 | 32 bits | sum | 1995 | Mark Adler | more [⬆] |
Damm algorithm | 1 decimal digit | Quasigroup operation | 2004 | H. Michael Damm | more [⬆] |
Non-cryptographic hash functions
A non-cryptographic hash function is a hash function which is sometimes possible to invert.
Name | Length | Type | Published | Authors | Information |
---|---|---|---|---|---|
Zobrist hashing | variable | xor | 1969 | Albert Lindsey Zobrist | more [⬆] |
Pearson hashing | 8 bits | xor/table | 1990 | Peter K. Pearson | more [⬆] |
FNV | 32, 64, 128, 256, 512, or 1024 bits | xor/product or product/xor | 1991 | Glenn Fowler, Landon Curt Noll, Phong Vo | more [⬆] |
Jenkins | 32 or 64 bits | xor/addition | 1997 | Bob Jenkins | more [⬆] |
MurmurHash | 32, 64, or 128 bits | product/rotation | 2008 | Austin Appleby | more [⬆] |
CityHash | 64, 128, or 256 bits | product/rotation | 2010 | Geoff Pike, Jyrki Alakuijala | more [⬆] |
xxHash | 32, 64 bits | product/rotation | 2012 | Yann Collet | more [⬆] |
Cryptographic hash functions
A cryptographic hash function is a hash function which is considered practically impossible to invert, that is, to recreate the input data from its hash value alone.
Name | Length | Type | Published | Authors | Information |
---|---|---|---|---|---|
MD2 | 128 bits | hash | 1989 | Ronald Rivest | more [⬆] |
Snefru | 128 or 256 bits | hash | 1990 | Ralph Merkle | more [⬆] |
MD4 | 128 bits | hash | 1990 | Ronald Rivest | more [⬆] |
HAVAL | 128 to 256 bits | hash | 1992 | Yuliang Zheng, Josef Pieprzyk, Jennifer Seberry | more [⬆] |
MD5 | 128 bits | Merkle-Damgård construction | 1992 | Ronald Rivest | more [⬆] |
GOST | 256 bits | hash | 1994 | FAPSI | more [⬆] |
SHA-1 | 160 bits | Merkle-Damgård construction | 1995 | National Security Agency | more [⬆] |
Tiger | 192 bits | Merkle-Damgård construction | 1996 | Ross Anderson, Eli Biham | more [⬆] |
RIPEMD | 128, 160, 256, 320 bits | hash | 1996 | Hans Dobbertin, Antoon Bosselaers and Bart Preneel | more [⬆] |
Whirlpool | 512 bits | Miyaguchi-Preneel | 2000 | Vincent Rijmen, Paulo S. L. M. Barreto | more [⬆] |
SHA-2 | 224, 256, 384, or 512 bits | Merkle-Damgård construction | 2001 | National Security Agency | more [⬆] |
HAS-160 | 160 bits | hash | 2002 | Korean | more [⬆] |
FSB | 160 to 512 bits | hash | 2003 | Daniel Augot, Matthieu Finiasz, Nicolas Sendrier | more [⬆] |
RadioGatún | Up to 1216 bits | hash | 2006 | Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche | more [⬆] |
BLAKE | 256 or 512 bits | HAIFA structure | 2008 | Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan | more [⬆] |
ECOH | 224 to 512 bits | hash | 2008 | Daniel R. L. Brown, Matt Campagna, Rene Struik | more [⬆] |
Grøstl | 256 to 512 bits | hash | 2008 | Praveen Gauravaram, Lars Knudsen, Krystian Matusiewicz, Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen | more [⬆] |
JH | 512 bits | hash | 2008 | Hongjun Wu | more [⬆] |
MD6 | 128 bits | Merkle tree NLFSR | 2008 | Ronald Rivest, Benjamin Agre, Dan Bailey, Sarah Cheng, Christopher Crutchfield, Yevgeniy Dodis, Kermin Fleming, Asif Khan, Jayant Krishnamurthy, Yuncheng Lin, Leo Reyzin, Emily Shen, Jim Sukha, Eran Tromer, Yiqun Lisa Yin | more [⬆] |
SWIFFT | 512 bits | hash | 2008 | Vadim Lyubashevsky, Daniele Micciancio, Chris Peikert, Alon Rosen | more [⬆] |
Spectral Hash | 512 bits | Wide Pipe Merkle-Damgård construction | 2009 | Gokay Saldamlı, Cevahir Demirkıran, Megan Maguire, Carl Minden, Jacob Topper, Alex Troesch, Cody Walker, Çetin Kaya Koç | more [⬆] |
Skein | arbitrary | Unique Block Iteration | 2010 | Bruce Schneier, Niels Ferguson | more [⬆] |
SHA-3 (Keccak) | arbitrary | Sponge function | 2012 | Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche | more [⬆] |
SipHash | 64 bits | non-collision-resistant PRF | 2012 | Jean-Philippe Aumasson, Daniel J. Bernstein | more [⬆] |
Message authentication codes
A message authentication code (often MAC) is a short piece of information used to authenticate a message and to provide integrity and authenticity assurances on the message.
Name | Published | Authors | Information |
---|---|---|---|
HMAC | 1996 | Mihir Bellare, Ran Canetti, Hugo Krawczyk | specification |
UMAC | 1999 | John Black, Shai Halevi, Hugo Krawczyk, Ted Krovetz, Phillip Rogaway | specification |
OMAC | 2002 | Tetsu Iwata, Kaoru Kurosawa | specification |
CMAC | 2003 | John Black, Phillip Rogaway | specification |
VMAC | 2007 | Ted Krovetz, Wei Dai | specification |
List of ciphers
Symmetric key algorithms
Not ready yet...
Asymmetric key algorithms
Not ready yet...
Tools
Smhasher
Test your hash functions.
- Authors - Smhasher team
- Download - https://code.google.com/p/smhasher/
SMHasher is a test suite designed to test the distribution, collision, and performance properties of non-cryptographic hash functions - it aims to be the "DieHarder" of hash testing, and does a pretty good job of finding flaws with a number of popular hashes.
Sage S-box MILP toolkit
Extension of the Toolkit for Counting Active S-boxes using Mixed-Integer Linear Programming (MILP).
- Authors - Laura Winnen
- Download - http://www.ecrypt.eu.org/tools/uploads/sage_sbox_milp.zip
This toolkit can be used to prove the security of cryptographic ciphers against linear and differential cryptanalysis. Includes the implementation in Sage for AES, small AES, Present, Led, mCrypton, Klein and Enocoro.
KeccakTools
A set of documented C++ classes to help analyze Keccak-f.
- Authors - Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche
- Download - http://keccak.noekeon.org/KeccakTools-3.3.zip
- Documentation - http://keccak.noekeon.org/KeccakTools-doc/
KeccakTools is a set of C++ classes aimed at helping analyze the sponge function family Keccak.
S-box MILP toolkit
Toolkit for Counting Active S-boxes using Mixed-Integer Linear Programming (MILP).
- Authors - Nicky Mouha
- Download - http://www.ecrypt.eu.org/tools/uploads/sbox-milp.zip
- Documentation - http://www.cosic.esat.kuleuven.be/publications/article-2080.pdf
This toolkit can be used to prove the security of cryptographic ciphers against linear and differential cryptanalysis.
Hashclash
Framework for MD5 & SHA-1 Differential Path Construction and Chosen-Prefix Collisions for MD5.
- Authors - Marc Stevens
- Download - http://code.google.com/p/hashclash/
This framework contains tools for the constructions of differential paths for MD5 and SHA-1, including chosen-prefix collisions for MD5.
ARX Toolkit
The ARX toolkit is a set of tools to study ARX ciphers and hash functions.
- Authors - Gaëtan Leurent
- Download - http://www.di.ens.fr/~leurent/arxtools.html
The ARX toolkit was presented at the SHA-3 conference in March 2012 in Washington, DC.
Information Set Decoding
A tool for information set decoding.
- Authors - ISD team
- Download - https://github.com/isd-dev/isd
This library, written in C++, is reasonably efficient at finding low weight codewords of a linear code using information set decoding.
S-function Toolkit
Toolkit for the differential cryptanalysis of S-functions.
- Authors - Nicky Mouha, Vesselin Velichkov, Christophe De Cannière, Bart Preneel
- Download - http://www.ecrypt.eu.org/tools/uploads/s-function_toolkit_v2.zip
- Documentation - http://www.cosic.esat.kuleuven.be/publications/article-1473.pdf
An increasing number of cryptographic primitives use operations such as addition modulo 2^n, multiplication by a constant and bitwise Boolean functions as a source of non-linearity.
CryptLogVer
Toolkit for SAT-based attacks on cryptographic primitives.
- Authors - Paweł Morawiecki, Marian Srebrny, Mateusz Srebrny
- Download - http://www.pawelmorawiecki.pl/cryptlogver
CryptLogVer is a toolkit that can be used to mount SAT-based attacks on cryptographic primitives (block ciphers, stream ciphers, hash functions).
Linear Hull Cryptanalysis of PRESENT
A tool to compute linear hulls for PRESENT.
- Authors - Bingsheng Zhang
- Download - http://www.ecrypt.eu.org/tools/uploads/present-linear-hull.zip
This tool computes linear hulls for the original PRESENT cipher. It confirms and even improves on the predicted bias (and the corresponding attack complexities) of conventional linear relations based on a single linear trail.
Automated Algebraic Cryptanalysis
A simple tool for the automatic algebraic cryptanalysis of a large array of stream- and block ciphers.
- Authors - Paul Stankovski
- Download - http://www.eit.lth.se/index.php?id=260&uhpuid=dhs.pas&hpuid=584&L=1
A simple tool for the automatic algebraic cryptanalysis of a large array of stream- and block ciphers. Three tests have been implemented and the best results have led to continued work on a computational cluster.
SYMAES
A Fully Symbolic Polynomial System Generator for AES-128.
- Authors - Vesselin Velichkov, Vincent Rijmen, Bart Preneel
- Download - http://www.ecrypt.eu.org/tools/uploads/symaes-v1.1.tgz
SYMAES is a software tool that generates a system of polynomials in GF(2), corresponding to the round transformation and key schedule of the block cipher AES-128.
Tools for Algebraic Cryptanalysis
Tools for the algebraic cryptanalysis of cryptographic primitives.
- Authors - Martin Albrecht
- Download - https://bitbucket.org/malb/research-snippets/src
Algebraic cryptanalysis of cryptographic primitives such as block ciphers, stream ciphers and hash functions usually proceeds in two steps.
Grain of Salt
An automated way to test stream ciphers through SAT solvers.
- Authors - Mate Soos
- Download - http://planete.inrialpes.fr/~soos/GrainOfSalt/
Grain of Salt is a tool developed to automatically test stream ciphers against standard SAT solver-based attacks. The tool takes as input a set of configuration options and the definition of each filter and feedback function of the stream cipher.
Sage
Free open-source mathematics software system, also containing many modules for cryptography.
- Authors - William A. Stein
- Download - http://www.sagemath.org/
- Documentation - http://www.sagemath.org/doc/reference/cryptography.html
Sage is a free open-source mathematics software system licensed under the GPL. It combines the power of many existing open-source packages into a common Python-based interface. It also contains modules to perform both basic and more advanced computations in cryptography and cryptanalysis.
Libraries
- C
- libsodium: a modern and easy-to-use crypto library.
- AESLib: arduino Library for AES Encryption (source based on avr-crypto-lib).
- crypto-algorithms: basic implementations of standard cryptography algorithms, like AES and SHA-1.
- sha3sum: SHA-3 and Keccak checksum utility.
- RHash: great utility for computing hash sums.
- cryptlib: an open source cross-platform software security toolkit library.
- Nettle: a cryptographic library that is designed to fit easily in more or less any context.
- C++
- C#
- Data.HashFunction: Common interface library to non-cryptographic hash functions with numerous implementations.
- Python
- pycrypto: Widely used package containing various cryptographic modules and functions
- Py2 Standard Library Cryptographic Services: A set of utilities included with Python 2. Attention! Some modules are deprecated (
md5
andsha
). - Py3 Standard Library Cryptographic Services: A set of utilities included with Python 3. Some API changes (
md5
andsha
were moved inside thehashlib
module).
- Javascript
- jsHashes: pure JavaScript implementation of the most extended hash algorithms.
- javascript-crypto-library: provides web developers with an extensive and efficient set of cryptographic functions.
- cryptojs: provide standard and secure cryptographic algorithms for NodeJS.
- hmacsha1.js: a JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined.
- Clojure
- pandect: fast and easy-to-use Message Digest, Checksum and HMAC library for Clojure.
- ActionScript
- as3corelib: an ActionScript 3 Library that contains a number of classes and utilities.
- Ruby
- BozoCrack: a silly & effective MD5 cracker in Ruby.
- Objective-c
- RNCryptor: CCCryptor (AES encryption) wrappers for iOS and Mac.
- CocoaSecurity: encrypt/Decrypt: AES. Hash: MD5, SHA(SHA1, SHA224, SHA256, SHA384, SHA512). Encode/Decode: Base64, Hex.
- Rust
- rust-crypto: a (mostly) pure-Rust implementation of various cryptographic algorithms.
- Java
- Bouncy Castle: a collection of APIs used in cryptography. It includes APIs for both the Java and the C# programming languages.
Articles
- Cryptology for Beginners
- Differential Cryptanalysis of MD5
- Cryptography - Wikibooks
- Universal One-Way Hash Functions and their Cryptographic Applications
- Bloom filters, fast and simple
- Lecture Notes on Cryptography
- Cryptograpy Lecture Notes
- Non-Cryptographic Hash Function Zoo
- What is the difference between a Hash Function and a Cryptographic Hash Function?
- Whats the difference between MAC vs hash
- Dr. Dobbs article
- Attacks on Hash Functions and Applications
- Which hashing algorithm is best for uniqueness and speed?
Contributing
Please feel free to contribute to this project! Pull requests and feature requests welcome! ✌️
New hash function
Anyone can create a function. You can add to this list a function that is not yours but it already exists. To make your own, remember that the following conditions must be met.
- Unique name - That which does not exist yet.
- Informations - Date of creation, structure, first published, series, etc.
- Authors - Everyone who worked on it.
- Cryptanalysis - The disadvantages, advantages.
- Materials - Your research, documents.
- Implementations - Example implementation (C, C++).
- Pseudocode - Outline of the algorithm.
Add it to the appropriate section in the README.md and create a new directory as have other functions. (ex. Pearson hashing)
Thanks
- Dongxia Bai, Tsinghua University in China
- Mike Sharov (@msharov)
- Others who have written tons of material!!!