-
Notifications
You must be signed in to change notification settings - Fork 0
2 Funzionamento
- Il funzionamento del Motore ๐ช Panzer v7.3 si basa sull'Isolamento dei Flussi, sull'Erogazione Polimorfa ๐๐ญ basata sui profili hardware della rete e su pilastri di sicurezza ๐ "Zero-Trust" progettati per garantire la massima tolleranza ai guasti.
Note
๐๐ญ Il Regolatore di Flusso Polimorfo si attiva a ogni singola richiesta dell'utente tramite la routine assegnaFlussoPolimorfo, decidendo in tempo reale se instradare la richiesta via Network-First o Stale-While-Revalidate (SWR) in base ai profili hardware.
Warning
In caso di fallimento del test crittografico a runtime sul Canary Data (CONFIG.vaultCanaryText), il Service Worker attiva la routine distruttiva di Emergency Wipe, cancellando l'intera stiva per prevenire violazioni di tipo Cache Poisoning o corruzioni strutturali.
navigator.connection. Non disabilitare le API di telemetria di rete.
graph LR
%% Stili Generali
classDef default fill:#1a1a1a,stroke:#333,stroke-width:2px,color:#fff;
classDef pa fill:#2b1d1d,stroke:#ff5555,stroke-width:2px,color:#ff9999;
classDef panzer fill:#1d2b1d,stroke:#55ff55,stroke-width:3px,color:#99ff99;
classDef root fill:#2d2d3d,stroke:#8888ff,stroke-width:2px,color:#ccccff;
%% Nodo Radice
ROOT[๐ฅVs๐ฅ Confronto Standard di Sicurezza]:::root
%% Ramo Standard Minimi PA
ROOT --> PA[โ Software PA Standard<br>Livello Commerciale Comune]:::pa
PA --> PA_MEM[๐ง Gestione Memoria Volatile]:::pa
PA_MEM --> PA_MEM_VULN[๐ Dati sensibili in chiaro nella RAM<br>Soggetti a Memory Scraping fino al Garbage Collector]:::pa
PA --> PA_NET[๐ Resilienza di Rete]:::pa
PA_NET --> PA_NET_VULN[๐ Dipendenza totale da connettivitร attiva<br>UI bloccata o errore 404 in caso di blackout]:::pa
PA --> PA_INTEG[๐ฆ Integritร Applicativa]:::pa
PA_INTEG --> PA_INTEG_VULN[โ ๏ธ Cache del browser vulnerabile<br>Nessun controllo binario sui file iniettati]:::pa
PA --> PA_TELE[๐ Telemetria e Log]:::pa
PA_TELE --> PA_TELE_VULN[๐ฌ Log di debug dispersi e attivi in produzione<br>Briciole di pane informative per reverse engineering]:::pa
%% Ramo Architettura Panzer v7.3
ROOT --> PZ[๐ช Motore Panzer v7.3<br>Architettura Zero-Trust Resiliente]:::panzer
PZ --> PZ_MEM[๐ง Gestione Memoria Volatile]:::panzer
PZ_MEM --> PZ_MEM_SEC[๐ Zero-Trust Memory: Sovrascrittura dei buffer<br>con fill 0 e purga atomica โข๏ธ immediata dei dati]:::panzer
PZ --> PZ_NET[๐ Resilienza di Rete]:::panzer
PZ_NET --> PZ_NET_SEC[๐ก๏ธ Offline Bunker Mode: Dynamic Adaptive Network Resiliency<br>con UI di fallback native a prova di isolamento]:::panzer
PZ --> PZ_INTEG[๐ฆ Integritร Applicativa]:::panzer
PZ_INTEG --> PZ_INTEG_SEC[๐ **Validazione Binaria**: Controllo tramite Magic Numbers<br>per impedire la manipolazione della cache]:::panzer
PZ --> PZ_TELE[๐ Telemetria e Log]:::panzer
PZ_TELE --> PZ_TELE_SEC[โ๏ธ Telemetria Forense]:::panzer
Il motore adotta un algoritmo dinamico gestito dalla routine assegnaFlussoPolimorfo per scongiurare il blocco dell'interfaccia in caso di connettivitร degradata (fenomeno della "Lie-Fi"), orchestrato dai parametri di CONFIG.networkResilient.profiles e strutturato in 5 Sezioni operative distinte:
๐น ๐ฅ๐ Profilazione Hardware della Rete (`assegnaFlussoPolimorfo`):
Il sistema calcola in tempo reale un punteggio di efficienza basato sui parametri hardware di
navigator.connection (downlink e RTT), commutando istantaneamente la strategia di erogazione e mappando i limiti estratti dal dizionario dei profili:
| ๐ก Profilo Rete | ๐ Limite Parallelismo (limit) |
โณ Timeout di Connessione (timeout) |
๐๐ญ Strategia ed Erogazione Polimorfa |
|---|---|---|---|
| โก Ultrafast | ๐ฆ 12 file | โฑ๏ธ 15 secondi | Forza ๐ Network-First (Massima freschezza asset dal server) |
| ๐ Fast | ๐ฆ 8 file | โฑ๏ธ 20 secondi | Forza ๐ Network-First (Massima freschezza asset dal server) |
| ๐ข Medium | ๐ฆ 4 file | โฑ๏ธ 45 secondi | ๐ Network-First se cache vuota, altrimenti commuta su ๐ SWR
|
| ๐ Low | ๐ฆ 2 file | โฑ๏ธ 90 secondi | Forza ๐ Stale-While-Revalidate (Continuitร via stiva locale) |
| ๐จ Verylow | ๐ฆ 1 file | โฑ๏ธ 120 secondi | ๐ท๐ฎโโ๏ธ Blocco d'ufficio dello Smart Sync ๐ / Solo erogazione locale ๐๏ธ |
graph TD
%% Definizione degli stili visivi per massima leggibilitร
classDef inizio fill:#1f4e79,stroke:#113355,stroke-width:2px,color:#fff;
classDef sezione fill:#f5f5f5,stroke:#333,stroke-width:2px,color:#000;
classDef successo fill:#d4edda,stroke:#28a745,stroke-width:2px,color:#155724;
classDef recupero fill:#fff3cd,stroke:#ffc107,stroke-width:2px,color:#856404;
classDef errore fill:#f8d7da,stroke:#dc3545,stroke-width:2px,color:#721c24;
%% FLUSSO DEL CICLO DELLE 5 SEZIONI
A[๐ฑ L'utente clicca o chiede una pagina] --> B(๐ท Sezione I: Pulizia del Percorso)
class A inizio;
class B sezione;
B --> C{๐ก Sezione II: C'รจ Internet?}
class C sezione;
%% RAMO INTERNET PRESENTE
C -- โก Sรฌ, Internet Funziona --> D[๐ฅ Scarica i dati freschi dal Server]
D --> E[๐ฆ Salva una copia protetta in Cassaforte]
E --> F[โ
Mostra la pagina aggiornata all'utente]
class D successo;
class E successo;
class F successo;
%% RAMO INTERNET FALLITO / LIE-FI
C -- ๐ข No / Internet Troppo Lento --> G(๐ Sezione III: Fallback in Cassaforte)
G --> H[๐๏ธ Prende la copia cifrata dal database locale]
H --> I[๐ Decifra i dati in memoria RAM e ๐งน pulisce le tracce]
I --> J[โ ๏ธ Mostra la pagina salvata all'utente]
class G recupero;
class H recupero;
class I recupero;
class J recupero;
%% GESTIONE IMMAGINI (SEZIONE IV)
A --> K(๐ผ๏ธ Sezione IV: Controllo Immagini)
class K sezione;
K --> L{๐ฌ L'immagine principale si carica?}
class L sezione;
L -- โ No, errore caricamento --> M{๐ Esiste un'immagine alternativa variata?}
L -- ๐ฏ Sรฌ --> N[๐ข Mostra l'immagine originale]
class N successo;
M -- ๐ฏ Sรฌ --> O[๐ฆ Mostra la variante alternativa]
M -- ๐ฏ No --> P[๐ Inietta l'immagine di cortesia standard in Base64]
class O recupero;
class P recupero;
%% AVARIA TOTALE (SEZIONE V)
J --> Q{๐ต๏ธโโ๏ธ Sia Internet che Cassaforte hanno fallito?}
F --> Q
class Q sezione;
Q -- ๐จ Sรฌ, Blocco Totale --> R(๐ด Sezione V: Schermata di Cortesia)
R --> S[โ Mostra Pagina d'Errore 503 Sterile con bordo rosso]
class R errore;
class S errore;
Attivato tramite messaggistica IPC dall'evento INIT_DB, il motore di sincronizzazione esegue una bonifica e un allineamento predittivo degli asset tramite logiche combinate:
๐น๐ฆ Controllo dei Vincoli del Profilo:
Il motore interroga `getNetworkProfile`. Se il profilo รจ *Verylow*, il ciclo impone un blocco preventivo (`syncAbortController.abort()`) per non saturare la banda degradata dell'utente.
๐น๐ฅ๐ญ Download in Parallelo Limitato:
๐น Se il profilo lo consente, il motore avvia lo scaricamento delle risorse, rispettando il tetto massimo di file simultanei (limit). L'attesa dei download eseguiti a blocchi paralleli, รจ legata a un dispositivo di sblocco immediato tramite Promise.race competitivo agganciato al segnale di abort. Al minimo comando di annullamento, l'esecuzione si interrompe all'istante, neutralizzando i memory leak e sbloccando i thread su dispositivi mobili datati.
๐น Qualsiasi interruzione lancia un errore controllato (throw) verso un unico catch globale, che si occupa di azzerare in sicurezza lo stato operativo (isSyncing = false). Al termine del ciclo, il sistema espone nei log il conteggio reale e veritiero delle sole risorse effettivamente scaricate ex-novo da rete rispetto a quelle lette dalla cache.
Per impedire attacchi di Cache Poisoning, pagine ingannevoli di captive portal o file corrotti di rete, ogni blob subisce una validazione rigorosa (strict) prima dell'ammissione in stiva:
๐น โ๏ธ๐ Controllo Dimensionale:
Verifica della dimensione minima del file iniettando come sbarramento la mappa delle specifiche interne definita in `CONFIG.minSizeMap`.
๐น ๐งฌ๐ฏ Firma Magica (DNA del File):
Analisi dei primi byte binari (i *Magic Numbers*) per verificare la reale identitร e integritร del dato prima di elaborarlo, rifiutando file con estensioni falsificate.
graph LR
classDef gabbia fill:#f5f5f5,stroke:#333,stroke-width:2px;
classDef ok fill:#d4edda,stroke:#28a745,stroke-width:2px,color:#155724;
classDef ko fill:#f8d7da,stroke:#dc3545,stroke-width:2px,color:#721c24;
A[๐ฅ File Scaricato da Internet] --> B{๐ฌ Sezione I: Firma Corretta?<br>es. 25504446 per PDF signed}
class B gabbia;
B -- ๐จ No, non corrisponde --> C[โ File Corrotto / Alterato: RIFIUTATO]
class C ko;
B -- ๐ฏ Sรฌ, valida --> D{โ๏ธ Sezione II: Peso in Byte<br>supera CONFIG.minSizeMap?}
class D gabbia;
D -- ๐ฏ No, file vuoto --> E[โ File Vuoto / Errore: RIFIUTATO]
class E ko;
D -- ๐ Sรฌ, superato --> F[๐งฌ DNA Check OK: Ammesso in Cache ๐๏ธ]
class F ok;
Il sistema opera una separazione netta dello storage logico locale, tracciato nei log di console con marcatori dedicati e protetto da crittografia hardware-assisted:
Important
โก๏ธ Sicurezza Volatile in RAM:
- ๐ La Master Key รจ un'istanza crittografica non esportabile (extractable: false) isolata nello stato di runtime del worker. Subito dopo l'elaborazione dei Pacchetti Binari ๐ฆ, i buffer temporanei di transito vengono sovrascritti forzatamente tramite Uint8Array.fill(0) ๐งน per eliminare ogni residuo crittografico o dato in chiaro dalla RAM del browser (Anti-Memory Inspection).
๐น๐ฆ๐ก (Bunker), (mappato in `CONFIG.cacheName`
Area protetta per i file core e d'infrastruttura dell'applicazione. Le risorse destinate a questa stiva subiscono una cifratura simmetrica AES-GCM a 256 bit. In fase di lettura offline, il Service Worker estrae l'ArrayBuffer, esegue la decrittazione al volo, pulisce la RAM e serve il file iniettando l'header personalizzato X-PWA-Source: Bunker-Decrypted.
๐น๐ฆ๐ (Magazzino), (mappato in `CONFIG.userCacheName`
Area sussidiaria per le risorse utente dinamiche, volatili e non cifrate, vincolate a una data di scadenza controllata dal Time-To-Live definito in CONFIG.userCacheTTL (pari a 7 giorni).
pie title Allocazione Logica dello Storage nel Client
"๐ฆ๐ก๏ธ CONFIG.cacheName (Bunker - Cifrato AES-GCM)" : 55
"๐ฆ๐ CONFIG.userCacheName (Magazzino Asset Volatili - TTL 7d)" : 35
"๐จ Buffer di Sicurezza (QuotaExceededError Emergency Reserve)" : 10
Il motore implementa una logica di tolleranza ai guasti di tipo distruttivo-rigenerativo interamente sincronizzata con l'interfaccia utente del frontend:
๐น๐ค๐๏ธ Canary Vault Check (`deepVaultValidation`):
All'attivazione del Service Worker, viene eseguito un test crittografico di controllo sul vettore statico binario (Canary Data). Se l'operazione fallisce o le chiavi logiche risultano manomesse, il sistema solleva un blocco di sicurezza immediato (`ACTIVATION_ABORTED_SECURITY_BREACH`) ed esegue un wipe preventivo dell'IndexedDB `PWA_Vault`.
๐น๐๏ธ๐ฅ Tabula Rasa Immediata:
Se il database del Vault o le chiavi logiche in IndexedDB risultano corrotti durante i cicli operativi, il Service Worker cancella istantaneamente tutte le istanze di cache attive legate a `CONFIG.cacheName` e `CONFIG.userCacheName`.
๐น ๐จ๐ข Notifica di Emergenza via postMessage:
Il Service Worker invia immediatamente un segnale di notifica broadcast a tutte le finestre aperte del frontend per segnalare lo stato di emergenza.
๐น ๐๏ธโ๏ธ Forzatura del Refresh e Re-Installazione:
๐น Il frontend forza un ricaricamento immediato. Se l'applicazione si satura o solleva un `QuotaExceededError`, si attiva la routine d'emergenza:
๐จ SW: Storage Pieno! - Emergency Clean...
che avvia la pulizia automatica del magazzino volatile (`CONFIG.userCacheName`) per salvaguardare i file vitali custoditi nel Bunker di sistema (`CONFIG.cacheName`).
๐น In assenza dei prerequisiti minimi di sicurezza o delle chiavi logiche in IndexedDB, il sistema si isola in modalitร protetta (**`VAULT_LOCKED_NO_KEY`**), restituendo risposte di errore o intercettando i file multimediali mancanti per sostituirli con il fallback binario configurato in `CONFIG.fallbackImage`.
graph LR
A[๐ป Avvio PWA / โ๏ธ SW] --> B(๐ต๏ธโโ๏ธ deepVaultValidation)
B --> C{๐ค๐ก๏ธ Canary Check: KANARY}
C -->|๐ก๏ธโ
VALIDATO| D[๐๏ธ Vault Sbloccato]
D --> E[๐ Erogazione e Decrittazione AES-GCM]
C -->|โ FALLITO / MANOMESSO| F[๐จ SECURITY BREACH]
F --> G[๐งน Wipe di PWA_Vault & Caches]
G --> H[๐ข postMessage Broadcast ai Frontend]
H --> I[๐ Forzatura Refresh / ๐๏ธ Re-Installazione Totale]
I --> J[๐ฅ Riscaricamento Asset Puliti dal Server]
style D fill:#70ad47,stroke:#fff,color:#fff
style F fill:#c00000,stroke:#fff,color:#fff
style G fill:#ffc000,stroke:#000,color:#000
graph TD
subgraph FLUSSO_FETCH [๐ก 1. Evento Fetch: Gestione Richieste Client]
A[๐ฑ Richiesta Utente / Browser] --> B[๐๏ธ Proxy SW CONFIG.ROOT]
B --> C[๐งฌ assegnaFlussoPolimorfo]
C -->|Profilo Canale Rilevato| D{๐ก checkRealOnline: C'ร RETE?}
D -->|โก Sร| E[๐ฅ Fetch con Timeout e Retries]
E -->|๐ข Risposta Server OK| F[โ
RILASCIO IMMEDIATO al Frontend]
E -->|๐ข Risposta Server OK| G[โ๏ธ Operazione Asincrona in BACKGROUND]
G --> H_async{๐ฌ DNA Check via CONFIG.minSizeMap & Magic Numbers Hex}
H_async -->|๐ Superato| I{๐ก๏ธ shouldBeEncrypted: Asset Core?}
I -->|๐ฏ Sร| J[๐ Cifratura AES-GCM + Salva in CONFIG.cacheName ๐ฆ๐ก๏ธ]
I -->|๐ฏ NO| K[๐๏ธ Salva in CONFIG.userCacheName ๐ฆ๐]
H_async -->|โ Fallito/Corrotto| L[๐ท Ignora Risposta / Non Salvare]
D -->|๐ข NO / Timeout / Lie-Fi| M[๐ด Bunker Mode Fallback]
M --> N{๐ Match in Cache trovato?}
N -->|๐ฏ Sร| O{๐ต๏ธโโ๏ธ X-PWA-Encrypted == true?}
O -->|๐ฏ Sร| P[๐ก๏ธ verifyVaultIntegrity + decryptBuffer]
P -->|๐ข Successo| Q[๐ Rilascia file decifrato Bunker-Decrypted + ๐งน Bonifica fill]
P -->|โ Errore/Manomissione| R[๐จ Wipe CONFIG.cacheName & CONFIG.userCacheName]
O -->|๐ฏ NO| S[๐ฆ Rilascia file in chiaro da CONFIG.userCacheName]
N -->|โ NO| T{๐ผ๏ธ Richiesta Immagine o HTML?}
T -->|๐ฏ Sร| U[๐ Eroga CONFIG.fallbackImage o Error Page 503 Sterile]
T -->|๐ฏ NO| V[โ Ritorna Errore Plain Text Offline 503]
end
subgraph FLUSSO_SYNC [๐ญ 2. Evento Sync: Allineamento e Pre-Cache]
X[๐ Trigger Event: INIT_DB / Connessione Ripristinata] --> Y[๐งฌ assegnaFlussoPolimorfo]
Y --> Z{๐๏ธ Profilo == Verylow?}
Z -->|๐จ Sร| AA[๐ syncAbortController.abort: Blocco Preventivo Sync]
Z -->|๐ฏ NO| AB[๐ Universal Object Scanner: Profonditร 12 livelli]
AB --> AC[๐ Download varianti estensione controllato]
AC --> H_async
end
style B fill:#1f4e79,stroke:#fff,stroke-width:2px,color:#fff
style F fill:#2e75b6,stroke:#fff,stroke-width:2px,color:#fff
style G fill:#7f7f7f,stroke:#fff,stroke-width:1px,stroke-dasharray: 5 5,color:#fff
style M fill:#c00000,stroke:#fff,stroke-width:2px,color:#fff
style AA fill:#a5a5a5,stroke:#000,stroke-width:1px,color:#000
style J fill:#70ad47,stroke:#fff,stroke-width:1px,color:#fff
-
๐ Home
๐ Pagina principale del Progetto -
๐ Capitolo 1: Introduzione
๐จโโ๏ธ Requisiti legali e conformitร CAD (Art. 68/69) ๐ -
โ๏ธ Capitolo 2: Architettura
๐ก๏ธ๐ฆ Bunker Mode e crittografia AES-GCM del Vault ๐๐๏ธ -
๐ก Capitolo 3: Note Finali
โ๏ธ Esempi di utilizzo pratico nella PA ๐๏ธ -
๐๏ธ Perchรฉ ๐ช Panzer v7+
๐ฝ Indipendenza ed eliminazione del Vendor Lock-in ๐ซ๐ -
๐ฅ Capitolo 4: Collaudo
๐ฅ Battesimo di Fuoco, Debug e Log ๐๐ -
๐ก๏ธ Capitolo 5: Paradigma Difensivo
Logiche di ๐ซ๐ฅ anti-tampering e Zeroization ๐งฝ -
๐ Capitolo 6: Determina
๐จ๏ธ Modello pronto ed esecutivo per i dirigenti ๐ผ -
๐ง Capitolo 7: Estensione Zero-Trust ๐
๐๐งช Concept: Architetturale e Framework di Sicurezza per le PA ๐๏ธ -
๐๏ธ๐จ Capitolo 8: Protezione PA
๐ Disciplinare Tecnico di Tutela dell'Ente con linee guida per Affidamenti Esterni. ๐ข -
๐โข๏ธ Capitolo 9: La Difesa Oltre il Confine
๐๐งช Concept: di un sistema di difesa attiva per operare in modalitร Out-of-Sandbox ๐๐ซ -
๐๏ธ๐ฎ PA Futuro Digitale
๐๐ Concept: Manifesto tecnologico e linee guida d'architettura per l'Iper Cloud PA ๐ฉ๏ธ