Implémentation de l'algorithme de chiffrement Serpent en python3
Project description
py-serpent
Informations
Implémentation de l'algorithme de chiffrement Serpent en python3, basé sur le travail de Frank Stajano
Chiffrement de bloc de 128bits avec une clés de 256bits
Remplissage de bloc incomplet avec utilisation du padding RFC2040 ou CipherText Stealing (pour ECB et CBC)
Fonctionnement possible en ECB, CBC, PCBC et CFB
Hashage du mot de passe et du vecteur d'initialisation en pbkdf2_hmac sha256 avec un salt aléatoire
Prérequis
- Python 3
- Module Python 3:
- bitstring
Installation
pip install zpp_serpent
Utilisation
Electronic codebook (ECB)
Chiffrement
encrypted = zpp_serpent.encrypt_ECB(cleartext, password)
Dechiffrement
plain = zpp_serpent.decrypt_ECB(encrypted,password)
En paramètre supplémentaire, nous pouvons mettre:
- hash_type = pour choisir l'algorithme de hashage utilisé pour la clé
- lvl = 1 (pour padding RFC2040) ou 2 (pour CTS)
Cipher block chaining (CBC)
Chiffrement
encrypted = zpp_serpent.encrypt_CBC(cleartext, password)
Dechiffrement
plain = zpp_serpent.decrypt_CBC(encrypted, password)
En paramètre supplémentaire, nous pouvons mettre:
- hash_type = pour choisir l'algorithme de hashage utilisé pour la clé
- lvl = 1 (pour padding RFC2040) ou 2 (pour CTS)
Propagating cipher block chaining (PCBC)
Chiffrement
encrypted = zpp_serpent.encrypt_PCBC(cleartext, password)
Dechiffrement
plain = zpp_serpent.decrypt_PCBC(encrypted, password)
En paramètre supplémentaire, nous pouvons mettre:
- hash_type = pour choisir l'algorithme de hashage utilisé pour la clé
Cipher feedback (CFB)
Chiffrement
encrypted = zpp_serpent.encrypt_CFB(cleartext, password)
Dechiffrement
plain = zpp_serpent.decrypt_CFB(encrypted, password)
En paramètre supplémentaire, nous pouvons mettre:
- hash_type = pour choisir l'algorithme de hashage utilisé pour la clé
Technique de remplissage
Padding RFC2040
La méthode padding RFC2040 est une technique largement utilisé pour le remplissage de bloc imcomplet. Elle se base sur un modèle qui varie en fonction de la taille d'un bloc à remplir.
Supposons qu'un bloc ne fasse que 112bits au lieu des 128bits nécessaire. Il faut donc trouver une méthode de combler le vide avec une modèle qui pourra être retiré lors du déchiffrement. Avec cette méthode, nous allons remplir la fin du bloc par autant d'octet que nécessaire, avec pour valeur le nombre d'octet que nous devons rajouter. Dans notre exemple, il nous manque 2 octets pour arriver à 128bits. Nous devons donc ajouter à la fin du bloc 2 Octets avec la valeur hexadécimal 02 pour remplir complètement ce bloc.
Pour le déchiffrement, nous allons analyser les modèles en fin de bloc pour déterminer si ce sont des blocs qui ont été rajoutés et qui doivent être enlevés.
CipherText Stealing (CTS)
La méthode de vol de texte chiffré (CipherText Stealing) permet le remplissage de bloc incomplet tout en évitant d'augmenter la taille du texte comme peu le faire le padding RFC2040. De plus, elle limite les attaques dit Padding oracle attack qui est la faiblesse du padding RFC2040 sur du chiffrement ECB et CBC. Cette méthode se base sur le traitement des deux derniers blocs d'un message et sur le double chiffrement d'une partie d'un des deux blocs.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file zpp_serpent-2.2.2.tar.gz
.
File metadata
- Download URL: zpp_serpent-2.2.2.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bb595030b7e914ffcb2bf9ca87e3509891c4eb3a5744df721a02b3991093e3c |
|
MD5 | 53cda00a313623f9fe1a6db0d0b2c682 |
|
BLAKE2b-256 | 3674dae4531b59afecc9c52426d5a8360cc6ba48a58c468b13c7f1ca9676be5f |
File details
Details for the file zpp_serpent-2.2.2-py3-none-any.whl
.
File metadata
- Download URL: zpp_serpent-2.2.2-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59f1c97792c6bf22ff6a97eb7ac9f6a20f045ab06e10ebd18c7ef14805123227 |
|
MD5 | 5b620bb8b26b2ae804372a3ca2e0eb22 |
|
BLAKE2b-256 | 7e9df37eff470964c04ae8e169c79aa95124b3e109d16b29e755918d9abe4bab |