-
Notifications
You must be signed in to change notification settings - Fork 0
2 Funzionamento
Il funzionamento del motore Panzer v7.3 si basa su cinque sezioni di instradamento rigide e su pilastri di sicurezza progettati per garantire la massima tolleranza ai guasti e la protezione dei dati.
Note
La profilazione dinamica della rete si aggiorna a ogni singola richiesta dell'utente, ricalcolando i parametri di timeout in background senza bloccare il thread principale della PWA.
Warning
In caso di fallimento del test crittografico sul Canary Data ("KANARY"), il Service Worker attiverร la routine distruttiva immediata, cancellando l'intero IndexedDB per prevenire violazioni di tipo Cache Poisoning.
getNetworkProfile richiede monitoraggio RTT. Non disabilitare le API di rete.
Il file del Service Worker (sw.js) รจ posizionato nella cartella radice (root) del dominio tramite la costante CONFIG.ROOT (derivata dinamicamente da self.location.pathname). Questo permette al software di intercettare ogni singola richiesta di rete dell'intera applicazione, agendo come un gateway o proxy locale installato direttamente all'interno del browser.
Il motore adotta un algoritmo avanzato per scongiurare il blocco dell'interfaccia in caso di connettivitร degradata (fenomeno della "Lie-Fi"), orchestrato dai parametri di CONFIG.networkResilient e strutturato in 5 Sezioni operative distinte:
๐นProfilazione Dinamica della Rete (`getNetworkProfile`):
Il sistema non si limita a verificare se il dispositivo รจ online o offline. Calcola in tempo reale un punteggio di efficienza basato sui parametri hardware di
navigator.connection (downlink e RTT), mappando dinamicamente i limiti estratti da CONFIG.networkResilient.profiles:
| Profilo Rete | Limite Download Simultanei (limit) |
Timeout di Connessione (timeout) |
Comportamento Bunker |
|---|---|---|---|
| Ultrafast | 12 file | 15 secondi | Sincronizzazione aggressiva |
| Fast | 8 file | 20 secondi | Sincronizzazione standard |
| Medium | 4 file | 45 secondi | Sincronizzazione standard |
| Low | 2 file | 90 secondi | Controllo HEAD esteso |
| Verylow | 1 file | 120 secondi | Blocco preventivo del Sync |
graph TD
%% Definizione degli stili visivi per massima leggibilitร
classDef inizio stili,fill:#1f4e79,stroke:#113355,stroke-width:2px,color:#fff;
classDef sezione stili,fill:#f5f5f5,stroke:#333,stroke-width:2px,color:#000;
classDef successo stili,fill:#d4edda,stroke:#28a745,stroke-width:2px,color:#155724;
classDef recupero stili,fill:#fff3cd,stroke:#ffc107,stroke-width:2px,color:#856404;
classDef errore stili,fill:#f8d7da,stroke:#dc3545,stroke-width:2px,color:#721c24;
%% FLUSSO DEL COLO 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;
Quando il sistema rileva il ripristino della connettivitร o riceve un evento di sincronizzazione, si attiva la logica di popolamento/allineamento controllata:
๐น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 evitare attacchi informatici (come il Cache Poisoning), pagine di login di hotspot Wi-Fi (captive portal) o file corrotti, ogni risorsa subisce una validazione rigorosa prima dell'ingresso nello storage:
๐น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 singed}
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, tracciato nei log di console con marcatori specifici e protetto da cifratura hardware-assisted:
Important
โก๏ธ Isolamento della Memoria: Le chiavi crittografiche non sono esportabili (extractable: false) e rimangono isolate nello stato di runtime del worker via Structured Clone API. Tutte le funzioni crittografiche azzerano le tracce in transito: il buffer temporaneo in RAM contenente i dati decrittati viene sovrascritto a 0 tramite il comando .fill(0) subito dopo l'uso, neutralizzando i rischi di 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 sincronizzata con l'interfaccia utente:
๐น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[getNetworkProfile]
C -->|Rete Rilevata| 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{isValidBlob Check via CONFIG.minSizeMap}
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 Rete / 404| 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]
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]
T -->|NO| V[Ritorna Errore Plain Text Offline 503]
end
subgraph FLUSSO_SYNC [2. Evento Sync: Allineamento e Pre-Cache]
X[Trigger Event: sync / Connessione Ripristinata] --> Y[getNetworkProfile]
Y --> Z{Profilo == Verylow?}
Z -->|Sร| AA[syncAbortController.abort: Blocco Preventivo Sync]
Z -->|NO| AB[Estrae limiti e parallelizzazione download]
AB --> AC[Download asincrono controllato dei file core]
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 ๐ฉ๏ธ