blob: 8b047b8c2aaa16b6532d4b73c625333d1fd5745a [file] [log] [blame]
Alex Gaynor2724ff62013-12-20 13:51:42 -08001.. hazmat:: /fernet
Donald Stufftd8f01182013-10-27 16:59:56 -04002
3
Alex Stapletonc5fffd32014-03-18 15:29:00 +00004Symmetric encryption
Donald Stuffte51fb932013-10-27 17:26:17 -04005====================
6
Paul Kehrer7c5c9fe2015-02-14 10:27:14 -06007.. module:: cryptography.hazmat.primitives.ciphers
David Reid1f3d7182013-10-22 16:55:18 -07008
Alex Stapleton092351d2014-03-09 17:44:43 +00009Symmetric encryption is a way to `encrypt`_ or hide the contents of material
10where the sender and receiver both use the same secret key. Note that symmetric
11encryption is **not** sufficient for most applications because it only
12provides secrecy but not authenticity. That means an attacker can't see the
13message but an attacker can create bogus messages and force the application to
14decrypt them.
15
Paul Kehrer006670c2014-05-09 11:12:43 -050016For this reason it is **strongly** recommended to combine encryption with a
Alex Gaynor969f18e2014-05-17 20:07:35 -070017message authentication code, such as :doc:`HMAC </hazmat/primitives/mac/hmac>`,
18in an "encrypt-then-MAC" formulation as `described by Colin Percival`_.
Paul Kehrerafa84f12017-05-27 15:11:24 -050019``cryptography`` includes a recipe named :doc:`/fernet` that does this for you.
20**To minimize the risk of security issues you should evaluate Fernet to see if
21it fits your needs before implementing anything using this module.**
Alex Gaynorf6c47e92013-08-08 07:16:01 -070022
David Reidef0fcf22013-11-06 11:12:45 -080023.. class:: Cipher(algorithm, mode, backend)
Alex Gaynorf6c47e92013-08-08 07:16:01 -070024
Alex Stapleton092351d2014-03-09 17:44:43 +000025 Cipher objects combine an algorithm such as
26 :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES` with a
27 mode like
Alex Gaynorab5f0112013-11-08 10:34:00 -080028 :class:`~cryptography.hazmat.primitives.ciphers.modes.CBC` or
Alex Stapleton092351d2014-03-09 17:44:43 +000029 :class:`~cryptography.hazmat.primitives.ciphers.modes.CTR`. A simple
30 example of encrypting and then decrypting content with AES is:
Alex Gaynorf6c47e92013-08-08 07:16:01 -070031
Donald Stufft173de982013-08-12 07:34:39 -040032 .. doctest::
Alex Gaynorf6c47e92013-08-08 07:16:01 -070033
Gregory Haynes0f986112014-12-30 09:43:24 -080034 >>> import os
Paul Kehrer051099e2013-11-06 15:53:40 +080035 >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
Alex Gaynorf8796b12013-12-13 20:28:55 -080036 >>> from cryptography.hazmat.backends import default_backend
Alex Gaynorf56444d2013-12-13 15:19:22 -080037 >>> backend = default_backend()
Gregory Haynese261d942015-01-03 09:17:41 -080038 >>> key = os.urandom(32)
Gregory Haynese5917782015-01-03 21:58:25 -080039 >>> iv = os.urandom(16)
Gregory Haynese261d942015-01-03 09:17:41 -080040 >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
Paul Kehrer3e0895c2013-10-21 22:19:29 -050041 >>> encryptor = cipher.encryptor()
42 >>> ct = encryptor.update(b"a secret message") + encryptor.finalize()
43 >>> decryptor = cipher.decryptor()
44 >>> decryptor.update(ct) + decryptor.finalize()
Paul Kehrerf6cf9562013-10-22 10:36:00 -050045 'a secret message'
Alex Gaynorf6c47e92013-08-08 07:16:01 -070046
David Reid663295d2013-11-20 13:55:08 -080047 :param algorithms: A
Paul Kehrer7c5c9fe2015-02-14 10:27:14 -060048 :class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm`
Gabriel Orisaka617fe4b2016-07-31 10:49:59 -030049 instance such as those described
David Reid663295d2013-11-20 13:55:08 -080050 :ref:`below <symmetric-encryption-algorithms>`.
Paul Kehrer513b7cb2015-02-12 17:31:24 -060051 :param mode: A :class:`~cryptography.hazmat.primitives.ciphers.modes.Mode`
Gabriel Orisaka617fe4b2016-07-31 10:49:59 -030052 instance such as those described
David Reid663295d2013-11-20 13:55:08 -080053 :ref:`below <symmetric-encryption-modes>`.
54 :param backend: A
Alex Gaynorf8796b12013-12-13 20:28:55 -080055 :class:`~cryptography.hazmat.backends.interfaces.CipherBackend`
Gabriel Orisaka617fe4b2016-07-31 10:49:59 -030056 instance.
Alex Gaynor0ca7fdb2013-08-08 07:35:26 -070057
Alex Gaynor7a489db2014-03-22 15:09:34 -070058 :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the
Ayrxf56c54e2014-03-16 14:36:17 +080059 provided ``backend`` does not implement
60 :class:`~cryptography.hazmat.backends.interfaces.CipherBackend`
61
Paul Kehrer5399fd02013-10-21 23:48:25 -050062 .. method:: encryptor()
Alex Gaynor09515f02013-08-08 15:26:55 -070063
David Reid63ba6652013-10-22 14:09:19 -070064 :return: An encrypting
Paul Kehrer7c5c9fe2015-02-14 10:27:14 -060065 :class:`~cryptography.hazmat.primitives.ciphers.CipherContext`
Gabriel Orisaka617fe4b2016-07-31 10:49:59 -030066 instance.
Alex Gaynore62aa402013-08-08 15:23:11 -070067
Alex Gaynorf1a3fc02013-11-02 14:03:34 -070068 If the backend doesn't support the requested combination of ``cipher``
Alex Gaynor7a489db2014-03-22 15:09:34 -070069 and ``mode`` an :class:`~cryptography.exceptions.UnsupportedAlgorithm`
Alex Stapleton092351d2014-03-09 17:44:43 +000070 exception will be raised.
Alex Gaynorf1a3fc02013-11-02 14:03:34 -070071
Paul Kehrer5399fd02013-10-21 23:48:25 -050072 .. method:: decryptor()
73
David Reid63ba6652013-10-22 14:09:19 -070074 :return: A decrypting
Paul Kehrer7c5c9fe2015-02-14 10:27:14 -060075 :class:`~cryptography.hazmat.primitives.ciphers.CipherContext`
Gabriel Orisaka617fe4b2016-07-31 10:49:59 -030076 instance.
Paul Kehrer5399fd02013-10-21 23:48:25 -050077
Alex Gaynorf1a3fc02013-11-02 14:03:34 -070078 If the backend doesn't support the requested combination of ``cipher``
Alex Gaynorfdf63302014-04-29 18:26:11 -070079 and ``mode`` an :class:`~cryptography.exceptions.UnsupportedAlgorithm`
Alex Stapleton092351d2014-03-09 17:44:43 +000080 exception will be raised.
Alex Gaynorf1a3fc02013-11-02 14:03:34 -070081
David Reid663295d2013-11-20 13:55:08 -080082.. _symmetric-encryption-algorithms:
83
Paul Kehrer051099e2013-11-06 15:53:40 +080084Algorithms
85~~~~~~~~~~
Alex Gaynord96d1002013-08-08 07:37:26 -070086
Paul Kehrer051099e2013-11-06 15:53:40 +080087.. currentmodule:: cryptography.hazmat.primitives.ciphers.algorithms
David Reid1f3d7182013-10-22 16:55:18 -070088
89.. class:: AES(key)
Alex Gaynor5ba2dfa2013-08-08 11:04:44 -070090
Alex Gaynor1e3f81f2013-08-08 11:31:43 -070091 AES (Advanced Encryption Standard) is a block cipher standardized by NIST.
Alex Gaynor5ba2dfa2013-08-08 11:04:44 -070092 AES is both fast, and cryptographically strong. It is a good default
93 choice for encryption.
94
Alex Stapleton092351d2014-03-09 17:44:43 +000095 :param bytes key: The secret key. This must be kept secret. Either ``128``,
96 ``192``, or ``256`` bits long.
Alex Gaynor5ba2dfa2013-08-08 11:04:44 -070097
David Reid1f3d7182013-10-22 16:55:18 -070098.. class:: Camellia(key)
Paul Kehrerdff22d42013-09-27 13:43:06 -050099
Alex Stapleton092351d2014-03-09 17:44:43 +0000100 Camellia is a block cipher approved for use by `CRYPTREC`_ and ISO/IEC.
101 It is considered to have comparable security and performance to AES but
Paul Kehrerdff22d42013-09-27 13:43:06 -0500102 is not as widely studied or deployed.
103
Alex Stapleton092351d2014-03-09 17:44:43 +0000104 :param bytes key: The secret key. This must be kept secret. Either ``128``,
105 ``192``, or ``256`` bits long.
Paul Kehrerdff22d42013-09-27 13:43:06 -0500106
David Reid1f3d7182013-10-22 16:55:18 -0700107.. class:: TripleDES(key)
Alex Gaynoraeb714c2013-09-09 18:06:14 -0700108
Alex Gaynor9316f4c2013-11-15 16:38:42 -0800109 Triple DES (Data Encryption Standard), sometimes referred to as 3DES, is a
110 block cipher standardized by NIST. Triple DES has known crypto-analytic
Alex Gaynor17adce62013-10-16 17:04:40 -0700111 flaws, however none of them currently enable a practical attack.
Alex Chanee9710f2016-09-04 17:40:06 +0100112 Nonetheless, Triple DES is not recommended for new applications because it
Alex Gaynorfbcc5642013-10-22 08:26:00 -0700113 is incredibly slow; old applications should consider moving away from it.
Alex Gaynoraeb714c2013-09-09 18:06:14 -0700114
Alex Stapleton092351d2014-03-09 17:44:43 +0000115 :param bytes key: The secret key. This must be kept secret. Either ``64``,
116 ``128``, or ``192`` bits long. DES only uses ``56``, ``112``, or ``168``
117 bits of the key as there is a parity byte in each component of the key.
118 Some writing refers to there being up to three separate keys that are each
119 ``56`` bits long, they can simply be concatenated to produce the full key.
Alex Gaynoraeb714c2013-09-09 18:06:14 -0700120
Paul Kehrerbab0e1a2014-02-09 10:51:59 -0600121.. class:: CAST5(key)
122
Paul Kehrera5011ec2014-02-13 12:33:34 -0600123 .. versionadded:: 0.2
124
Paul Kehrerbab0e1a2014-02-09 10:51:59 -0600125 CAST5 (also known as CAST-128) is a block cipher approved for use in the
126 Canadian government by the `Communications Security Establishment`_. It is
127 a variable key length cipher and supports keys from 40-128 bits in length.
128
Alex Stapleton092351d2014-03-09 17:44:43 +0000129 :param bytes key: The secret key, This must be kept secret. 40 to 128 bits
130 in length in increments of 8 bits.
Paul Kehrerbab0e1a2014-02-09 10:51:59 -0600131
Paul Kehrer7e914c92014-04-09 09:12:29 -0500132.. class:: SEED(key)
133
134 .. versionadded:: 0.4
135
Alex Stapleton19e97bd2014-05-02 21:57:59 +0100136 SEED is a block cipher developed by the Korea Information Security Agency
137 (KISA). It is defined in :rfc:`4269` and is used broadly throughout South
Paul Kehrer7e914c92014-04-09 09:12:29 -0500138 Korean industry, but rarely found elsewhere.
139
140 :param bytes key: The secret key. This must be kept secret. ``128`` bits in
141 length.
142
Alex Stapletonc5fffd32014-03-18 15:29:00 +0000143Weak ciphers
Paul Kehrer3446d812013-10-31 17:15:03 -0500144------------
145
146.. warning::
147
148 These ciphers are considered weak for a variety of reasons. New
149 applications should avoid their use and existing applications should
150 strongly consider migrating away.
151
Paul Kehrer5df0abe2013-10-30 16:57:04 -0500152.. class:: Blowfish(key)
153
154 Blowfish is a block cipher developed by Bruce Schneier. It is known to be
155 susceptible to attacks when using weak keys. The author has recommended
Alex Stapleton092351d2014-03-09 17:44:43 +0000156 that users of Blowfish move to newer algorithms such as :class:`AES`.
Paul Kehrer5df0abe2013-10-30 16:57:04 -0500157
Alex Stapleton092351d2014-03-09 17:44:43 +0000158 :param bytes key: The secret key. This must be kept secret. 32 to 448 bits
159 in length in increments of 8 bits.
Paul Kehrer5df0abe2013-10-30 16:57:04 -0500160
Paul Kehrer4da28c32013-11-07 07:50:17 +0800161.. class:: ARC4(key)
162
163 ARC4 (Alleged RC4) is a stream cipher with serious weaknesses in its
164 initial stream output. Its use is strongly discouraged. ARC4 does not use
165 mode constructions.
166
Alex Stapleton092351d2014-03-09 17:44:43 +0000167 :param bytes key: The secret key. This must be kept secret. Either ``40``,
168 ``56``, ``64``, ``80``, ``128``, ``192``, or ``256`` bits in length.
Paul Kehrer4da28c32013-11-07 07:50:17 +0800169
Paul Kehrer0994c562013-11-10 03:19:14 +0800170 .. doctest::
171
172 >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
Alex Gaynorf8796b12013-12-13 20:28:55 -0800173 >>> from cryptography.hazmat.backends import default_backend
Paul Kehrer0994c562013-11-10 03:19:14 +0800174 >>> algorithm = algorithms.ARC4(key)
Alex Gaynorf56444d2013-12-13 15:19:22 -0800175 >>> cipher = Cipher(algorithm, mode=None, backend=default_backend())
Paul Kehrer0994c562013-11-10 03:19:14 +0800176 >>> encryptor = cipher.encryptor()
177 >>> ct = encryptor.update(b"a secret message")
178 >>> decryptor = cipher.decryptor()
179 >>> decryptor.update(ct)
180 'a secret message'
181
Paul Kehrere5dc1222014-02-20 16:19:32 -0600182.. class:: IDEA(key)
183
184 IDEA (`International Data Encryption Algorithm`_) is a block cipher created
185 in 1991. It is an optional component of the `OpenPGP`_ standard. This cipher
186 is susceptible to attacks when using weak keys. It is recommended that you
187 do not use this cipher for new applications.
188
Paul Kehrer7e914c92014-04-09 09:12:29 -0500189 :param bytes key: The secret key. This must be kept secret. ``128`` bits in
Paul Kehrer7ba0c012014-03-08 11:33:35 -0400190 length.
Paul Kehrere5dc1222014-02-20 16:19:32 -0600191
David Reid30722b92013-11-07 13:03:39 -0800192
193.. _symmetric-encryption-modes:
194
Alex Gaynord96d1002013-08-08 07:37:26 -0700195Modes
196~~~~~
197
Paul Kehrer2129d502015-02-13 12:37:34 -0600198.. module:: cryptography.hazmat.primitives.ciphers.modes
David Reid1f3d7182013-10-22 16:55:18 -0700199
200.. class:: CBC(initialization_vector)
Alex Gaynor48ec9a32013-08-08 11:13:46 -0700201
Alex Stapleton092351d2014-03-09 17:44:43 +0000202 CBC (Cipher Block Chaining) is a mode of operation for block ciphers. It is
Alex Gaynor48ec9a32013-08-08 11:13:46 -0700203 considered cryptographically strong.
204
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600205 **Padding is required when using this mode.**
206
Alex Gaynor9b6fd8e2014-12-19 10:29:56 -0800207 :param bytes initialization_vector: Must be :doc:`random bytes
208 </random-numbers>`. They do not need to be kept secret and they can be
209 included in a transmitted message. Must be the same number of bytes as
210 the ``block_size`` of the cipher. Each time something is encrypted a
211 new ``initialization_vector`` should be generated. Do not reuse an
212 ``initialization_vector`` with a given ``key``, and particularly do not
213 use a constant ``initialization_vector``.
Alex Gaynor8ed651e2013-11-07 13:24:31 -0800214
215 A good construction looks like:
216
Alex Gaynor989061d2013-12-13 20:22:14 -0800217 .. doctest::
Alex Gaynor8ed651e2013-11-07 13:24:31 -0800218
219 >>> import os
Alex Gaynord83c5902013-12-13 20:43:54 -0800220 >>> from cryptography.hazmat.primitives.ciphers.modes import CBC
Alex Gaynor8ed651e2013-11-07 13:24:31 -0800221 >>> iv = os.urandom(16)
222 >>> mode = CBC(iv)
223
224 While the following is bad and will leak information:
225
Alex Gaynor989061d2013-12-13 20:22:14 -0800226 .. doctest::
Alex Gaynor8ed651e2013-11-07 13:24:31 -0800227
Alex Gaynord83c5902013-12-13 20:43:54 -0800228 >>> from cryptography.hazmat.primitives.ciphers.modes import CBC
Alex Gaynor8ed651e2013-11-07 13:24:31 -0800229 >>> iv = "a" * 16
230 >>> mode = CBC(iv)
Paul Kehrer13f108f2013-09-09 21:41:03 -0500231
Paul Kehrer45064282013-10-17 13:41:53 -0500232
David Reid1f3d7182013-10-22 16:55:18 -0700233.. class:: CTR(nonce)
Paul Kehrerd0ec60e2013-10-16 08:46:50 -0500234
Paul Kehrer45064282013-10-17 13:41:53 -0500235 .. warning::
236
237 Counter mode is not recommended for use with block ciphers that have a
238 block size of less than 128-bits.
239
Paul Kehrerd0ec60e2013-10-16 08:46:50 -0500240 CTR (Counter) is a mode of operation for block ciphers. It is considered
Alex Gaynord1f02012013-11-01 14:12:35 -0700241 cryptographically strong. It transforms a block cipher into a stream
242 cipher.
Paul Kehrerd0ec60e2013-10-16 08:46:50 -0500243
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600244 **This mode does not require padding.**
245
Eeshan Garg94759002015-05-20 20:35:33 +0530246 :param bytes nonce: Should be unique, a :term:`nonce`. It is
Alex Gaynor9b6fd8e2014-12-19 10:29:56 -0800247 critical to never reuse a ``nonce`` with a given key. Any reuse of a
248 nonce with the same key compromises the security of every message
249 encrypted with that key. Must be the same number of bytes as the
250 ``block_size`` of the cipher with a given key. The nonce does not need
251 to be kept secret and may be included with the ciphertext.
Paul Kehrerd0ec60e2013-10-16 08:46:50 -0500252
David Reid1f3d7182013-10-22 16:55:18 -0700253.. class:: OFB(initialization_vector)
Paul Kehrer6f412a02013-09-10 21:30:50 -0500254
255 OFB (Output Feedback) is a mode of operation for block ciphers. It
256 transforms a block cipher into a stream cipher.
257
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600258 **This mode does not require padding.**
259
Alex Gaynor9b6fd8e2014-12-19 10:29:56 -0800260 :param bytes initialization_vector: Must be :doc:`random bytes
261 </random-numbers>`. They do not need to be kept secret and they can be
262 included in a transmitted message. Must be the same number of bytes as
263 the ``block_size`` of the cipher. Do not reuse an
264 ``initialization_vector`` with a given ``key``.
Paul Kehrer6f412a02013-09-10 21:30:50 -0500265
David Reid1f3d7182013-10-22 16:55:18 -0700266.. class:: CFB(initialization_vector)
Paul Kehrer4223df72013-09-11 09:48:04 -0500267
268 CFB (Cipher Feedback) is a mode of operation for block ciphers. It
269 transforms a block cipher into a stream cipher.
270
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600271 **This mode does not require padding.**
272
Alex Gaynor9b6fd8e2014-12-19 10:29:56 -0800273 :param bytes initialization_vector: Must be :doc:`random bytes
274 </random-numbers>`. They do not need to be kept secret and they can be
275 included in a transmitted message. Must be the same number of bytes as
276 the ``block_size`` of the cipher. Do not reuse an
277 ``initialization_vector`` with a given ``key``.
Paul Kehrer4223df72013-09-11 09:48:04 -0500278
Paul Kehrer2a947c42014-05-15 17:22:08 -0400279.. class:: CFB8(initialization_vector)
280
281 CFB (Cipher Feedback) is a mode of operation for block ciphers. It
282 transforms a block cipher into a stream cipher. The CFB8 variant uses an
283 8-bit shift register.
284
285 **This mode does not require padding.**
286
Alex Gaynor9b6fd8e2014-12-19 10:29:56 -0800287 :param bytes initialization_vector: Must be :doc:`random bytes
288 </random-numbers>`. They do not need to be kept secret and they can be
289 included in a transmitted message. Must be the same number of bytes as
290 the ``block_size`` of the cipher. Do not reuse an
291 ``initialization_vector`` with a given ``key``.
Paul Kehrer2a947c42014-05-15 17:22:08 -0400292
Alex Gaynorcc5224f2014-06-30 09:25:48 -0700293.. class:: GCM(initialization_vector, tag=None, min_tag_length=16)
Paul Kehrer22e80cb2013-11-20 21:27:00 -0600294
Paul Kehrer5b828b12013-11-29 17:32:08 -0600295 .. danger::
Paul Kehrer26c8c6a2013-11-29 16:24:56 -0600296
Alex Stapleton092351d2014-03-09 17:44:43 +0000297 When using this mode you **must** not use the decrypted data until
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200298 the appropriate finalization method
299 (:meth:`~cryptography.hazmat.primitives.ciphers.CipherContext.finalize`
300 or
301 :meth:`~cryptography.hazmat.primitives.ciphers.AEADDecryptionContext.finalize_with_tag`)
Alex Stapleton092351d2014-03-09 17:44:43 +0000302 has been called. GCM provides **no** guarantees of ciphertext integrity
Alex Gaynord4f93832013-12-04 16:31:59 -0600303 until decryption is complete.
Paul Kehrer26c8c6a2013-11-29 16:24:56 -0600304
Paul Kehrer5578c662013-12-03 17:37:42 -0600305 GCM (Galois Counter Mode) is a mode of operation for block ciphers. An
306 AEAD (authenticated encryption with additional data) mode is a type of
Alex Stapleton092351d2014-03-09 17:44:43 +0000307 block cipher mode that simultaneously encrypts the message as well as
308 authenticating it. Additional unencrypted data may also be authenticated.
309 Additional means of verifying integrity such as
Ayrxfa4a6b22014-04-16 23:03:14 +0800310 :doc:`HMAC </hazmat/primitives/mac/hmac>` are not necessary.
Paul Kehrer22e80cb2013-11-20 21:27:00 -0600311
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600312 **This mode does not require padding.**
313
Eeshan Garg94759002015-05-20 20:35:33 +0530314 :param bytes initialization_vector: Must be unique, a :term:`nonce`.
315 They do not need to be kept secret and they can be included in a
316 transmitted message. NIST `recommends a 96-bit IV length`_ for
317 performance critical situations but it can be up to 2\ :sup:`64` - 1
318 bits. Do not reuse an ``initialization_vector`` with a given ``key``.
Paul Kehrer22e80cb2013-11-20 21:27:00 -0600319
Paul Kehrerca735042013-12-21 17:31:48 -0600320 .. note::
321
Alex Stapleton092351d2014-03-09 17:44:43 +0000322 Cryptography will generate a 128-bit tag when finalizing encryption.
323 You can shorten a tag by truncating it to the desired length but this
Paul Kehrerfc73e2d2013-12-21 18:41:38 -0600324 is **not recommended** as it lowers the security margins of the
Alex Gaynorcc5224f2014-06-30 09:25:48 -0700325 authentication (`NIST SP-800-38D`_ recommends 96-bits or greater).
326 Applications wishing to allow truncation must pass the
Alex Gaynor8f1b8e82014-06-29 20:43:29 -0700327 ``min_tag_length`` parameter.
328
329 .. versionchanged:: 0.5
330
331 The ``min_tag_length`` parameter was added in ``0.5``, previously
Alex Gaynorcc5224f2014-06-30 09:25:48 -0700332 truncation down to ``4`` bytes was always allowed.
Paul Kehrerca735042013-12-21 17:31:48 -0600333
Alex Gaynorfb843aa2014-02-25 11:37:36 -0800334 :param bytes tag: The tag bytes to verify during decryption. When
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200335 encrypting this must be ``None``. When decrypting, it may be ``None``
336 if the tag is supplied on finalization using
337 :meth:`~cryptography.hazmat.primitives.ciphers.AEADDecryptionContext.finalize_with_tag`.
338 Otherwise, the tag is mandatory.
Paul Kehrer67abc862013-11-25 14:29:35 -0600339
Alex Gaynor8f1b8e82014-06-29 20:43:29 -0700340 :param bytes min_tag_length: The minimum length ``tag`` must be. By default
Alex Gaynorcc5224f2014-06-30 09:25:48 -0700341 this is ``16``, meaning tag truncation is not allowed. Allowing tag
342 truncation is strongly discouraged for most applications.
343
344 :raises ValueError: This is raised if ``len(tag) < min_tag_length``.
Alex Gaynor8f1b8e82014-06-29 20:43:29 -0700345
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200346 :raises NotImplementedError: This is raised if the version of the OpenSSL
347 backend used is 1.0.1 or earlier.
348
Alex Gaynor09828cd2016-02-10 15:21:36 -0500349 An example of securely encrypting and decrypting data with ``AES`` in the
350 ``GCM`` mode looks like:
351
David Reidabb72d22014-01-07 16:06:18 -0800352 .. testcode::
Paul Kehrer22e80cb2013-11-20 21:27:00 -0600353
David Reidabb72d22014-01-07 16:06:18 -0800354 import os
355
gdmnbt2a0b8342017-03-24 01:19:20 +0100356 from cryptography.hazmat.backends import default_backend
David Reidabb72d22014-01-07 16:06:18 -0800357 from cryptography.hazmat.primitives.ciphers import (
358 Cipher, algorithms, modes
359 )
360
David Reid78569d62014-01-07 15:42:17 -0800361 def encrypt(key, plaintext, associated_data):
David Reidabb72d22014-01-07 16:06:18 -0800362 # Generate a random 96-bit IV.
David Reid78569d62014-01-07 15:42:17 -0800363 iv = os.urandom(12)
David Reidabb72d22014-01-07 16:06:18 -0800364
Alex Gaynorebb1cb92014-06-10 09:36:39 -0700365 # Construct an AES-GCM Cipher object with the given key and a
Alex Stapleton092351d2014-03-09 17:44:43 +0000366 # randomly generated IV.
David Reidabb72d22014-01-07 16:06:18 -0800367 encryptor = Cipher(
David Reid78569d62014-01-07 15:42:17 -0800368 algorithms.AES(key),
369 modes.GCM(iv),
370 backend=default_backend()
David Reidabb72d22014-01-07 16:06:18 -0800371 ).encryptor()
David Reid78569d62014-01-07 15:42:17 -0800372
David Reidabb72d22014-01-07 16:06:18 -0800373 # associated_data will be authenticated but not encrypted,
374 # it must also be passed in on decryption.
David Reid78569d62014-01-07 15:42:17 -0800375 encryptor.authenticate_additional_data(associated_data)
David Reid78569d62014-01-07 15:42:17 -0800376
David Reidabb72d22014-01-07 16:06:18 -0800377 # Encrypt the plaintext and get the associated ciphertext.
Paul Kehreraf0b9f52014-01-07 19:21:49 -0600378 # GCM does not require padding.
379 ciphertext = encryptor.update(plaintext) + encryptor.finalize()
David Reidabb72d22014-01-07 16:06:18 -0800380
381 return (iv, ciphertext, encryptor.tag)
David Reid78569d62014-01-07 15:42:17 -0800382
383 def decrypt(key, associated_data, iv, ciphertext, tag):
David Reidabb72d22014-01-07 16:06:18 -0800384 # Construct a Cipher object, with the key, iv, and additionally the
385 # GCM tag used for authenticating the message.
386 decryptor = Cipher(
David Reid78569d62014-01-07 15:42:17 -0800387 algorithms.AES(key),
388 modes.GCM(iv, tag),
389 backend=default_backend()
David Reidabb72d22014-01-07 16:06:18 -0800390 ).decryptor()
David Reid78569d62014-01-07 15:42:17 -0800391
David Reidabb72d22014-01-07 16:06:18 -0800392 # We put associated_data back in or the tag will fail to verify
393 # when we finalize the decryptor.
David Reid78569d62014-01-07 15:42:17 -0800394 decryptor.authenticate_additional_data(associated_data)
395
Paul Kehreraf0b9f52014-01-07 19:21:49 -0600396 # Decryption gets us the authenticated plaintext.
397 # If the tag does not match an InvalidTag exception will be raised.
398 return decryptor.update(ciphertext) + decryptor.finalize()
David Reidabb72d22014-01-07 16:06:18 -0800399
400 iv, ciphertext, tag = encrypt(
David Reid78569d62014-01-07 15:42:17 -0800401 key,
David Reidabb72d22014-01-07 16:06:18 -0800402 b"a secret message!",
David Reid78569d62014-01-07 15:42:17 -0800403 b"authenticated but not encrypted payload"
404 )
405
David Reidabb72d22014-01-07 16:06:18 -0800406 print(decrypt(
407 key,
408 b"authenticated but not encrypted payload",
409 iv,
410 ciphertext,
411 tag
412 ))
David Reid78569d62014-01-07 15:42:17 -0800413
414 .. testoutput::
415
David Reidabb72d22014-01-07 16:06:18 -0800416 a secret message!
Paul Kehrer22e80cb2013-11-20 21:27:00 -0600417
Paul Kehrer13f108f2013-09-09 21:41:03 -0500418
Alex Stapletonc5fffd32014-03-18 15:29:00 +0000419Insecure modes
Paul Kehrer13f108f2013-09-09 21:41:03 -0500420--------------
421
Alex Gaynorcd413a32013-09-10 18:59:43 -0700422.. warning::
423
424 These modes are insecure. New applications should never make use of them,
425 and existing applications should strongly consider migrating away.
426
427
David Reid1f3d7182013-10-22 16:55:18 -0700428.. class:: ECB()
Paul Kehrer13f108f2013-09-09 21:41:03 -0500429
430 ECB (Electronic Code Book) is the simplest mode of operation for block
Alex Gaynorcd413a32013-09-10 18:59:43 -0700431 ciphers. Each block of data is encrypted in the same way. This means
432 identical plaintext blocks will always result in identical ciphertext
Alex Stapleton092351d2014-03-09 17:44:43 +0000433 blocks, which can leave `significant patterns in the output`_.
Alex Gaynorab5f0112013-11-08 10:34:00 -0800434
Paul Kehrerfe2e3c22014-01-07 20:55:20 -0600435 **Padding is required when using this mode.**
436
Paul Kehrerad6d1642014-01-07 19:10:12 -0600437Interfaces
438----------
Paul Kehrer513b7cb2015-02-12 17:31:24 -0600439
Paul Kehrer7c5c9fe2015-02-14 10:27:14 -0600440.. currentmodule:: cryptography.hazmat.primitives.ciphers
Paul Kehrerad6d1642014-01-07 19:10:12 -0600441
442.. class:: CipherContext
443
444 When calling ``encryptor()`` or ``decryptor()`` on a ``Cipher`` object
Alex Gaynorb4818892014-02-06 10:58:50 -0800445 the result will conform to the ``CipherContext`` interface. You can then
446 call ``update(data)`` with data until you have fed everything into the
447 context. Once that is done call ``finalize()`` to finish the operation and
448 obtain the remainder of the data.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600449
Alex Stapleton092351d2014-03-09 17:44:43 +0000450 Block ciphers require that the plaintext or ciphertext always be a multiple
451 of their block size. Because of that **padding** is sometimes required to
452 make a message the correct size. ``CipherContext`` will not automatically
453 apply any padding; you'll need to add your own. For block ciphers the
454 recommended padding is
Alex Gaynord99fc652014-06-25 10:24:03 -0700455 :class:`~cryptography.hazmat.primitives.padding.PKCS7`. If you are using a
Alex Stapleton092351d2014-03-09 17:44:43 +0000456 stream cipher mode (such as
Paul Kehrer45efdbc2015-02-12 10:58:22 -0600457 :class:`~cryptography.hazmat.primitives.ciphers.modes.CTR`) you don't have
458 to worry about this.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600459
460 .. method:: update(data)
461
462 :param bytes data: The data you wish to pass into the context.
463 :return bytes: Returns the data that was encrypted or decrypted.
464 :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize`
465
466 When the ``Cipher`` was constructed in a mode that turns it into a
467 stream cipher (e.g.
Alex Gaynord99fc652014-06-25 10:24:03 -0700468 :class:`~cryptography.hazmat.primitives.ciphers.modes.CTR`), this will
Alex Stapleton092351d2014-03-09 17:44:43 +0000469 return bytes immediately, however in other modes it will return chunks
Paul Kehrerad6d1642014-01-07 19:10:12 -0600470 whose size is determined by the cipher's block size.
471
Paul Kehrer9b34ca92017-02-16 22:20:38 -0600472 .. method:: update_into(data, buf)
473
474 .. versionadded:: 1.8
475
476 .. warning::
477
478 This method allows you to avoid a memory copy by passing a writable
479 buffer and reading the resulting data. You are responsible for
480 correctly sizing the buffer and properly handling the data. This
481 method should only be used when extremely high performance is a
482 requirement and you will be making many small calls to
483 ``update_into``.
484
485 :param bytes data: The data you wish to pass into the context.
486 :param buf: A writable Python buffer that the data will be written
487 into. This buffer should be ``len(data) + n - 1`` bytes where ``n``
488 is the block size (in bytes) of the cipher and mode combination.
489 :return int: Number of bytes written.
490 :raises NotImplementedError: This is raised if the version of ``cffi``
491 used is too old (this can happen on older PyPy releases).
492 :raises ValueError: This is raised if the supplied buffer is too small.
493
494 .. doctest::
495
496 >>> import os
497 >>> from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
498 >>> from cryptography.hazmat.backends import default_backend
499 >>> backend = default_backend()
500 >>> key = os.urandom(32)
501 >>> iv = os.urandom(16)
502 >>> cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
503 >>> encryptor = cipher.encryptor()
504 >>> # the buffer needs to be at least len(data) + n - 1 where n is cipher/mode block size in bytes
505 >>> buf = bytearray(31)
506 >>> len_encrypted = encryptor.update_into(b"a secret message", buf)
507 >>> # get the ciphertext from the buffer reading only the bytes written to it (len_encrypted)
508 >>> ct = bytes(buf[:len_encrypted]) + encryptor.finalize()
509 >>> decryptor = cipher.decryptor()
510 >>> len_decrypted = decryptor.update_into(ct, buf)
511 >>> # get the plaintext from the buffer reading only the bytes written (len_decrypted)
512 >>> bytes(buf[:len_decrypted]) + decryptor.finalize()
513 'a secret message'
514
Paul Kehrerad6d1642014-01-07 19:10:12 -0600515 .. method:: finalize()
516
517 :return bytes: Returns the remainder of the data.
518 :raises ValueError: This is raised when the data provided isn't
Alex Stapleton092351d2014-03-09 17:44:43 +0000519 a multiple of the algorithm's block size.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600520
521 Once ``finalize`` is called this object can no longer be used and
Alex Stapleton092351d2014-03-09 17:44:43 +0000522 :meth:`update` and :meth:`finalize` will raise an
523 :class:`~cryptography.exceptions.AlreadyFinalized` exception.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600524
525.. class:: AEADCipherContext
526
Alex Stapleton092351d2014-03-09 17:44:43 +0000527 When calling ``encryptor`` or ``decryptor`` on a ``Cipher`` object
Paul Kehrerad6d1642014-01-07 19:10:12 -0600528 with an AEAD mode (e.g.
Alex Gaynorb4818892014-02-06 10:58:50 -0800529 :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM`) the result will
530 conform to the ``AEADCipherContext`` and ``CipherContext`` interfaces. If
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200531 it is an encryption or decryption context it will additionally be an
532 ``AEADEncryptionContext`` or ``AEADDecryptionContext`` instance,
533 respectively. ``AEADCipherContext`` contains an additional method
534 :meth:`authenticate_additional_data` for adding additional authenticated
535 but unencrypted data (see note below). You should call this before calls to
536 ``update``. When you are done call ``finalize`` to finish the operation.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600537
538 .. note::
539
540 In AEAD modes all data passed to ``update()`` will be both encrypted
541 and authenticated. Do not pass encrypted data to the
542 ``authenticate_additional_data()`` method. It is meant solely for
543 additional data you may want to authenticate but leave unencrypted.
544
545 .. method:: authenticate_additional_data(data)
546
547 :param bytes data: Any data you wish to authenticate but not encrypt.
548 :raises: :class:`~cryptography.exceptions.AlreadyFinalized`
549
550.. class:: AEADEncryptionContext
551
Alex Stapleton092351d2014-03-09 17:44:43 +0000552 When creating an encryption context using ``encryptor`` on a ``Cipher``
553 object with an AEAD mode such as
554 :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` an object
555 conforming to both the ``AEADEncryptionContext`` and ``AEADCipherContext``
556 interfaces will be returned. This interface provides one
557 additional attribute ``tag``. ``tag`` can only be obtained after
558 ``finalize`` has been called.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600559
560 .. attribute:: tag
561
562 :return bytes: Returns the tag value as bytes.
563 :raises: :class:`~cryptography.exceptions.NotYetFinalized` if called
Alex Gaynorfb843aa2014-02-25 11:37:36 -0800564 before the context is finalized.
Paul Kehrerad6d1642014-01-07 19:10:12 -0600565
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200566.. class:: AEADDecryptionContext
567
568 .. versionadded:: 1.9
569
570 When creating an encryption context using ``decryptor`` on a ``Cipher``
571 object with an AEAD mode such as
572 :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` an object
573 conforming to both the ``AEADDecryptionContext`` and ``AEADCipherContext``
574 interfaces will be returned. This interface provides one additional method
575 :meth:`finalize_with_tag` that allows passing the authentication tag for
576 validation after the ciphertext has been decrypted.
577
578 .. method:: finalize_with_tag(tag)
579
Paul Kehrer5fb10212017-05-02 12:04:53 -0500580 .. note::
581
582 This method is not supported when compiled against OpenSSL 1.0.1.
583
Philipp Gesang2e84daa2017-05-02 15:28:33 +0200584 :param bytes tag: The tag bytes to verify after decryption.
585 :return bytes: Returns the remainder of the data.
586 :raises ValueError: This is raised when the data provided isn't
587 a multiple of the algorithm's block size, if ``min_tag_length`` is
588 less than 4, or if ``len(tag) < min_tag_length``.
589 :raises NotImplementedError: This is raised if the version of the
590 OpenSSL backend used is 1.0.1 or earlier.
591
592 If the authentication tag was not already supplied to the constructor
593 of the :class:`~cryptography.hazmat.primitives.ciphers.modes.GCM` mode
594 object, this method must be used instead of
595 :meth:`~cryptography.hazmat.primitives.ciphers.CipherContext.finalize`.
596
Paul Kehrer513b7cb2015-02-12 17:31:24 -0600597.. class:: CipherAlgorithm
598
599 A named symmetric encryption algorithm.
600
601 .. attribute:: name
602
603 :type: str
604
605 The standard name for the mode, for example, "AES", "Camellia", or
606 "Blowfish".
607
608 .. attribute:: key_size
609
610 :type: int
611
612 The number of bits in the key being used.
613
614
615.. class:: BlockCipherAlgorithm
616
617 A block cipher algorithm.
618
619 .. attribute:: block_size
620
621 :type: int
622
623 The number of bits in a block.
624
625Interfaces used by the symmetric cipher modes described in
626:ref:`Symmetric Encryption Modes <symmetric-encryption-modes>`.
627
628.. currentmodule:: cryptography.hazmat.primitives.ciphers.modes
629
630.. class:: Mode
631
632 A named cipher mode.
633
634 .. attribute:: name
635
636 :type: str
637
638 This should be the standard shorthand name for the mode, for example
639 Cipher-Block Chaining mode is "CBC".
640
641 The name may be used by a backend to influence the operation of a
642 cipher in conjunction with the algorithm's name.
643
644 .. method:: validate_for_algorithm(algorithm)
645
Alex Gaynor2c526052015-02-24 10:55:28 -0800646 :param cryptography.hazmat.primitives.ciphers.CipherAlgorithm algorithm:
Paul Kehrer513b7cb2015-02-12 17:31:24 -0600647
648 Checks that the combination of this mode with the provided algorithm
649 meets any necessary invariants. This should raise an exception if they
650 are not met.
651
652 For example, the
653 :class:`~cryptography.hazmat.primitives.ciphers.modes.CBC` mode uses
654 this method to check that the provided initialization vector's length
655 matches the block size of the algorithm.
656
657
658.. class:: ModeWithInitializationVector
659
660 A cipher mode with an initialization vector.
661
662 .. attribute:: initialization_vector
663
664 :type: bytes
665
666 Exact requirements of the initialization are described by the
667 documentation of individual modes.
668
669
670.. class:: ModeWithNonce
671
672 A cipher mode with a nonce.
673
674 .. attribute:: nonce
675
676 :type: bytes
677
678 Exact requirements of the nonce are described by the documentation of
679 individual modes.
680
681
Paul Kehrer4ab60592015-02-13 09:06:48 -0600682.. class:: ModeWithAuthenticationTag
683
684 A cipher mode with an authentication tag.
685
686 .. attribute:: tag
687
688 :type: bytes
689
690 Exact requirements of the tag are described by the documentation of
691 individual modes.
692
693
Alex Gaynorab5f0112013-11-08 10:34:00 -0800694
695.. _`described by Colin Percival`: http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html
Alex Stapleton092351d2014-03-09 17:44:43 +0000696.. _`recommends a 96-bit IV length`: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
Alex Gaynor64f1f422017-02-27 22:25:37 -0500697.. _`NIST SP-800-38D`: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38D.pdf
Alex Gaynor111aff22015-02-17 14:47:49 -0800698.. _`Communications Security Establishment`: https://www.cse-cst.gc.ca
Alex Gaynor62012302015-02-17 10:49:22 -0800699.. _`encrypt`: https://ssd.eff.org/en/module/what-encryption
Alex Gaynor6422d832016-03-06 21:40:57 -0500700.. _`CRYPTREC`: https://www.cryptrec.go.jp/english/
Alex Gaynor543031a2015-02-16 20:27:35 -0800701.. _`significant patterns in the output`: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29
Paul Kehrere5dc1222014-02-20 16:19:32 -0600702.. _`International Data Encryption Algorithm`: https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm
Alex Gaynore51236d2016-11-06 10:13:35 -0500703.. _`OpenPGP`: http://openpgp.org