Zaawansowany System Polimorficznego Szyfrowania Danych (Polymorphic Data Encryption System)
Kryptografia klasy wojskowej: Dual-Layer AEAD (AES-256-GCM + ChaCha20-Poly1305), HKDF-SHA256, CSPRNG & Bezpieczna Kompresja.
- 🔒 Polimorficzny Silnik Szyfrujący AEAD: Dynamiczny, zależny od klucza dobór najsilniejszych certyfikowanych algorytmów kryptograficznych:
- Tryb 0: Sprzętowo akcelerowany AES-256-GCM (NIST SP 800-38D)
- Tryb 1: ChaCha20-Poly1305 (RFC 8439 / IETF)
- Tryb 2: Kaskada Dual-Layer (ChaCha20-Poly1305 + AES-256-GCM) – podwójne szyfrowanie i uwierzytelnianie
- Tryb 3: Kaskada Dual-Layer (AES-256-GCM + ChaCha20-Poly1305)
- 🔑 64-znakowe Klucze CSPRNG: Generowanie kluczy o entropii przekraczającej 360 bitów z prefiksem
#cmprzy użyciu kryptograficznie bezpiecznego generatora liczb pseudolosowych (secrets). - 🛡️ KDF HKDF-SHA256 (RFC 5869): Bezpieczne wyprowadzanie podkluczy i parametrów polimorficznych z 256-bitową unikalną solą kryptograficzną (
Salt). - 🚫 Zero Key Oracle: Całkowity brak wycieków hashy w nagłówku pliku. Weryfikacja poprawności klucza oraz integralności danych odbywa się w czasie stałym poprzez tagi AEAD (pełna odporność na ataki słownikowe GPU oraz Padding Oracle).
- 📦 Bezpieczna Kompresja & Archiwizacja: Automatyczne pakowanie i kompresja pojedynczych plików oraz całych drzew katalogów (
tar.gz) z wbudowaną ochroną przed atakami Path Traversal / Zip Slip. - 🌐 Wielojęzyczność (i18n): Pełna obsługa języka polskiego (PL) oraz angielskiego (EN) z przełącznikiem w locie.
- 💻 Podwójny Interfejs: Kolorowe interaktywne menu terminala (TUI) oraz kompletny interfejs wiersza poleceń (CLI) do automatyzacji i skryptów.
Kontener binarny .cm (wersja 2) posiada ściśle zdefiniowaną strukturę bez wycieków metadanych:
┌───────────┬─────────┬─────────┬──────────┬──────────┬──────────┬────────────────────────┐
│ MAGIC │ VERSION │ FLAGS │ SALT │ NONCE1 │ NONCE2 │ ENCRYPTED PAYLOAD + │
│ "CM25" │ 0x02 │ 0x01 │ (32 B) │ (12 B) │ (12 B) │ AEAD AUTH TAG (16 B) │
│ (4 B) │ (1 B) │ (1 B) │ │ │ │ │
└───────────┴─────────┴─────────┴──────────┴──────────┴──────────┴────────────────────────┘
flowchart TD
K["64-char Key (#cm...)"] --> HKDF["HKDF-SHA256 Extract & Expand"]
S["32-byte Random Salt"] --> HKDF
HKDF --> AES_KEY["AES-256 Key (32B)"]
HKDF --> CHACHA_KEY["ChaCha20 Key (32B)"]
HKDF --> MORPH["Morph Vector (Mode 0..3)"]
DATA["Dane źródłowe (Plik / Folder)"] --> COMPRESS["Kompresja Tar.GZ"]
COMPRESS --> ENGINE{"Silnik Polimorficzny"}
AES_KEY --> ENGINE
CHACHA_KEY --> ENGINE
MORPH --> ENGINE
ENGINE -->|Mode 0| M0["AES-256-GCM"]
ENGINE -->|Mode 1| M1["ChaCha20-Poly1305"]
ENGINE -->|Mode 2| M2["ChaCha20-Poly1305 ➔ AES-256-GCM"]
ENGINE -->|Mode 3| M3["AES-256-GCM ➔ ChaCha20-Poly1305"]
M0 --> CM_OUT[".cm Container"]
M1 --> CM_OUT
M2 --> CM_OUT
M3 --> CM_OUT
| Cecha / Zagrożenie | Wersja Poprzednia (v1) | Nowa Wersja (v2 - Ekspercka) |
|---|---|---|
| Szyfrowanie | Własny AES-CBC + operacje XOR | Certyfikowany sprzętowo AES-256-GCM & ChaCha20-Poly1305 |
| Integralność i Uwierzytelnienie | Ręczny HMAC-SHA256 z błędami nagłówka | Zintegrowany AEAD Tag (128-bit) weryfikowany w czasie stałym |
| Atak Słownikowy na GPU | ❌ Podatny (jawny hash SHA256(key)[:10] w nagłówku) |
✅ Odporny (Zero Oracle – brak wycieku hasha klucza) |
| Generator Losowości | random.choice() (Mersenne Twister - przewidywalny) |
secrets.choice() / secrets.token_bytes() (CSPRNG) |
| Bezpieczeństwo Archiwum | Podatność Path Traversal (Zip Slip) | Pełna sanityzacja ścieżek safe_extract_archive |
| Zarządzanie Pamięcią | Brak kompresji, ładowanie całości do RAM | Strumieniowe przetwarzanie tar.gz z kompresją |
Program wymaga środowiska Python 3.8+ oraz bibliotek:
pip install cryptography coloramaUruchom program bez parametrów:
python ciphermorph.pyWyświetli się menu terminala umożliwiające:
- Szyfrowanie folderu lub pojedynczego pliku z opcją automatycznego zapisu wygenerowanego klucza.
- Odszyfrowanie kontenera
.cm(wpisanie klucza ręcznie lub podanie ścieżki do pliku_key.txt). - Generowanie nowych bezpiecznych kluczy 64-znakowych.
- Przełączanie języka (Polski / English).
CipherMorph można w prosty sposób integrować ze skryptami i procesami CI/CD:
# Szyfrowanie folderu z automatycznym generowaniem i zapisem klucza:
python ciphermorph.py encrypt sciezka/do/folderu --save-key
# Szyfrowanie pojedynczego pliku z własnym kluczem i wybranym plikiem wyjściowym:
python ciphermorph.py encrypt dokument.pdf -k "#cm..." -o bezpieczny.cm# Odszyfrowanie przy użyciu klucza w tekście:
python ciphermorph.py decrypt bezpieczny.cm -k "#cm..." -o ./odkodowane
# Odszyfrowanie przy użyciu pliku z kluczem:
python ciphermorph.py decrypt bezpieczny.cm -k folder_key.txt -o ./odkodowane# Wyświetlenie nowego klucza:
python ciphermorph.py genkey
# Zapis nowego klucza do pliku:
python ciphermorph.py genkey -o moj_klucz.txtW projekcie przygotowano kompletny zestaw testów jednostkowych i integracyjnych pokrywających 100% kluczowych modułów.
Aby uruchomić testy:
python tests/test_ciphermorph.pyZakres testów obejmuje m.in.:
- Poprawność generowania i entropię 64-znakowych kluczy CSPRNG.
- Wszystkie 4 tryby silnika polimorficznego AEAD (roundtrip testy).
- Wykrywanie manipulacji danymi (odporność na modyfikację pojedynczych bitów).
- Natychmiastowe odrzucenie błędnych kluczy bez wycieków informacji.
- Szyfrowanie i odzyskiwanie złożonych struktur katalogów z zachowaniem sum kontrolnych SHA-256.
- Ochronę przed atakami Path Traversal (Zip Slip).
- Spójność słowników tłumaczeń wielojęzycznych.
Projekt udostępniany jest na warunkach licencji MIT. Zobacz plik LICENSE po szczegóły.