Sauter au contenu

Chiffrement

Capgo fournit une encryption à la fin de la chaîne pour vos lots d'application, garantissant que votre JavaScript code et vos actifs sont protégés pendant la transmission et le stockage. Ce système d'encryption est conçu pour vous donner un contrôle total sur la sécurité de votre application tout en maintenant la commodité des mises à jour en direct.

Le système d'encryption de Capgo utilise des méthodes cryptographiques industrielles pour protéger vos lots de toute accès non autorisé. Lorsque l'encryption est activé, vos lots sont chiffrés avant de quitter votre environnement de développement et restent chiffrés jusqu'à ce qu'ils soient déchiffrés par votre application sur le dispositif de l'utilisateur.

Ce que l'encryption protège réellement: À la différence des systèmes OTA qui ne signent que les mises à jour, Capgo chiffre le lot téléchargé avant le stockage et la livraison. Cela protège les contenus du lot de toute accès non autorisé en stockage ou en transit et garantit que seuls ceux qui possèdent votre clé privée peuvent produire une mise à jour chiffrée valide. Cela ne rend pas les actifs web embarqués impossibles à décompiler : la clé publique utilisée par le client pour déchiffrer les mises à jour est distribuée dans l'application, donc un attaquant déterminé peut toujours l'extraire et inspecter les contenus du lot avec suffisamment d'effort. Lorsque vous avez besoin d'encryption Lorsque vous avez besoin d'encryption

Capgo utilise une approche de cryptage hybride qui combine la cryptage RSA et AES pour une sécurité et une performance optimales :

Capgo Flux de cryptage

  • Clé privée : Générée et stockée de manière sécurisée dans votre environnement de développement (utilisée pour le cryptage)
  • Clé publique : Dérivée de votre clé privée et stockée dans la configuration de votre application Capacitor (utilisée pour le déchiffrement)
  • Clés de session : Clés AES aléatoires générées pour chaque téléchargement de bundle
  1. Une clé de session AES aléatoire est générée pour chaque téléchargement de bundle
  2. Votre bundle est chiffré à l'aide de la clé de session AES
  3. Le checksum du bundle est calculé
  4. Les deux clés de session AES et checksum sont chiffrées ensemble à l'aide de votre clé privée RSA (créant la « signature »)
  5. Le bundle chiffré et la signature chiffrée sont stockés

Le checksum est chiffré en même temps que la clé AES pour prévenir tout changement. Puisque seule votre clé privée RSA peut créer cette signature, et que seule la clé publique correspondante peut la déchiffrer, cela garantit que les deux clés de session AES et le checksum attendu sont authentiques et n'ont pas été modifiés par un attaquant.

  1. Votre application télécharge le bundle chiffré et la signature chiffrée
  2. Le Capgo SDK utilise votre clé publique RSA (stockée dans l'application) pour déchiffrer la signature
  3. Cela révèle la clé de session AES et le checksum original
  4. La clé de session AES est utilisée pour déchiffrer le bundle
  5. Un hachage du bundle déchiffré est calculé et comparé avec le hachage original pour la vérification d'intégrité

Ce processus garantit que même si un attaquant intercepte le bundle chiffré, il ne peut pas modifier la clé de session AES ou fournir un hachage fictif, car il aurait besoin de votre clé privée pour créer une signature valide que la clé publique peut déchiffrer.

CaractéristiqueCapgoAutres Plates-formes OTA
Contenu du BundleStocké sous forme chiffrée/transportée ; toujours inspectable par un ingénieur de reverse-engineering déterminé avec le fichier binaire de l'applicationLisible par le public
Méthode de sécuritéChiffrement à la fin de la chaîne entièrement sécuriséCode : signature uniquement
Niveau de confidentialitéProtection forte du transfert/stockage ; pas anti-reverse-engineeringLa plateforme peut accéder à votre code
ProtectionIntégrité + authenticité + contenuIntégrité + authenticité uniquement

Pourquoi cela compte :

  • Code de signature ne vérifie que les mises à jour n'ont pas été altérées et proviennent de la bonne source
  • Capgo de chiffrement protège le bundle pendant qu'il est stocké et livré et rend les mises à jour chiffrées falsifiées beaucoup plus difficiles car l'attaquant aurait besoin de votre clé privée
  • La reverse engineering est toujours possible après la mise en production de l'application, car le client contient la clé publique nécessaire pour déchiffrer et charger la mise à jour

Capgo utilise la méthode de chiffrement V2 comme méthode de chiffrement standard :

  • Utilise RSA-4096 pour une sécurité renforcée
  • AES-256-GCM pour l'encodage authentifié
  • Fournit la vérification d'intégrité
  • Meilleure performance et sécurité
  • Utilise RSA-2048 pour le chiffrement des clés
  • AES-256-CBC pour le chiffrement du paquet
  • Plus longtemps disponible dans la version actuelle CLI
  • Les applications légaciers utilisant V1 doivent migrer vers V2

Générez d'abord vos clés d'encodage à l'aide du Capgo CLI:

fenêtre de terminal
# Generate new encryption keys (creates files in current directory)
npx @capgo/cli@latest key create

Cela crée :

  • .capgo_key_v2: Votre clé privée (gardez-la sécurisée !)
  • .capgo_key_v2.pub: Votre clé publique (utilisée par votre application)

Ces fichiers sont créés dans le répertoire actuel où vous exécutez la commande.

Section intitulée “Étape 2 : Sauvegardez votre clé publique dans la configuration Capacitor (obligatoire)”

Section titled “Step 2: Save Your Public Key to Capacitor Config (Required)”

devez sauvegarder votre clé publique dans la configuration __CAPGO_KEEP_0__ afin que votre application mobile puisse déchiffrer les bundles : save your public key to the Capacitor config so your mobile app can decrypt bundles:

Copier dans le presse-papier
# 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"

Après avoir enregistré la clé publique, vous devez synchroniser le Capacitor plateforme pour copier la configuration mise à jour vers la couche native :

Fenêtre de terminal
# Sync the platform to copy config to native
npx cap sync

La méthode la plus simple consiste à chiffrer pendant le processus d'envoi :

Fenêtre de terminal
# Upload with automatic encryption
npx @capgo/cli@latest bundle upload --key-v2
# For external storage, you must encrypt first (see Manual Encryption Workflow below)

Méthode 2 : Flux de travail de chiffrement manuel

Section intitulée “Méthode 2 : Flux de travail de chiffrement manuel”

Pour plus de contrôle, vous pouvez manuellement chiffrer des bundles :

  1. Créer un bundle zip :

    Fenêtre de terminal
    npx @capgo/cli@latest bundle zip com.example.app --path ./dist --key-v2
  2. Chiffrer le bundle :

    Fenêtre de terminal
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. Télécharger sur votre stockage (par exemple, S3) et enregistrer avec Capgo:

    Fenêtre de terminal
    # First upload the encrypted bundle to your storage (e.g., AWS S3)
    aws s3 cp ./encrypted-bundle.zip s3://your-bucket/encrypted-bundle.zip
    # Then register with Capgo using the external URL
    npx @capgo/cli@latest bundle upload --external https://your-storage.com/encrypted-bundle.zip --iv-session-key IV_SESSION_KEY_FROM_STEP_2

Options de clés privées :

  1. Fichier basé (développement local):

    Fenêtre de terminal
    # Key stored as .capgo_key_v2 file in project root
    npx @capgo/cli@latest bundle upload --key-v2
  2. Variable d'environnement (CI/CD):

    Fenêtre de terminal
    # Store in environment variable for CI
    export CAPGO_PRIVATE_KEY="$(cat .capgo_key_v2)"
    npx @capgo/cli@latest bundle upload --key-data-v2 "$CAPGO_PRIVATE_KEY"

Configuration de la clé publique (Requis):

Fenêtre de terminal
# Must save public key to Capacitor config for mobile app
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub

Environnement de production:

  • Stockez les clés privées dans des services de gestion de clés sécurisés (AWS KMS, Azure Key Vault, etc.)
  • Utilisez la gestion des secrets CI/CD pour les clés privées
  • Ne jamais commiter les clés privées dans le contrôle de version

Utilisation de la clé :

  • Clé privée : Utilisée par CLI pour la cryptage lors de l'envoi du paquet (gardez sécurisé)
  • Clé publique : Stockée dans la configuration de l'application pour la décryptage sur le dispositif (sécurisé à commiter)

Roter le paire de clés lorsque la clé privée est suspectée ou confirmée compromise. Une rotation calendaire régulière n'est pas requise. Il s'agit d'une migration de clé native, pas d'une modification OTA uniquement.

  1. Générer une nouvelle paire de clés :

    Fenêtre de terminal
    npx @capgo/cli@latest key create
  2. Enregistrez la clé publique de remplacement dans votre Capacitor config :

    Fenêtre de terminal
    npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
  3. Synchroniser et distribuer une version native : Exécuter npx cap sync, puis distribuez une nouvelle version d'application native contenant la clé publique de remplacement.

  4. Ciblez la nouvelle version native : Les appareils qui exécutent toujours la version native ancienne ne peuvent pas déchiffrer les mises à jour chiffrées avec la clé de remplacement. Utilisez La ciblage de version pour restreindre les ensembles de remplacement-clés à la nouvelle version native tout en laissant le reste de la flotte se mettre à jour via l'App Store ou MDM.

  5. Changer votre secret d'upload : Une fois que la version native est en ligne, remplacez la clé privée dans CI et n'envoyez que des ensembles ciblés vers les versions natives qui contiennent la clé publique de remplacement.

  • Jamais partager des clés privées entre environnements ou membres d'équipe
  • Utiliser des clés différentes pour différents environnements (dev, étape, production)
  • Roter après une compromiseremplacez la paire de clés lorsque la clé privée est suspectée ou confirmée compromise ; une rotation du calendrier de routine n'est pas requise
  • Stockez les clés de manière sécurisée en utilisant des systèmes de gestion de clés appropriés

Sécurité du Bundle

Vérifiez toujours
  • l'intégrité du bundle après déchiffrement Surveillez
  • les modèles de téléchargement inhabituels ou les échecs Utilisez HTTPS
  • pour toutes les URL du bundle (obligatoire pour les applications mobiles) Mettez en œuvre
  • Sécurité du Bundle gestion des erreurs appropriée pour les échecs de déchiffrement
  • Limitation de l'accès aux clés de chiffrement aux seuls personnels autorisés
  • Utilisation d'un contrôle d'accès basé sur les rôles pour les opérations de gestion de clés
  • Audit l'utilisation et l'accès des clés régulièrement
  • Mise en œuvre de procédures de sauvegarde et de récupération appropriées

Échecs de déchiffrement :

  • Vérifiez que la clé privée correspond à la clé publique utilisée pour l'encryption
  • Vérifiez que le ivSessionKey est correct
  • Assurez-vous d'utiliser l'Encryption V2 (V1 n'est plus pris en charge)

Erreurs liées aux clés :

  • Confirmez que le format de la clé privée est correct (format PEM)
  • Vérifiez que la clé n'a pas été corrompue lors de son stockage/transfer
  • Vérifiez que la clé a les permissions appropriées dans la configuration de votre application

Problèmes de performance :

  • Les gros paquets peuvent prendre plus de temps pour chiffrer/déchiffrer
  • Considérez l'utilisation des mises à jour Delta (manifeste) pour réduire les tailles des paquets
  • Surveillez la performance de l'appareil pendant la déchiffrement

Vérifiez l'état de chiffrage :

Fenêtre de terminal
npx @capgo/cli@latest app debug

Testez le flux de chiffrage/déchiffrement :

Fenêtre de terminal
# Test the complete workflow: 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

Capgo met en œuvre une implémentation d'encryption conforme aux normes de l'industrie :

  • AES-256: Algorithme d'encryption asymétrique homologué FIPS 140-2
  • RSA-4096: Forte encryption asymétrique pour la protection des clés
  • GCM Mode: fournit à la fois la confidentialité et l'authenticité
  • Secure Random: Génération de nombres aléatoires cryptographiquement sécurisés

Cela rend Capgo adapté aux applications nécessitant une conformité avec :

  • Règlement Général sur la Protection des Données (RGPD)
  • Loi sur la Portabilité et la Responsabilité des Assurances de Santé (HIPAA)
  • SOC 2 (Contrôle de Service Organisation 2)
  • ISO 27001 (Gestion de la Sécurité de l'Information)
  • Taille du paquetLes bundles chiffrés sont légèrement plus grands (~1-2% de surcharge)
  • Temps de traitementLa mise en cryptage/décryptage ajoute une latence minimale
  • Utilisation de la mémoire: Augmentation temporaire pendant les opérations d'encryption/décryption
  • Utilisez les mises à jour Delta (manifest) pour minimiser les transferts de données chiffrées
  • Optimisez la taille de votre bundle en convertissant les images au format WebP
  • Minimisez les fichiers JavaScript et CSS avant la mise en bundle
  • Supprimez les dépendances non utilisées et code
  • Surveillez les performances du dispositif sur les appareils plus anciens/lents
  • Apprenez-en plus Stockage personnalisé pour utiliser l'encryption avec votre propre infrastructure
  • Explorez Canaux pour gérer les ensembles chiffrés à travers les environnements
  • Configurer Intégration CI/CD pour automatiser les déploiements chiffrés

Continuez depuis l'Encryption

Si vous utilisez

Encryption __CAPGO_KEEP_0__ pour planifier la sécurité et la conformité, connectez-le à Conformité pour les détails d'implémentation dans Conformité, Capgo Scanner de sécurité pour le flux de travail du produit dans Capgo Scanner de sécurité, Capgo Centre de confiance pour le flux de travail du produit dans Capgo Centre de confiance, et Capgo Centre de confiance pour les détails d'implémentation dans Capgo Centre de confiance. Sécurité de l'organisation pour le flux de travail du produit dans Sécurité de l'organisation.