Passer au contenu

Chiffrement

Capgo propose un chiffrement de bout en bout pour vos bundles OTA. Vos assets et votre code JavaScript restent protégés pendant l’upload, le transit et l’installation.

Le système utilise des primitives cryptographiques standard pour protéger le bundle pendant le stockage et la distribution, garantir l’intégrité des fichiers et garantir l’authenticité des mises à jour.

Ce que le chiffrement protège réellement : contrairement à une simple signature de bundle, Capgo chiffre le bundle envoyé avant le stockage et la distribution. Cela protège le contenu contre un accès opportuniste pendant le transit ou dans le stockage et garantit que seule une personne disposant de votre clé privée peut produire une mise à jour chiffrée valide. Cela ne rend pas les assets web distribués impossibles à analyser par rétro-ingénierie : la clé publique utilisée par le client pour déchiffrer les mises à jour est embarquée dans l’application, donc un attaquant motivé peut encore l’extraire et inspecter le contenu du bundle.

Capgo utilise une approche hybride RSA + AES.

Capgo Encryption Flow

  • Clé privée: utilisée par la CLI au moment de l’upload chiffré
  • Clé publique: enregistrée dans la configuration de l’application
  • Clé de session AES: générée pour chaque upload
  1. Génération d’une clé de session AES
  2. Chiffrement du bundle avec AES
  3. Calcul du checksum du bundle chiffré/déchiffré selon le flux
  4. Chiffrement RSA des métadonnées de vérification (clé de session + checksum)
  5. Stockage du bundle chiffré + signature/métadonnées
  1. L’app télécharge bundle + métadonnées
  2. Le SDK lit la clé publique embarquée
  3. Le SDK récupère les informations nécessaires au déchiffrement
  4. Le bundle est déchiffré localement
  5. Le checksum est vérifié
FonctionnalitéCapgoPlateformes OTA classiques
Contenu bundleChiffré en stockage et en transit, mais encore inspectable par rétro-ingénierie avec le binaireSouvent lisible en clair
GarantieContenu + intégrité + authenticitéIntégrité + authenticité
Confidentialité codeProtection forte en distribution et stockage, pas anti-rétro-ingénierieLimitée
  • RSA-4096
  • AES-256-GCM
  • vérification d’intégrité
  • meilleur niveau de sécurité
  • non supporté par la CLI actuelle
  • migration requise vers V2
Terminal window
# Generate new encryption keys (creates files in current directory)
npx @capgo/cli@latest key create

Fichiers générés :

  • .capgo_key_v2 (privée, ne jamais commit)
  • .capgo_key_v2.pub (publique)

Étape 2: enregistrer la clé publique (obligatoire)

Section titled “Étape 2: enregistrer la clé publique (obligatoire)”
Terminal window
# Save public key from file to Capacitor config (required)
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
# Or save public key data directly
npx @capgo/cli@latest key save --key-data "$CAPGO_PUBLIC_KEY"

Étape 3: synchroniser les plateformes natives

Section titled “Étape 3: synchroniser les plateformes natives”
Terminal window
npx cap sync

Méthode 1: chiffrement direct à l’upload

Section titled “Méthode 1: chiffrement direct à l’upload”
Terminal window
# Upload with automatic encryption
npx @capgo/cli@latest bundle upload --key-v2
  1. Créer le zip:

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

    Terminal window
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. Uploader sur votre stockage puis enregistrer l’URL:

    Terminal window
    aws s3 cp ./encrypted-bundle.zip s3://your-bucket/encrypted-bundle.zip
    npx @capgo/cli@latest bundle upload --external https://your-storage.com/encrypted-bundle.zip --iv-session-key IV_SESSION_KEY_FROM_STEP_2
  • local dev: fichier temporaire
  • CI/CD: variable secrète ou manager de secrets
  • production: KMS / Vault / Key Vault

Exemple CI/CD:

Terminal window
export CAPGO_PRIVATE_KEY="$(cat .capgo_key_v2)"
npx @capgo/cli@latest bundle upload --key-data-v2 "$CAPGO_PRIVATE_KEY"
  1. Générer de nouvelles clés:

    Terminal window
    mkdir ./new-keys && cd ./new-keys
    npx @capgo/cli@latest key create
  2. Enregistrer la nouvelle clé publique:

    Terminal window
    npx @capgo/cli@latest key save --key ./new-keys/.capgo_key_v2.pub
  3. Publier une version native embarquant la nouvelle clé publique.

  4. Basculer les futurs uploads sur la nouvelle clé privée.

  • une clé privée par environnement (dev/staging/prod)
  • rotation périodique
  • audit des accès aux secrets
  • HTTPS obligatoire pour les URLs de bundles externes
  • supervision des erreurs de déchiffrement

Problèmes fréquents:

  • clé privée / clé publique non correspondantes
  • ivSessionKey invalide
  • oubli de key save ou de cap sync
  • tentative d’utilisation V1

Commandes utiles:

Terminal window
npx @capgo/cli@latest app debug
Terminal window
# Test workflow
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

Le schéma cryptographique est compatible avec des exigences de sécurité enterprise:

  • AES-256
  • RSA-4096
  • mode GCM
  • génération aléatoire sécurisée

Références fréquentes:

  • GDPR
  • HIPAA
  • SOC 2 (Service Organization Control 2)
  • ISO 27001
  • léger surcoût de taille bundle
  • léger surcoût CPU au chiffrement/déchiffrement
  • bénéfice significatif si combiné aux mises à jour différentielles