
Libreria di crittografia ibrida post-quantistica che combina X25519 + ML-KEM-768 con AES-256-GCM
Server di crittografia ibrida post-quantum e gestione delle chiavi.
Citadel combina X25519 + ML-KEM-768 per l'incapsulamento delle chiavi e AES-256-GCM per la crittografia dei dati, seguendo l'approccio ibrido del NIST per la transizione post-quantum. Le applicazioni crittografano e decrittografano i dati tramite un'API REST. Citadel gestisce le chiavi — generazione, rotazione, revoca, controllo degli accessi e registrazione audit.
Stato: Implementazione funzionante. Non sottoposta ad audit. Nessun dispiegamento in produzione. Vedi Sicurezza più sotto.
Your Application Citadel Database
| | |
|-- POST /encrypt ------->| |
| |-- hybrid KEM (X25519+ML-KEM) |
| |-- derive AES-256 key (HKDF) |
| |-- encrypt with AES-256-GCM |
|<-- encrypted blob ------| |
| |
|-- store blob ------------------------------------------>|
La tua applicazione non tocca mai il materiale chiave grezzo. Il blob crittografato è auto-contenuto — include la chiave avvolta, gli identificatori dell'algoritmo e il ciphertext. Puoi conservarlo in qualsiasi database. Per decrittografare, invialo indietro a Citadel con lo stesso AAD e contesto.
citadel-envelope Nucleo di crittografia ibrida (X25519 + ML-KEM-768 + AES-256-GCM)
citadel-keystore Gestione del ciclo di vita delle chiavi, gerarchia a 4 livelli, politiche adattive alle minacce
citadel-api Server HTTP, autenticazione tramite chiave API con ambiti, limitazione di velocità, dashboard in tempo reale
# Clona
git clone https://github.com/mrcord77/rust_citadel.git
cd rust_citadel
# Imposta la tua chiave API admin
echo -n "your-secret-key" | sha256sum | cut -d' ' -f1
# Copia l'hash
# Avvia
CITADEL_API_KEY_HASH=<incolla-hash> docker compose up -d
# Verifica
curl http://localhost:3000/health
# {"status":"ok","version":"0.2.0"}
Dashboard: http://localhost:3000
Richiede Rust 1.75+.
cargo build --release -p citadel-api
CITADEL_API_KEY="your-secret-key" CITADEL_SEED_DEMO=true ./target/release/citadel-api
import requests
api = "http://localhost:3000"
headers = {"Authorization": "Bearer your-secret-key"}
# Crittografa
r = requests.post(f"{api}/api/keys/{dek_id}/encrypt", headers=headers, json={
"plaintext": "sensitive data",
"aad": "record-001", # lega il ciphertext a questo record
"context": "patient-records" # separazione di dominio
})
blob = r.json()
# Decrittografa
r = requests.post(f"{api}/api/decrypt", headers=headers, json={
"blob": blob,
"aad": "record-001",
"context": "patient-records"
})
plaintext = r.json()["plaintext"]
Vedi citadel_example.py per un esempio funzionante completo con binding AAD, rotazione delle chiavi e comportamento dell'applicazione sensibile alle minacce.
# Stato
curl http://localhost:3000/api/status -H "Authorization: Bearer $KEY"
# Elenca chiavi
curl http://localhost:3000/api/keys -H "Authorization: Bearer $KEY"
# Crittografa
curl -X POST http://localhost:3000/api/keys/$DEK_ID/encrypt \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"plaintext":"hello","aad":"test","context":"demo"}'
Root Key
└── Domain Key (per ambiente / business unit)
└── KEK — Key Encrypting Key (avvolge DEK)
└── DEK — Data Encrypting Key (crittografa i dati dell'applicazione)
Segue NIST SP 800-57. Ogni livello contiene il raggio di esplosione di una compromissione — una DEK divulgata non espone altre DEK perché la KEK è separata.
| Ambito | Permessi |
|---|---|
read | Visualizza chiavi, stato, metriche, livello di minaccia |
encrypt | Crittografa e decrittografa dati |
admin implica tutti gli altri ambiti. Principio del minimo privilegio: assegna dashboard di monitoraggio a read, servizi applicativi a read + encrypt, strumenti di amministrazione a admin.
Citadel monitora gli eventi di sicurezza e regola automaticamente le politiche chiave:
Eventi che aumentano il livello di minaccia: autenticazione fallita, fallimenti di decrittografia, modelli di accesso rapidi, escalation manuale. Il punteggio decade nel tempo.
Costruzione ibrida: entrambi i segreti condivisi vengono concatenati e alimentati tramite HKDF. La sicurezza è garantita se uno qualsiasi tra X25519 o ML-KEM-768 rimane sicuro.
version[1] || suite_kem[1] || suite_aead[1] || flags[1] || kem_ct_len[2] ||
x25519_ephemeral_pk[32] || mlkem768_ct[1088] || nonce[12] || aead_ct[variable]
Auto-descrittivo, versionato, senza negoziazione (previene attacchi di downgrade). Vedi SPEC.md per la specifica completa.
subtle previene attacchi di temporizzazioneZeroizing<T>, azzerati al rilascioCitadel è software non sottoposto ad audit.
L'implementazione utilizza primitive standardizzate dal NIST tramite crate Rust consolidate (ml-kem, x25519-dalek, aes-gcm, hkdf). Non implementa alcun algoritmo crittografico. Il valore sta nella composizione corretta, non in matematica nuova.
Cosa è stato fatto:
Cosa NON è stato fatto:
Non utilizzare per dati sensibili senza una revisione indipendente. Vedi SECURITY.md per la segnalazione di vulnerabilità.
Mappatura su 34 controlli NIST SP 800-57: 26 soddisfatti, 7 parziali, 1 lacuna. Vedi COMPLIANCE_MATRIX.md per la mappatura completa.
Framework rilevanti: NIST SP 800-57 (gestione chiavi), CNSA 2.0 (tempistica PQC), HIPAA (crittografia a riposo), SOC 2 (controlli di accesso e audit).
rust_citadel/
├── citadel-envelope/ # Libreria core di crittografia ibrida
│ ├── src/
│ │ ├── envelope.rs # Operazioni di crittografia/decrittografia
│ │ ├── kem.rs # KEM ibrido X25519 + ML-KEM-768
│ │ ├── kdf.rs # Derivazione chiave HKDF-SHA256
│ │ ├── wire.rs # Codifica/decodifica formato wire
│ │ ├── aead.rs # Wrapper AES-256-GCM
│ │ ├── aad.rs # Dati autenticati aggiuntivi
│ │ ├── error.rs # Tipi di errore uniformi
│ │ └── sdk.rs # API di alto livello
│ ├── tests/ # Test KAT + roundtrip
│ └── fuzz/ # Target fuzz
├── citadel-keystore/ # Gestione del ciclo di vita delle chiavi
│ └── src/
│ ├── keystore.rs # CRUD chiavi + macchina a stati
│ ├── policy.rs # Politiche dei periodi crittografici
│ ├── threat.rs # Intelligence sulle minacce adattiva
│ ├── storage.rs # Archiviazione chiavi su file
│ ├── audit.rs # Registro audit con catena di integrità
│ └── types.rs # Tipi e stati delle chiavi
├── citadel-api/ # Server HTTP
│ └── src/
│ ├── main.rs # Route API, autenticazione, limitazione velocità
│ └── dashboard.html # Dashboard di sicurezza in tempo reale
├── citadel_example.py # Esempio di integrazione Python
├── Backup-Citadel.ps1 # Strumenti di backup/ripristino
├── docker-compose.yml # Dispiegamento di sviluppo
├── docker-compose-production.yml # Produzione con TLS
├── SPEC.md # Specifica del formato wire
├── THREAT_MODEL.md # Obiettivi di sicurezza e modello dell'attaccante
├── COMPLIANCE_MATRIX.md # Mappatura controlli NIST 800-57
└── CITADEL_OVERVIEW.md # Panoramica commerciale
Questo progetto è concesso in licenza duale:
Se utilizzi questo software in un ambiente commerciale o non desideri rispettare i termini AGPL, devi ottenere una licenza commerciale.
Vedi COMMERCIAL_LICENSE.md per i termini commerciali.
Il testo completo dell'AGPL è fornito in AGPL-3.0.txt e COPYING.
Contatto: [email protected]
Andre Cordero — [email protected]
| Endpoint | Metodo | Ambito | Descrizione |
|---|
/health | GET | — | Controllo di integrità |
/api/status | GET | read | Livello di minaccia, conteggio chiavi |
/api/metrics | GET | read | Metriche di sicurezza |
/api/keys | GET | read | Elenca tutte le chiavi |
/api/keys | POST | manage | Genera nuova chiave |
/api/keys/:id | GET | read | Ottieni dettagli chiave |
/api/keys/:id/activate | POST | manage | Attiva una chiave in sospeso |
/api/keys/:id/rotate | POST | manage | Ruota chiave (nuova versione) |
/api/keys/:id/revoke | POST | manage | Revoca permanentemente chiave |
/api/keys/:id/destroy | POST | manage | Distruggi materiale chiave |
/api/keys/:id/encrypt | POST | encrypt | Crittografa dati |
/api/decrypt | POST | encrypt | Decrittografa dati |
/api/threat | GET | read | Dettagli intelligence sulle minacce |
/api/policies | GET | read | Politiche chiave attive |
/api/auth/whoami | GET | read | Info chiave API corrente |
/api/auth/keys | GET | admin | Elenca chiavi API |
/api/auth/keys | POST | admin | Crea chiave API |
/api/auth/keys/:id | DELETE | admin | Revoca chiave API |
manage | Crea, ruota, revoca, distruggi chiavi |
admin | Tutto quanto sopra + gestisci chiavi API |
| Livello | Attivazione | Risposta |
|---|
| BASSO | Operazioni normali | Periodi crittografici standard |
| GUARDATO | Anomalie minori | Rotazione leggermente più stretta |
| ELEVATO | Modelli sospetti | Programmi di rotazione compressi |
| ALTO | Indicatori di minaccia attivi | Rotazione forzata, limiti di utilizzo ridotti |
| CRITICO | Sotto attacco | Restrizioni massime |
| Componente | Algoritmo | Standard |
|---|
| Incapsulamento chiave (classico) | X25519 ECDH | RFC 7748 |
| Incapsulamento chiave (post-quantum) | ML-KEM-768 | FIPS 203 |
| Crittografia dati | AES-256-GCM | NIST SP 800-38D |
| Derivazione chiave | HKDF-SHA256 | NIST SP 800-56C |
| Documento | Pubblico |
|---|
| SPEC.md | Specifica del formato wire |
| THREAT_MODEL.md | Obiettivi di sicurezza e presupposti |
| COMPLIANCE_MATRIX.md | Mappatura conformità NIST 800-57 |
| CITADEL_OVERVIEW.md | Posizionamento commerciale |
| SECURITY.md | Segnalazione vulnerabilità |
| API_FREEZE.md | Garanzie di stabilità API |
| DEPLOYMENT.md | Guida al dispiegamento in produzione |
| QUICKSTART.md | Per iniziare |