Skip to content

Commit

Permalink
docs: be more specific about the limitation of AE-2
Browse files Browse the repository at this point in the history
This gives more specific limitations about AE-2, rather than just depending on
external links.

This is to allow people to make more informed decisions on whether to use it or
not. I am maybe torn on whether to refer to AE-2's "flaws" or "limitations",
but opting to use the word "flaws" since it's stronger and from the point of
view of people's expectations of encryption, more accurate.

This is done in repsonse to the request/discussion at
#93
  • Loading branch information
michalc committed Jan 5, 2024
1 parent 00cf8b5 commit e9964a4
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions docs/advanced-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ This is useful to keep the total number of bytes down as much as possible. This

## Password protection / encryption

The data of ZIP files can be password protected / encrypted by passing a password as the `password` parameter to `stream_zip`.
The data of ZIP files can be password protected / encrypted by passing a password as the `password` parameter to `stream_zip`. This encrypts the data with AES-256, adhering to the [WinZip AE-2 specification](https://www.winzip.com/en/support/aes-encryption/).

```python
import secrets
Expand All @@ -54,10 +54,18 @@ password = secrets.token_urlsafe(32)
encrypted_zipped_chunks = stream_zip(member_files(), password=password)
```

Notes:

1. This encrypts the data with AES-256, adhering to the [WinZip AE-2 specification](https://www.winzip.com/en/support/aes-encryption/).

2. This is seen as more secure than ZipCrypto, the original mechanism of password protecting ZIP files, but fewer clients can open such ZIP files.

3. While a step forward from ZipCrypto, it has flaws that you should be aware of before using it. See ["Attacking and Repairing the WinZip Encryption Scheme" by Tadayoshi Kohno](https://homes.cs.washington.edu/~yoshi/papers/WinZip/winzip.pdf) and [fgrieu's answer to a question about WinZip's AE-1 and AE-2 on Crytography Stack Exchange](https://crypto.stackexchange.com/a/109269/113464).
You should use a long and random password, for example one generated by the [Python secrets module](https://docs.python.org/3/library/secrets.html).

> ### Warnings
>
> AE-2 is seen as more secure than ZipCrypto, the original mechanism of password protecting ZIP files, but fewer clients support AE-2 than ZipCrypto.
>
> More importantly, AE-2 has flaws. These include:
>
> - Not encrypting metadata, for example member file names, modification times, permissions, and sizes.
>
> - Not including sufficient mechanisms to alert recipients if data or metadata has been intercepted and changed. This can itself lead to leakage of information about the original data.
>
> - A higher risk of data leakage when there's a higher number of member files in the ZIP encrypted with the same password, as stream-zip and most other ZIP writers do.
>
> See ["Attacking and Repairing the WinZip Encryption Scheme" by Tadayoshi Kohno](https://homes.cs.washington.edu/~yoshi/papers/WinZip/winzip.pdf) and [fgrieu's answer to a question about WinZip's AE-1 and AE-2 on Crytography Stack Exchange](https://crypto.stackexchange.com/a/109269/113464) for more information.

0 comments on commit e9964a4

Please sign in to comment.