Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zpp_serpent-2.2.2.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

zpp_serpent-2.2.2-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

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

Hashes for zpp_serpent-2.2.2.tar.gz
Algorithm Hash digest
SHA256 3bb595030b7e914ffcb2bf9ca87e3509891c4eb3a5744df721a02b3991093e3c
MD5 53cda00a313623f9fe1a6db0d0b2c682
BLAKE2b-256 3674dae4531b59afecc9c52426d5a8360cc6ba48a58c468b13c7f1ca9676be5f

See more details on using hashes here.

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

Hashes for zpp_serpent-2.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 59f1c97792c6bf22ff6a97eb7ac9f6a20f045ab06e10ebd18c7ef14805123227
MD5 5b620bb8b26b2ae804372a3ca2e0eb22
BLAKE2b-256 7e9df37eff470964c04ae8e169c79aa95124b3e109d16b29e755918d9abe4bab

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page