Vai al contenuto

Crittografia

Capgo fornisce una solida crittografia end-to-end per i bundle della tua app, garantendo che il tuo codice JavaScript e le risorse siano protette durante la trasmissione e l’archiviazione. Questo sistema di crittografia è progettato per darti il controllo completo sulla sicurezza della tua app mantenendo la comodità degli aggiornamenti live.

Il sistema di crittografia di Capgo utilizza metodi crittografici standard del settore per proteggere i tuoi bundle dall’accesso non autorizzato. Quando la crittografia è abilitata, i tuoi bundle vengono crittografati prima di lasciare il tuo ambiente di sviluppo e rimangono crittografati fino a quando non vengono decrittografati dalla tua app sul dispositivo dell’utente.

Vera crittografia end-to-end: A differenza di altre piattaforme di aggiornamento OTA che si limitano a firmare gli aggiornamenti (lasciando il codice leggibile pubblicamente), Capgo fornisce vera crittografia end-to-end. Questo significa che solo i tuoi utenti possono decrittografare i tuoi aggiornamenti - nessun altro, incluso Capgo stesso. Il contenuto del tuo bundle rimane completamente privato e illeggibile durante l’intero processo di distribuzione.

Capgo utilizza un approccio di crittografia ibrida che combina la crittografia RSA e AES per sicurezza e prestazioni ottimali:

Flusso di crittografia Capgo

  • Chiave privata: Generata e archiviata in modo sicuro nel tuo ambiente di sviluppo (utilizzata per la crittografia)
  • Chiave pubblica: Derivata dalla tua chiave privata e archiviata nella configurazione Capacitor della tua app (utilizzata per la decrittografia)
  • Chiavi di sessione: Chiavi AES casuali generate per ogni caricamento di bundle
  1. Viene generata una chiave di sessione AES casuale per ogni caricamento di bundle
  2. Il tuo bundle viene crittografato utilizzando la chiave di sessione AES
  3. Viene calcolato il checksum del bundle
  4. Sia la chiave di sessione AES che il checksum vengono crittografati insieme utilizzando la tua chiave privata RSA (creando la “firma”)
  5. Il bundle crittografato e la firma crittografata vengono archiviati

Il checksum viene crittografato insieme alla chiave AES per prevenire manomissioni. PoichÊ solo la tua chiave privata RSA può creare questa firma, e solo la corrispondente chiave pubblica può decrittografarla, questo garantisce che sia la chiave di sessione AES che il checksum previsto siano autentici e non siano stati modificati da un attaccante.

  1. La tua app scarica il bundle crittografato e la firma crittografata
  2. L’SDK Capgo utilizza la tua chiave pubblica RSA (archiviata nell’app) per decrittografare la firma
  3. Questo rivela la chiave di sessione AES e il checksum originale
  4. La chiave di sessione AES viene utilizzata per decrittografare il bundle
  5. Viene calcolato un checksum del bundle decrittografato e confrontato con il checksum originale per la verifica dell’integrità

Questo processo garantisce che anche se un attaccante intercetta il bundle crittografato, non può modificare la chiave di sessione AES o fornire un checksum falso, perchÊ avrebbe bisogno della tua chiave privata per creare una firma valida che la chiave pubblica possa decrittografare.

CaratteristicaCapgoAltre piattaforme OTA
Contenuto del bundleCompletamente crittografato (illeggibile)Leggibile pubblicamente
Metodo di sicurezzaVera crittografia end-to-endSolo firma del codice
Livello di privacyZero-knowledge (nemmeno Capgo può leggere il tuo codice)La piattaforma può accedere al tuo codice
ProtezioneContenuto + integritĂ  + autenticitĂ Solo integritĂ  + autenticitĂ 

PerchÊ è importante:

  • La firma del codice verifica solo che gli aggiornamenti non siano stati manomessi e provengano dalla fonte corretta
  • La crittografia end-to-end garantisce che il contenuto effettivo del tuo codice rimanga privato e illeggibile durante la trasmissione e l’archiviazione
  • Con la vera crittografia end-to-end di Capgo, solo i tuoi utenti possono decrittografare gli aggiornamenti - nessun altro, incluso Capgo stesso

Capgo utilizza Encryption V2 come metodo di crittografia standard:

  • Utilizza RSA-4096 per una sicurezza maggiore
  • AES-256-GCM per la crittografia autenticata
  • Fornisce verifica dell’integritĂ 
  • Migliori prestazioni e sicurezza
  • Utilizza RSA-2048 per la crittografia della chiave
  • AES-256-CBC per la crittografia del bundle
  • Non piĂš disponibile nel CLI attuale
  • Le app legacy che utilizzano V1 devono migrare a V2

Prima, genera le tue chiavi di crittografia usando il CLI Capgo:

Terminal window
# Genera nuove chiavi di crittografia (crea file nella directory corrente)
npx @capgo/cli@latest key create

Questo crea:

  • .capgo_key_v2: La tua chiave privata (mantienila sicura!)
  • .capgo_key_v2.pub: La tua chiave pubblica (utilizzata dalla tua app)

Questi file vengono creati nella directory corrente dove esegui il comando.

Passaggio 2: Salvare la chiave pubblica nella configurazione Capacitor (richiesto)

Section titled “Passaggio 2: Salvare la chiave pubblica nella configurazione Capacitor (richiesto)”

Devi salvare la tua chiave pubblica nella configurazione Capacitor in modo che la tua app mobile possa decrittografare i bundle:

Terminal window
# Salva la chiave pubblica dal file alla configurazione Capacitor (richiesto)
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
# Oppure salva i dati della chiave pubblica direttamente
npx @capgo/cli@latest key save --key-data "$CAPGO_PUBLIC_KEY"

Passaggio 3: Sincronizzare la piattaforma Capacitor (richiesto)

Section titled “Passaggio 3: Sincronizzare la piattaforma Capacitor (richiesto)”

Dopo aver salvato la chiave pubblica, devi sincronizzare la piattaforma Capacitor per copiare la configurazione aggiornata al layer nativo:

Terminal window
# Sincronizza la piattaforma per copiare la config al nativo
npx cap sync

Il modo piÚ semplice è crittografare durante il processo di caricamento:

Terminal window
# Carica con crittografia automatica
npx @capgo/cli@latest bundle upload --key-v2
# Per storage esterno, devi prima crittografare (vedi workflow di crittografia manuale sotto)

Per un maggiore controllo, puoi crittografare manualmente i bundle:

  1. Creare un bundle zip:

    Terminal window
    npx @capgo/cli@latest bundle zip com.example.app --path ./dist --key-v2
  2. Crittografare il bundle:

    Terminal window
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. Caricare sul tuo storage (es. S3) e registrare con Capgo:

    Terminal window
    # Prima carica il bundle crittografato sul tuo storage (es. AWS S3)
    aws s3 cp ./encrypted-bundle.zip s3://your-bucket/encrypted-bundle.zip
    # Poi registra con Capgo usando l'URL esterno
    npx @capgo/cli@latest bundle upload --external https://your-storage.com/encrypted-bundle.zip --iv-session-key IV_SESSION_KEY_FROM_STEP_2

Opzioni per la chiave privata:

  1. File-based (sviluppo locale):

    Terminal window
    # Chiave archiviata come file .capgo_key_v2 nella root del progetto
    npx @capgo/cli@latest bundle upload --key-v2
  2. Variabile d’ambiente (CI/CD):

    Terminal window
    # Archivia nella variabile d'ambiente per CI
    export CAPGO_PRIVATE_KEY="$(cat .capgo_key_v2)"
    npx @capgo/cli@latest bundle upload --key-data-v2 "$CAPGO_PRIVATE_KEY"

Configurazione della chiave pubblica (richiesta):

Terminal window
# Deve salvare la chiave pubblica nella configurazione Capacitor per l'app mobile
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub

Ambiente di produzione:

  • Archivia le chiavi private in servizi di gestione chiavi sicuri (AWS KMS, Azure Key Vault, ecc.)
  • Usa la gestione dei segreti CI/CD per le chiavi private
  • Non committare mai le chiavi private nel controllo versione

Uso delle chiavi:

  • Chiave privata: Utilizzata dal CLI per la crittografia durante il caricamento del bundle (mantienila sicura)
  • Chiave pubblica: Archiviata nella configurazione dell’app per la decrittografia sul dispositivo (sicuro da committare)

Ruota regolarmente le tue chiavi di crittografia per una sicurezza maggiore:

  1. Generare nuove chiavi:

    Terminal window
    # Prima naviga nella directory desiderata, poi crea le chiavi
    mkdir ./new-keys && cd ./new-keys
    npx @capgo/cli@latest key create
  2. Salvare la nuova chiave pubblica nella configurazione Capacitor:

    Terminal window
    npx @capgo/cli@latest key save --key ./new-keys/.capgo_key_v2.pub
  3. Aggiornare la configurazione della tua app con la nuova chiave pubblica

  4. Distribuire l’app aggiornata prima di caricare bundle crittografati con la nuova chiave

  • Non condividere mai le chiavi private tra ambienti o membri del team
  • Utilizzare chiavi diverse per ambienti diversi (dev, staging, produzione)
  • Ruotare le chiavi regolarmente (consigliato: ogni 6-12 mesi)
  • Archiviare le chiavi in modo sicuro utilizzando sistemi di gestione chiavi appropriati
  • Verificare sempre l’integritĂ  del bundle dopo la decrittografia
  • Monitorare pattern di download o fallimenti insoliti
  • Utilizzare HTTPS per tutti gli URL dei bundle (richiesto per app mobili)
  • Implementare gestione appropriata degli errori per fallimenti di decrittografia
  • Limitare l’accesso alle chiavi di crittografia solo al personale autorizzato
  • Utilizzare accesso basato sui ruoli per le operazioni di gestione chiavi
  • Verificare l’uso e l’accesso alle chiavi regolarmente
  • Implementare procedure appropriate di backup e ripristino

Fallimenti di decrittografia:

  • Verifica che la chiave privata corrisponda alla chiave pubblica utilizzata per la crittografia
  • Controlla che l’ivSessionKey sia corretto
  • Assicurati di utilizzare Encryption V2 (V1 non è piĂš supportata)

Errori relativi alle chiavi:

  • Conferma che il formato della chiave privata sia corretto (formato PEM)
  • Verifica che la chiave non sia stata corrotta durante l’archiviazione/trasferimento
  • Controlla che la chiave abbia le autorizzazioni appropriate nella configurazione della tua app

Problemi di prestazioni:

  • Bundle grandi possono richiedere piĂš tempo per crittografare/decrittografare
  • Considera l’utilizzo di aggiornamenti differenziali per ridurre le dimensioni del bundle
  • Monitora le prestazioni del dispositivo durante la decrittografia

Controlla lo stato della crittografia:

Terminal window
npx @capgo/cli@latest app debug

Testa il workflow crittografia/decrittografia:

Terminal window
# Testa il workflow completo: zip → encrypt → decrypt → unzip
npx @capgo/cli@latest bundle zip com.example.app --key-v2
npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM --json
npx @capgo/cli@latest bundle decrypt ./encrypted-bundle.zip IV_SESSION_KEY

L’implementazione della crittografia di Capgo segue gli standard del settore:

  • AES-256: Algoritmo di crittografia approvato FIPS 140-2
  • RSA-4096: Forte crittografia asimmetrica per la protezione delle chiavi
  • GCM Mode: Fornisce sia riservatezza che autenticitĂ 
  • Secure Random: Generazione di numeri casuali crittograficamente sicura

Questo rende Capgo adatto per applicazioni che richiedono conformitĂ  con:

  • GDPR (Regolamento generale sulla protezione dei dati)
  • HIPAA (Health Insurance Portability and Accountability Act)
  • SOC 2 (Service Organization Control 2)
  • ISO 27001 (Gestione della sicurezza delle informazioni)
  • Dimensione del bundle: I bundle crittografati sono leggermente piĂš grandi (~1-2% di overhead)
  • Tempo di elaborazione: La crittografia/decrittografia aggiunge latenza minima
  • Uso della memoria: Aumento temporaneo durante le operazioni di crittografia/decrittografia
  • Usa aggiornamenti differenziali per minimizzare il trasferimento di dati crittografati
  • Ottimizza la dimensione del bundle convertendo le immagini in formato WebP
  • Minimizza i file JavaScript e CSS prima del bundling
  • Rimuovi dipendenze e codice non utilizzati
  • Monitora le prestazioni del dispositivo su dispositivi piĂš vecchi/lenti
  • Scopri lo Storage personalizzato per utilizzare la crittografia con la tua infrastruttura
  • Esplora i Canali per gestire bundle crittografati tra gli ambienti
  • Configura l’Integrazione CI/CD per automatizzare le distribuzioni crittografate