blob: d644974e660984adc8e3448d65cfd7787661d382 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`hashlib` --- Secure hashes and message digests
2====================================================
3
4.. module:: hashlib
5 :synopsis: Secure hash and message digest algorithms.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Benjamin Peterson058e31e2009-01-16 03:54:08 +00007.. moduleauthor:: Gregory P. Smith <greg@krypto.org>
8.. sectionauthor:: Gregory P. Smith <greg@krypto.org>
Georg Brandl116aa622007-08-15 14:28:22 +00009
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/hashlib.py`
Georg Brandl116aa622007-08-15 14:28:22 +000011
Georg Brandl116aa622007-08-15 14:28:22 +000012.. index::
13 single: message digest, MD5
14 single: secure hash algorithm, SHA1, SHA224, SHA256, SHA384, SHA512
15
Zachary Ware4199bba2016-08-10 01:05:19 -050016.. testsetup::
17
18 import hashlib
19
20
Raymond Hettinger469271d2011-01-27 20:38:46 +000021--------------
22
Georg Brandl116aa622007-08-15 14:28:22 +000023This module implements a common interface to many different secure hash and
24message digest algorithms. Included are the FIPS secure hash algorithms SHA1,
25SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA's MD5
Georg Brandl67ced422007-09-06 14:09:10 +000026algorithm (defined in Internet :rfc:`1321`). The terms "secure hash" and
27"message digest" are interchangeable. Older algorithms were called message
28digests. The modern term is secure hash.
Georg Brandl116aa622007-08-15 14:28:22 +000029
Christian Heimesd5e2b6f2008-03-19 21:50:51 +000030.. note::
Georg Brandl6e94a302013-10-06 18:26:36 +020031
32 If you want the adler32 or crc32 hash functions, they are available in
Christian Heimesd5e2b6f2008-03-19 21:50:51 +000033 the :mod:`zlib` module.
34
Georg Brandl116aa622007-08-15 14:28:22 +000035.. warning::
36
Georg Brandl6e94a302013-10-06 18:26:36 +020037 Some algorithms have known hash collision weaknesses, refer to the "See
38 also" section at the end.
Georg Brandl116aa622007-08-15 14:28:22 +000039
Christian Heimese92ef132013-10-13 00:52:43 +020040
R David Murraycde1a062013-12-20 16:33:52 -050041.. _hash-algorithms:
42
Christian Heimese92ef132013-10-13 00:52:43 +020043Hash algorithms
44---------------
45
Georg Brandl116aa622007-08-15 14:28:22 +000046There is one constructor method named for each type of :dfn:`hash`. All return
Gregory P. Smith8907dcd2016-06-11 17:56:12 -070047a hash object with the same simple interface. For example: use :func:`sha256` to
48create a SHA-256 hash object. You can now feed this object with :term:`bytes-like
Serhiy Storchakae5ea1ab2016-05-18 13:54:54 +030049objects <bytes-like object>` (normally :class:`bytes`) using the :meth:`update` method.
Ezio Melottic228e962013-05-04 18:06:34 +030050At any point you can ask it for the :dfn:`digest` of the
Georg Brandl67ced422007-09-06 14:09:10 +000051concatenation of the data fed to it so far using the :meth:`digest` or
52:meth:`hexdigest` methods.
53
54.. note::
55
Benjamin Peterson9cb7bd22012-12-20 20:24:37 -060056 For better multithreading performance, the Python :term:`GIL` is released for
Jesus Cea5b22dd82013-10-04 04:20:37 +020057 data larger than 2047 bytes at object creation or on update.
Antoine Pitroubcd5cbe2009-01-08 21:17:16 +000058
59.. note::
60
Benjamin Petersonbd584d52012-12-20 20:22:47 -060061 Feeding string objects into :meth:`update` is not supported, as hashes work
Georg Brandl67ced422007-09-06 14:09:10 +000062 on bytes, not on characters.
Georg Brandl116aa622007-08-15 14:28:22 +000063
Thomas Wouters1b7f8912007-09-19 03:06:30 +000064.. index:: single: OpenSSL; (use in module hashlib)
Georg Brandl116aa622007-08-15 14:28:22 +000065
66Constructors for hash algorithms that are always present in this module are
Gregory P. Smith8907dcd2016-06-11 17:56:12 -070067:func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`,
Christian Heimes121b9482016-09-06 22:03:25 +020068:func:`sha512`, :func:`blake2b`, and :func:`blake2s`.
69:func:`md5` is normally available as well, though it
Christian Heimes7cad53e2019-09-13 02:30:00 +020070may be missing or blocked if you are using a rare "FIPS compliant" build of Python.
Gregory P. Smith8907dcd2016-06-11 17:56:12 -070071Additional algorithms may also be available depending upon the OpenSSL
Christian Heimes6fe2a752016-09-07 11:58:24 +020072library that Python uses on your platform. On most platforms the
73:func:`sha3_224`, :func:`sha3_256`, :func:`sha3_384`, :func:`sha3_512`,
74:func:`shake_128`, :func:`shake_256` are also available.
75
76.. versionadded:: 3.6
77 SHA3 (Keccak) and SHAKE constructors :func:`sha3_224`, :func:`sha3_256`,
78 :func:`sha3_384`, :func:`sha3_512`, :func:`shake_128`, :func:`shake_256`.
Christian Heimes4a0270d2012-10-06 02:23:36 +020079
Christian Heimes121b9482016-09-06 22:03:25 +020080.. versionadded:: 3.6
81 :func:`blake2b` and :func:`blake2s` were added.
82
Christian Heimes7cad53e2019-09-13 02:30:00 +020083.. versionchanged:: 3.9
84 All hashlib constructors take a keyword-only argument *usedforsecurity*
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +020085 with default value ``True``. A false value allows the use of insecure and
86 blocked hashing algorithms in restricted environments. ``False`` indicates
Christian Heimes7cad53e2019-09-13 02:30:00 +020087 that the hashing algorithm is not used in a security context, e.g. as a
88 non-cryptographic one-way compression function.
89
Christian Heimesd5b3f6b2020-05-16 22:27:06 +020090 Hashlib now uses SHA3 and SHAKE from OpenSSL 1.1.1 and newer.
91
Georg Brandl67ced422007-09-06 14:09:10 +000092For example, to obtain the digest of the byte string ``b'Nobody inspects the
93spammish repetition'``::
Georg Brandl116aa622007-08-15 14:28:22 +000094
95 >>> import hashlib
Gregory P. Smith8907dcd2016-06-11 17:56:12 -070096 >>> m = hashlib.sha256()
Georg Brandl67ced422007-09-06 14:09:10 +000097 >>> m.update(b"Nobody inspects")
98 >>> m.update(b" the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +000099 >>> m.digest()
Gregory P. Smith8907dcd2016-06-11 17:56:12 -0700100 b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000101 >>> m.digest_size
Gregory P. Smith8907dcd2016-06-11 17:56:12 -0700102 32
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000103 >>> m.block_size
104 64
Georg Brandl116aa622007-08-15 14:28:22 +0000105
Christian Heimesfe337bf2008-03-23 21:54:12 +0000106More condensed:
Georg Brandl116aa622007-08-15 14:28:22 +0000107
Georg Brandl67ced422007-09-06 14:09:10 +0000108 >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +0000109 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
Georg Brandl116aa622007-08-15 14:28:22 +0000110
Christian Heimes7cad53e2019-09-13 02:30:00 +0200111.. function:: new(name[, data], *, usedforsecurity=True)
Gregory P. Smith13b55292010-09-06 08:30:23 +0000112
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300113 Is a generic constructor that takes the string *name* of the desired
Gregory P. Smith13b55292010-09-06 08:30:23 +0000114 algorithm as its first parameter. It also exists to allow access to the
115 above listed hashes as well as any other algorithms that your OpenSSL
116 library may offer. The named constructors are much faster than :func:`new`
117 and should be preferred.
Georg Brandl116aa622007-08-15 14:28:22 +0000118
Christian Heimesfe337bf2008-03-23 21:54:12 +0000119Using :func:`new` with an algorithm provided by OpenSSL:
Georg Brandl116aa622007-08-15 14:28:22 +0000120
121 >>> h = hashlib.new('ripemd160')
Georg Brandl67ced422007-09-06 14:09:10 +0000122 >>> h.update(b"Nobody inspects the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +0000123 >>> h.hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +0000124 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Gregory P. Smith13b55292010-09-06 08:30:23 +0000126Hashlib provides the following constant attributes:
Gregory P. Smith86508cc2010-03-01 02:05:26 +0000127
Gregory P. Smith13b55292010-09-06 08:30:23 +0000128.. data:: algorithms_guaranteed
Gregory P. Smith86508cc2010-03-01 02:05:26 +0000129
Larry Hastings3732ed22014-03-15 21:13:56 -0700130 A set containing the names of the hash algorithms guaranteed to be supported
Gregory P. Smith7bfb4152016-06-11 18:02:13 -0700131 by this module on all platforms. Note that 'md5' is in this list despite
132 some upstream vendors offering an odd "FIPS compliant" Python build that
133 excludes it.
Gregory P. Smith13b55292010-09-06 08:30:23 +0000134
135 .. versionadded:: 3.2
136
137.. data:: algorithms_available
138
Larry Hastings3732ed22014-03-15 21:13:56 -0700139 A set containing the names of the hash algorithms that are available in the
140 running Python interpreter. These names will be recognized when passed to
141 :func:`new`. :attr:`algorithms_guaranteed` will always be a subset. The
142 same algorithm may appear multiple times in this set under different names
143 (thanks to OpenSSL).
Gregory P. Smith86508cc2010-03-01 02:05:26 +0000144
145 .. versionadded:: 3.2
146
Georg Brandl116aa622007-08-15 14:28:22 +0000147The following values are provided as constant attributes of the hash objects
148returned by the constructors:
149
150
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000151.. data:: hash.digest_size
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000153 The size of the resulting hash in bytes.
154
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000155.. data:: hash.block_size
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000156
157 The internal block size of the hash algorithm in bytes.
Georg Brandl116aa622007-08-15 14:28:22 +0000158
Jason R. Coombsb2aa6f42013-08-03 11:39:39 +0200159A hash object has the following attributes:
160
161.. attribute:: hash.name
162
163 The canonical name of this hash, always lowercase and always suitable as a
164 parameter to :func:`new` to create another hash of this type.
165
166 .. versionchanged:: 3.4
167 The name attribute has been present in CPython since its inception, but
168 until Python 3.4 was not formally specified, so may not exist on some
169 platforms.
170
Georg Brandl116aa622007-08-15 14:28:22 +0000171A hash object has the following methods:
172
173
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300174.. method:: hash.update(data)
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300176 Update the hash object with the :term:`bytes-like object`.
177 Repeated calls are equivalent to a single call with the
Georg Brandl67ced422007-09-06 14:09:10 +0000178 concatenation of all the arguments: ``m.update(a); m.update(b)`` is
179 equivalent to ``m.update(a+b)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Georg Brandl705d9d52009-05-05 09:29:50 +0000181 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +0000182 The Python GIL is released to allow other threads to run while hash
Jesus Cea5b22dd82013-10-04 04:20:37 +0200183 updates on data larger than 2047 bytes is taking place when using hash
Georg Brandl67b21b72010-08-17 15:07:14 +0000184 algorithms supplied by OpenSSL.
Gregory P. Smith3f61d612009-05-04 00:45:33 +0000185
Georg Brandl116aa622007-08-15 14:28:22 +0000186
187.. method:: hash.digest()
188
Georg Brandl67ced422007-09-06 14:09:10 +0000189 Return the digest of the data passed to the :meth:`update` method so far.
Senthil Kumaran627284c2010-12-30 07:07:58 +0000190 This is a bytes object of size :attr:`digest_size` which may contain bytes in
Georg Brandl67ced422007-09-06 14:09:10 +0000191 the whole range from 0 to 255.
Georg Brandl116aa622007-08-15 14:28:22 +0000192
193
194.. method:: hash.hexdigest()
195
Georg Brandl67ced422007-09-06 14:09:10 +0000196 Like :meth:`digest` except the digest is returned as a string object of
197 double length, containing only hexadecimal digits. This may be used to
198 exchange the value safely in email or other non-binary environments.
Georg Brandl116aa622007-08-15 14:28:22 +0000199
200
201.. method:: hash.copy()
202
203 Return a copy ("clone") of the hash object. This can be used to efficiently
Georg Brandl67ced422007-09-06 14:09:10 +0000204 compute the digests of data sharing a common initial substring.
Georg Brandl116aa622007-08-15 14:28:22 +0000205
206
Christian Heimes6fe2a752016-09-07 11:58:24 +0200207SHAKE variable length digests
208-----------------------------
209
210The :func:`shake_128` and :func:`shake_256` algorithms provide variable
211length digests with length_in_bits//2 up to 128 or 256 bits of security.
212As such, their digest methods require a length. Maximum length is not limited
213by the SHAKE algorithm.
214
215.. method:: shake.digest(length)
216
217 Return the digest of the data passed to the :meth:`update` method so far.
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300218 This is a bytes object of size *length* which may contain bytes in
Christian Heimes6fe2a752016-09-07 11:58:24 +0200219 the whole range from 0 to 255.
220
221
222.. method:: shake.hexdigest(length)
223
224 Like :meth:`digest` except the digest is returned as a string object of
225 double length, containing only hexadecimal digits. This may be used to
226 exchange the value safely in email or other non-binary environments.
227
228
Benjamin Petersonc402d8d2015-09-27 01:23:10 -0700229Key derivation
230--------------
Christian Heimese92ef132013-10-13 00:52:43 +0200231
232Key derivation and key stretching algorithms are designed for secure password
Benjamin Peterson0ccff4d2014-05-26 15:41:26 -0700233hashing. Naive algorithms such as ``sha1(password)`` are not resistant against
234brute-force attacks. A good password hashing function must be tunable, slow, and
Benjamin Peterson0d81d802014-05-26 15:42:29 -0700235include a `salt <https://en.wikipedia.org/wiki/Salt_%28cryptography%29>`_.
Christian Heimese92ef132013-10-13 00:52:43 +0200236
237
Martin Panterbc85e352016-02-22 09:21:49 +0000238.. function:: pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
Christian Heimese92ef132013-10-13 00:52:43 +0200239
240 The function provides PKCS#5 password-based key derivation function 2. It
241 uses HMAC as pseudorandom function.
242
Martin Panterbc85e352016-02-22 09:21:49 +0000243 The string *hash_name* is the desired name of the hash digest algorithm for
Christian Heimese92ef132013-10-13 00:52:43 +0200244 HMAC, e.g. 'sha1' or 'sha256'. *password* and *salt* are interpreted as
245 buffers of bytes. Applications and libraries should limit *password* to
Martin Panterbc85e352016-02-22 09:21:49 +0000246 a sensible length (e.g. 1024). *salt* should be about 16 or more bytes from
Christian Heimese92ef132013-10-13 00:52:43 +0200247 a proper source, e.g. :func:`os.urandom`.
248
Martin Panterbc85e352016-02-22 09:21:49 +0000249 The number of *iterations* should be chosen based on the hash algorithm and
250 computing power. As of 2013, at least 100,000 iterations of SHA-256 are
251 suggested.
Christian Heimese92ef132013-10-13 00:52:43 +0200252
253 *dklen* is the length of the derived key. If *dklen* is ``None`` then the
Martin Panterbc85e352016-02-22 09:21:49 +0000254 digest size of the hash algorithm *hash_name* is used, e.g. 64 for SHA-512.
Christian Heimese92ef132013-10-13 00:52:43 +0200255
Ville Skyttä959625b2018-09-11 04:07:19 +0300256 >>> import hashlib
Christian Heimese92ef132013-10-13 00:52:43 +0200257 >>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
Ville Skyttä959625b2018-09-11 04:07:19 +0300258 >>> dk.hex()
259 '0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'
Christian Heimese92ef132013-10-13 00:52:43 +0200260
261 .. versionadded:: 3.4
262
Benjamin Petersonf9ea5f32014-05-26 15:45:14 -0700263 .. note::
264
265 A fast implementation of *pbkdf2_hmac* is available with OpenSSL. The
266 Python implementation uses an inline version of :mod:`hmac`. It is about
267 three times slower and doesn't release the GIL.
Christian Heimese92ef132013-10-13 00:52:43 +0200268
Christian Heimes39093e92016-09-06 20:22:28 +0200269.. function:: scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)
270
271 The function provides scrypt password-based key derivation function as
272 defined in :rfc:`7914`.
273
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300274 *password* and *salt* must be :term:`bytes-like objects
275 <bytes-like object>`. Applications and libraries should limit *password*
276 to a sensible length (e.g. 1024). *salt* should be about 16 or more
277 bytes from a proper source, e.g. :func:`os.urandom`.
Christian Heimes39093e92016-09-06 20:22:28 +0200278
279 *n* is the CPU/Memory cost factor, *r* the block size, *p* parallelization
Victor Stinner8c663fd2017-11-08 14:44:44 -0800280 factor and *maxmem* limits memory (OpenSSL 1.1.0 defaults to 32 MiB).
Christian Heimes39093e92016-09-06 20:22:28 +0200281 *dklen* is the length of the derived key.
282
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400283 .. availability:: OpenSSL 1.1+.
Christian Heimes39093e92016-09-06 20:22:28 +0200284
285 .. versionadded:: 3.6
286
Christian Heimese92ef132013-10-13 00:52:43 +0200287
Christian Heimes121b9482016-09-06 22:03:25 +0200288BLAKE2
289------
290
INADA Naokie2f9e772017-01-13 19:29:58 +0900291.. sectionauthor:: Dmitry Chestnykh
292
293.. index::
294 single: blake2b, blake2s
295
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +0300296BLAKE2_ is a cryptographic hash function defined in :rfc:`7693` that comes in two
INADA Naokie2f9e772017-01-13 19:29:58 +0900297flavors:
298
299* **BLAKE2b**, optimized for 64-bit platforms and produces digests of any size
300 between 1 and 64 bytes,
301
302* **BLAKE2s**, optimized for 8- to 32-bit platforms and produces digests of any
303 size between 1 and 32 bytes.
304
305BLAKE2 supports **keyed mode** (a faster and simpler replacement for HMAC_),
306**salted hashing**, **personalization**, and **tree hashing**.
307
308Hash objects from this module follow the API of standard library's
309:mod:`hashlib` objects.
310
311
312Creating hash objects
313^^^^^^^^^^^^^^^^^^^^^
314
315New hash objects are created by calling constructor functions:
316
317
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300318.. function:: blake2b(data=b'', *, digest_size=64, key=b'', salt=b'', \
INADA Naokie2f9e772017-01-13 19:29:58 +0900319 person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0, \
Christian Heimes7cad53e2019-09-13 02:30:00 +0200320 node_depth=0, inner_size=0, last_node=False, \
321 usedforsecurity=True)
INADA Naokie2f9e772017-01-13 19:29:58 +0900322
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300323.. function:: blake2s(data=b'', *, digest_size=32, key=b'', salt=b'', \
INADA Naokie2f9e772017-01-13 19:29:58 +0900324 person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0, \
Christian Heimes7cad53e2019-09-13 02:30:00 +0200325 node_depth=0, inner_size=0, last_node=False, \
326 usedforsecurity=True)
INADA Naokie2f9e772017-01-13 19:29:58 +0900327
328
329These functions return the corresponding hash objects for calculating
330BLAKE2b or BLAKE2s. They optionally take these general parameters:
331
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300332* *data*: initial chunk of data to hash, which must be
333 :term:`bytes-like object`. It can be passed only as positional argument.
INADA Naokie2f9e772017-01-13 19:29:58 +0900334
335* *digest_size*: size of output digest in bytes.
336
337* *key*: key for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for
338 BLAKE2s).
339
340* *salt*: salt for randomized hashing (up to 16 bytes for BLAKE2b, up to 8
341 bytes for BLAKE2s).
342
343* *person*: personalization string (up to 16 bytes for BLAKE2b, up to 8 bytes
344 for BLAKE2s).
345
346The following table shows limits for general parameters (in bytes):
347
348======= =========== ======== ========= ===========
349Hash digest_size len(key) len(salt) len(person)
350======= =========== ======== ========= ===========
351BLAKE2b 64 64 16 16
352BLAKE2s 32 32 8 8
353======= =========== ======== ========= ===========
354
355.. note::
356
357 BLAKE2 specification defines constant lengths for salt and personalization
358 parameters, however, for convenience, this implementation accepts byte
359 strings of any size up to the specified length. If the length of the
360 parameter is less than specified, it is padded with zeros, thus, for
361 example, ``b'salt'`` and ``b'salt\x00'`` is the same value. (This is not
362 the case for *key*.)
363
364These sizes are available as module `constants`_ described below.
365
366Constructor functions also accept the following tree hashing parameters:
367
368* *fanout*: fanout (0 to 255, 0 if unlimited, 1 in sequential mode).
369
370* *depth*: maximal depth of tree (1 to 255, 255 if unlimited, 1 in
371 sequential mode).
372
373* *leaf_size*: maximal byte length of leaf (0 to 2**32-1, 0 if unlimited or in
374 sequential mode).
375
376* *node_offset*: node offset (0 to 2**64-1 for BLAKE2b, 0 to 2**48-1 for
377 BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode).
378
379* *node_depth*: node depth (0 to 255, 0 for leaves, or in sequential mode).
380
381* *inner_size*: inner digest size (0 to 64 for BLAKE2b, 0 to 32 for
382 BLAKE2s, 0 in sequential mode).
383
384* *last_node*: boolean indicating whether the processed node is the last
385 one (`False` for sequential mode).
386
387.. figure:: hashlib-blake2-tree.png
388 :alt: Explanation of tree mode parameters.
389
390See section 2.10 in `BLAKE2 specification
391<https://blake2.net/blake2_20130129.pdf>`_ for comprehensive review of tree
392hashing.
393
394
395Constants
396^^^^^^^^^
397
398.. data:: blake2b.SALT_SIZE
399.. data:: blake2s.SALT_SIZE
400
401Salt length (maximum length accepted by constructors).
402
403
404.. data:: blake2b.PERSON_SIZE
405.. data:: blake2s.PERSON_SIZE
406
407Personalization string length (maximum length accepted by constructors).
408
409
410.. data:: blake2b.MAX_KEY_SIZE
411.. data:: blake2s.MAX_KEY_SIZE
412
413Maximum key size.
414
415
416.. data:: blake2b.MAX_DIGEST_SIZE
417.. data:: blake2s.MAX_DIGEST_SIZE
418
419Maximum digest size that the hash function can output.
420
421
422Examples
423^^^^^^^^
424
425Simple hashing
426""""""""""""""
427
428To calculate hash of some data, you should first construct a hash object by
429calling the appropriate constructor function (:func:`blake2b` or
430:func:`blake2s`), then update it with the data by calling :meth:`update` on the
431object, and, finally, get the digest out of the object by calling
432:meth:`digest` (or :meth:`hexdigest` for hex-encoded string).
433
434 >>> from hashlib import blake2b
435 >>> h = blake2b()
436 >>> h.update(b'Hello world')
437 >>> h.hexdigest()
438 '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
439
440
441As a shortcut, you can pass the first chunk of data to update directly to the
Serhiy Storchakaf1d36d82018-07-31 09:50:16 +0300442constructor as the positional argument:
INADA Naokie2f9e772017-01-13 19:29:58 +0900443
444 >>> from hashlib import blake2b
445 >>> blake2b(b'Hello world').hexdigest()
446 '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
447
448You can call :meth:`hash.update` as many times as you need to iteratively
449update the hash:
450
451 >>> from hashlib import blake2b
452 >>> items = [b'Hello', b' ', b'world']
453 >>> h = blake2b()
454 >>> for item in items:
455 ... h.update(item)
456 >>> h.hexdigest()
457 '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
458
459
460Using different digest sizes
461""""""""""""""""""""""""""""
462
463BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and up to 32
464bytes for BLAKE2s. For example, to replace SHA-1 with BLAKE2b without changing
465the size of output, we can tell BLAKE2b to produce 20-byte digests:
466
467 >>> from hashlib import blake2b
468 >>> h = blake2b(digest_size=20)
469 >>> h.update(b'Replacing SHA1 with the more secure function')
470 >>> h.hexdigest()
471 'd24f26cf8de66472d58d4e1b1774b4c9158b1f4c'
472 >>> h.digest_size
473 20
474 >>> len(h.digest())
475 20
476
477Hash objects with different digest sizes have completely different outputs
478(shorter hashes are *not* prefixes of longer hashes); BLAKE2b and BLAKE2s
479produce different outputs even if the output length is the same:
480
481 >>> from hashlib import blake2b, blake2s
482 >>> blake2b(digest_size=10).hexdigest()
483 '6fa1d8fcfd719046d762'
484 >>> blake2b(digest_size=11).hexdigest()
485 'eb6ec15daf9546254f0809'
486 >>> blake2s(digest_size=10).hexdigest()
487 '1bf21a98c78a1c376ae9'
488 >>> blake2s(digest_size=11).hexdigest()
489 '567004bf96e4a25773ebf4'
490
491
492Keyed hashing
493"""""""""""""
494
495Keyed hashing can be used for authentication as a faster and simpler
496replacement for `Hash-based message authentication code
Sanyam Khurana1b4587a2017-12-06 22:09:33 +0530497<https://en.wikipedia.org/wiki/Hash-based_message_authentication_code>`_ (HMAC).
INADA Naokie2f9e772017-01-13 19:29:58 +0900498BLAKE2 can be securely used in prefix-MAC mode thanks to the
499indifferentiability property inherited from BLAKE.
500
501This example shows how to get a (hex-encoded) 128-bit authentication code for
502message ``b'message data'`` with key ``b'pseudorandom key'``::
503
504 >>> from hashlib import blake2b
505 >>> h = blake2b(key=b'pseudorandom key', digest_size=16)
506 >>> h.update(b'message data')
507 >>> h.hexdigest()
508 '3d363ff7401e02026f4a4687d4863ced'
509
510
511As a practical example, a web application can symmetrically sign cookies sent
512to users and later verify them to make sure they weren't tampered with::
513
514 >>> from hashlib import blake2b
515 >>> from hmac import compare_digest
516 >>>
517 >>> SECRET_KEY = b'pseudorandomly generated server secret key'
518 >>> AUTH_SIZE = 16
519 >>>
520 >>> def sign(cookie):
sww312ffea2017-09-13 23:24:36 -0700521 ... h = blake2b(digest_size=AUTH_SIZE, key=SECRET_KEY)
522 ... h.update(cookie)
523 ... return h.hexdigest().encode('utf-8')
INADA Naokie2f9e772017-01-13 19:29:58 +0900524 >>>
Dmitry Chestnykhaecc08a2017-09-23 19:18:40 +0200525 >>> def verify(cookie, sig):
526 ... good_sig = sign(cookie)
527 ... return compare_digest(good_sig, sig)
528 >>>
529 >>> cookie = b'user-alice'
INADA Naokie2f9e772017-01-13 19:29:58 +0900530 >>> sig = sign(cookie)
531 >>> print("{0},{1}".format(cookie.decode('utf-8'), sig))
Dmitry Chestnykhaecc08a2017-09-23 19:18:40 +0200532 user-alice,b'43b3c982cf697e0c5ab22172d1ca7421'
533 >>> verify(cookie, sig)
INADA Naokie2f9e772017-01-13 19:29:58 +0900534 True
Dmitry Chestnykhaecc08a2017-09-23 19:18:40 +0200535 >>> verify(b'user-bob', sig)
INADA Naokie2f9e772017-01-13 19:29:58 +0900536 False
Dmitry Chestnykhaecc08a2017-09-23 19:18:40 +0200537 >>> verify(cookie, b'0102030405060708090a0b0c0d0e0f00')
INADA Naokie2f9e772017-01-13 19:29:58 +0900538 False
539
540Even though there's a native keyed hashing mode, BLAKE2 can, of course, be used
541in HMAC construction with :mod:`hmac` module::
542
543 >>> import hmac, hashlib
544 >>> m = hmac.new(b'secret key', digestmod=hashlib.blake2s)
545 >>> m.update(b'message')
546 >>> m.hexdigest()
547 'e3c8102868d28b5ff85fc35dda07329970d1a01e273c37481326fe0c861c8142'
548
549
550Randomized hashing
551""""""""""""""""""
552
553By setting *salt* parameter users can introduce randomization to the hash
554function. Randomized hashing is useful for protecting against collision attacks
555on the hash function used in digital signatures.
556
557 Randomized hashing is designed for situations where one party, the message
558 preparer, generates all or part of a message to be signed by a second
559 party, the message signer. If the message preparer is able to find
560 cryptographic hash function collisions (i.e., two messages producing the
Andrés Delfino50924392018-06-18 01:34:30 -0300561 same hash value), then they might prepare meaningful versions of the message
INADA Naokie2f9e772017-01-13 19:29:58 +0900562 that would produce the same hash value and digital signature, but with
563 different results (e.g., transferring $1,000,000 to an account, rather than
564 $10). Cryptographic hash functions have been designed with collision
565 resistance as a major goal, but the current concentration on attacking
566 cryptographic hash functions may result in a given cryptographic hash
567 function providing less collision resistance than expected. Randomized
568 hashing offers the signer additional protection by reducing the likelihood
569 that a preparer can generate two or more messages that ultimately yield the
570 same hash value during the digital signature generation process --- even if
571 it is practical to find collisions for the hash function. However, the use
572 of randomized hashing may reduce the amount of security provided by a
573 digital signature when all portions of the message are prepared
574 by the signer.
575
576 (`NIST SP-800-106 "Randomized Hashing for Digital Signatures"
Sanyam Khurana338cd832018-01-20 05:55:37 +0530577 <https://csrc.nist.gov/publications/detail/sp/800-106/final>`_)
INADA Naokie2f9e772017-01-13 19:29:58 +0900578
579In BLAKE2 the salt is processed as a one-time input to the hash function during
580initialization, rather than as an input to each compression function.
581
582.. warning::
583
584 *Salted hashing* (or just hashing) with BLAKE2 or any other general-purpose
585 cryptographic hash function, such as SHA-256, is not suitable for hashing
586 passwords. See `BLAKE2 FAQ <https://blake2.net/#qa>`_ for more
587 information.
588..
589
590 >>> import os
591 >>> from hashlib import blake2b
592 >>> msg = b'some message'
593 >>> # Calculate the first hash with a random salt.
594 >>> salt1 = os.urandom(blake2b.SALT_SIZE)
595 >>> h1 = blake2b(salt=salt1)
596 >>> h1.update(msg)
597 >>> # Calculate the second hash with a different random salt.
598 >>> salt2 = os.urandom(blake2b.SALT_SIZE)
599 >>> h2 = blake2b(salt=salt2)
600 >>> h2.update(msg)
601 >>> # The digests are different.
602 >>> h1.digest() != h2.digest()
603 True
604
605
606Personalization
607"""""""""""""""
608
609Sometimes it is useful to force hash function to produce different digests for
610the same input for different purposes. Quoting the authors of the Skein hash
611function:
612
613 We recommend that all application designers seriously consider doing this;
614 we have seen many protocols where a hash that is computed in one part of
615 the protocol can be used in an entirely different part because two hash
616 computations were done on similar or related data, and the attacker can
617 force the application to make the hash inputs the same. Personalizing each
618 hash function used in the protocol summarily stops this type of attack.
619
620 (`The Skein Hash Function Family
621 <http://www.skein-hash.info/sites/default/files/skein1.3.pdf>`_,
622 p. 21)
623
624BLAKE2 can be personalized by passing bytes to the *person* argument::
625
626 >>> from hashlib import blake2b
627 >>> FILES_HASH_PERSON = b'MyApp Files Hash'
628 >>> BLOCK_HASH_PERSON = b'MyApp Block Hash'
629 >>> h = blake2b(digest_size=32, person=FILES_HASH_PERSON)
630 >>> h.update(b'the same content')
631 >>> h.hexdigest()
632 '20d9cd024d4fb086aae819a1432dd2466de12947831b75c5a30cf2676095d3b4'
633 >>> h = blake2b(digest_size=32, person=BLOCK_HASH_PERSON)
634 >>> h.update(b'the same content')
635 >>> h.hexdigest()
636 'cf68fb5761b9c44e7878bfb2c4c9aea52264a80b75005e65619778de59f383a3'
637
638Personalization together with the keyed mode can also be used to derive different
639keys from a single one.
640
641 >>> from hashlib import blake2s
642 >>> from base64 import b64decode, b64encode
643 >>> orig_key = b64decode(b'Rm5EPJai72qcK3RGBpW3vPNfZy5OZothY+kHY6h21KM=')
644 >>> enc_key = blake2s(key=orig_key, person=b'kEncrypt').digest()
645 >>> mac_key = blake2s(key=orig_key, person=b'kMAC').digest()
646 >>> print(b64encode(enc_key).decode('utf-8'))
647 rbPb15S/Z9t+agffno5wuhB77VbRi6F9Iv2qIxU7WHw=
648 >>> print(b64encode(mac_key).decode('utf-8'))
649 G9GtHFE1YluXY1zWPlYk1e/nWfu0WSEb0KRcjhDeP/o=
650
651Tree mode
652"""""""""
653
654Here's an example of hashing a minimal tree with two leaf nodes::
655
656 10
657 / \
658 00 01
659
660This example uses 64-byte internal digests, and returns the 32-byte final
661digest::
662
663 >>> from hashlib import blake2b
664 >>>
665 >>> FANOUT = 2
666 >>> DEPTH = 2
667 >>> LEAF_SIZE = 4096
668 >>> INNER_SIZE = 64
669 >>>
670 >>> buf = bytearray(6000)
671 >>>
672 >>> # Left leaf
673 ... h00 = blake2b(buf[0:LEAF_SIZE], fanout=FANOUT, depth=DEPTH,
674 ... leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
675 ... node_offset=0, node_depth=0, last_node=False)
676 >>> # Right leaf
677 ... h01 = blake2b(buf[LEAF_SIZE:], fanout=FANOUT, depth=DEPTH,
678 ... leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
679 ... node_offset=1, node_depth=0, last_node=True)
680 >>> # Root node
681 ... h10 = blake2b(digest_size=32, fanout=FANOUT, depth=DEPTH,
682 ... leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
683 ... node_offset=0, node_depth=1, last_node=True)
684 >>> h10.update(h00.digest())
685 >>> h10.update(h01.digest())
686 >>> h10.hexdigest()
687 '3ad2a9b37c6070e374c7a8c508fe20ca86b6ed54e286e93a0318e95e881db5aa'
688
689Credits
690^^^^^^^
691
692BLAKE2_ was designed by *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko
693Wilcox-O'Hearn*, and *Christian Winnerlein* based on SHA-3_ finalist BLAKE_
694created by *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi Meier*, and
695*Raphael C.-W. Phan*.
696
697It uses core algorithm from ChaCha_ cipher designed by *Daniel J. Bernstein*.
698
699The stdlib implementation is based on pyblake2_ module. It was written by
700*Dmitry Chestnykh* based on C implementation written by *Samuel Neves*. The
701documentation was copied from pyblake2_ and written by *Dmitry Chestnykh*.
702
703The C code was partly rewritten for Python by *Christian Heimes*.
704
705The following public domain dedication applies for both C hash function
706implementation, extension code, and this documentation:
707
708 To the extent possible under law, the author(s) have dedicated all copyright
709 and related and neighboring rights to this software to the public domain
710 worldwide. This software is distributed without any warranty.
711
712 You should have received a copy of the CC0 Public Domain Dedication along
713 with this software. If not, see
Sanyam Khurana1b4587a2017-12-06 22:09:33 +0530714 https://creativecommons.org/publicdomain/zero/1.0/.
INADA Naokie2f9e772017-01-13 19:29:58 +0900715
716The following people have helped with development or contributed their changes
717to the project and the public domain according to the Creative Commons Public
718Domain Dedication 1.0 Universal:
719
720* *Alexandr Sokolovskiy*
721
INADA Naokie2f9e772017-01-13 19:29:58 +0900722.. _BLAKE2: https://blake2.net
723.. _HMAC: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code
724.. _BLAKE: https://131002.net/blake/
725.. _SHA-3: https://en.wikipedia.org/wiki/NIST_hash_function_competition
726.. _ChaCha: https://cr.yp.to/chacha.html
727.. _pyblake2: https://pythonhosted.org/pyblake2/
728
Christian Heimes121b9482016-09-06 22:03:25 +0200729
730
Georg Brandl116aa622007-08-15 14:28:22 +0000731.. seealso::
732
733 Module :mod:`hmac`
734 A module to generate message authentication codes using hashes.
735
736 Module :mod:`base64`
737 Another way to encode binary hashes for non-binary environments.
738
INADA Naokie2f9e772017-01-13 19:29:58 +0900739 https://blake2.net
740 Official BLAKE2 website.
Christian Heimes121b9482016-09-06 22:03:25 +0200741
Sanyam Khurana338cd832018-01-20 05:55:37 +0530742 https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf
Georg Brandl116aa622007-08-15 14:28:22 +0000743 The FIPS 180-2 publication on Secure Hash Algorithms.
744
Benjamin Peterson1dd72e62015-09-27 02:05:01 -0700745 https://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms
Georg Brandlfd0eb3f2010-05-21 20:28:13 +0000746 Wikipedia article with information on which algorithms have known issues and
Georg Brandl116aa622007-08-15 14:28:22 +0000747 what that means regarding their use.
748
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300749 https://www.ietf.org/rfc/rfc2898.txt
Christian Heimese92ef132013-10-13 00:52:43 +0200750 PKCS #5: Password-Based Cryptography Specification Version 2.0