ABP

De MazeGroup Wiki
ABP
Le logo de ABP.
Le logo de ABP.
Présentation
Type

Méthode de cryptage

Date de création

31 mars 2025

Nom de code du projet

ABP

Auteur(s)
License
Temps de développement

Débuté.

ABP (Additional Binary Patterns) est un algorithme de cryptage de chaînes de caractères, conçu le 31 mars 2025. Il repose sur l'utilisation d'une table de patterns (motifs) pour transformer un texte de manière réversible.

Fonctionnement

Une table de patterns est un ensemble de sous-ensembles non vides d'octets. Chaque sous-ensemble (ou pattern) a une taille qui peut varier indépendamment des autres.

Chiffrement

Pour encoder une chaîne de caractères avec ABP, on suit ces étapes :

  • Convertir le texte en une suite d’octets (UTF-8).
  • Appliquer chaque pattern de la table successivement sur ces octets :
    • Additionner l’octet du texte avec l’octet du pattern correspondant.
    • Si la somme dépasse 255, revenir à 0 (modulo 256).
    • Répéter l’opération pour tous les caractères du texte, en parcourant les patterns de manière cyclique.

Application en Python

def encode(text: str, patterns: list[list[int]]) -> bytes:
    data = list(text.encode())

    for pattern in patterns:
        for i in range(len(data)):
            data[i] = (data[i] + pattern[i % len(pattern)]) % 256

    return bytes(data)

Déchiffrement

Le déchiffrement suit le même processus en sens inverse :

  • Lire le texte chiffré sous forme d’octets.
  • Appliquer les patterns dans l’ordre inverse :
    • Soustraire l’octet du pattern de l’octet du texte.
    • Si le résultat est négatif, revenir à 255 (modulo 256).
    • Répéter jusqu’à restaurer le texte original.

Application en Python

def decode(ciphertext: bytes, patterns: list[list[int]]) -> str:
    data = list(ciphertext)

    for pattern in reversed(patterns):
        for i in range(len(data)):
            data[i] = (data[i] - pattern[i % len(pattern)]) % 256

    return bytes(data).decode()

Génération de patterns

Les patterns peuvent être définis manuellement ou générés dynamiquement à partir d’une clé. Une méthode nommée K2P (Key to Patterns) permet de dériver une table de patterns à partir du hash d’une clé secrète, assurant ainsi une protection supplémentaire.

Application en Python

import hashlib

def hash_key(key: str) -> bytes:
    sha1 = hashlib.sha1(key.encode()).digest()
    sha256 = hashlib.sha256(key.encode()).digest()
    sha512 = hashlib.sha512(key.encode()).digest()

    combined = sha1 + sha256 + sha512
    return combined

def generate_patterns(key: str, num_patterns: int = 100) -> list:
    hash_data = hash_key(key)
    patterns = []
    offset = 0

    for i in range(num_patterns):
        length = (hash_data[offset] % 62) + 3
        pattern = hash_data[offset:offset + length]

        if len(pattern) < length:
            pattern += hash_data[:length - len(pattern)]

        patterns.append(list(pattern))
        offset = (offset + length) % len(hash_data)

    return patterns