Saltar al contenido

Encriptación

Capgo proporciona una robusta cifrado de extremo a extremo para sus paquetes de aplicación, asegurando que su JavaScript code y activos están protegidos durante la transmisión y almacenamiento. Este sistema de cifrado está diseñado para brindarle un control completo sobre la seguridad de su aplicación mientras se mantiene la conveniencia de las actualizaciones en vivo.

El sistema de cifrado de Capgo utiliza métodos criptográficos de industria estándar para proteger sus paquetes de acceso no autorizado. Cuando se habilita el cifrado, sus paquetes se cifran antes de dejar su entorno de desarrollo y permanecen cifrados hasta que se desifran por su aplicación en el dispositivo del usuario.

¿Qué Protege Realmente el Cifrado?: A diferencia de los sistemas de OTA que solo firman actualizaciones, Capgo cifra el paquete subido antes del almacenamiento y la entrega. Esto protege los contenidos del paquete de acceso casual en almacenamiento o tránsito y asegura que solo alguien con su clave privada puede producir una actualización cifrada válida. Esto No hace que los activos web embarcados sean imposibles de revertir: la clave pública utilizada por el cliente para desifrar actualizaciones se distribuye en la aplicación, por lo que un atacante determinado puede extraerla e inspeccionar los contenidos del paquete con suficiente esfuerzo.

Modelo de seguridad

Su clave privada RSA se genera y se mantiene en su máquina. El Capgo CLI nunca transmite su clave privada, y Capgo no la almacena. Capgo tampoco almacena su clave pública RSA completa: las subidas incluyen solo una parte corta key_id (los primeros 20 caracteres del cuerpo PEM) para que los canales puedan coincidir con la pareja de claves que utilizó.

paquetes de bundles completos cifrados se almacenan y se entregan como cifrado AES-128-CBC. Los servicios de Capgo, CDN, almacenamiento de objetos y cualquier persona en el camino de entrega que vea solo los artefactos alojados no pueden leer su JavaScript, HTML o activos sin su clave privada.

La cifrado predeterminado ya mantiene el paquete contents confidential in Capgo storage and in transit. If you also want to reduce what Capgo could learn by linking your update channel to a particular store binary, use the following guide.

Utilice una ID de aplicación dedicada Capgo. Set plugins.CapacitorUpdater.appId (your Capgo) app_id) a un valor que es not Al igual que su ID de paquete de iOS o ID de aplicación de Android. Almacena y edite tus builds de MDM con tu clave pública RSA. capacitor.configCuando la Capgo app_id coincide con el nombre de paquete de la tienda, es más fácil asociar la aplicación Capgo con un binario publicado que contiene esa clave pública. Una ID de aplicación separada Capgo evita esa conexión directa.

Constructor de Capgo y la clave pública. Capgo El constructor sube el zip de tu proyecto con capacitor.config (y la arborescencia nativa), incluyendo plugins.CapacitorUpdater.publicKey después de key saveMantenga la clave pública fuera de las subidas de Constructor:

  • Construya aplicaciones nativas localmente o en tu propio CI cuando la confidencialidad desde Capgo importe, y evite subir esas ramas a través de Capgo Constructor mientras la clave pública está en la configuración. o
  • Agregar la clave pública con key save solo después de que cualquier subida de Constructor que no debe exponer la clave haya completado ya o
  • Si dependes de Capgo Constructor para compilaciones nativas, trate el flujo de trabajo como proporcionando una fuerte integridad (firmas de comprobación de suma) pero no asuma confidencialidad desde Capgo una vez que la clave pública haya sido incluida en una subida de Constructor.

Encuentre las subidas de delta cifradas. Delta (ficheros parciales) de cuerpo son texto plano a menos que utilices @capgo/capacitor-updater 6.14.4 o una versión más nueva (la cifrado parcial se habilita automáticamente para subidas cifradas en versiones de actualizador compatibles) o pase --encrypt-partial on bundle uploadSi bien con cifrado parcial, file names listados en manifestos delta no están cifrados; solo se envuelven con hashes RSA por archivo.

Después de la descifrado, el actualizador calcula SHA-256 Sobre el paquete y lo compara con el checksum recuperado del firmado con RSA. En caso de desacuerdo, el paquete es eliminado y nunca se activa.

  • Android verifica el checksum después de la desifrado y antes descomprimiendo el archivo.
  • iOS descompresiona y desencripta primero, luego verifica la suma de comprobación antes desifra y descomprime primero, luego verifica el checksum

Cuando se configura una clave pública, se rechazan los checksums que faltan o no están correctamente firmados con RSA.

Para cada carga completa de zip, el CLI genera un nuevo número aleatorio AES-128 clave de sesión y IV de 16 bytes, cifra el paquete con AES-128-CBC, y cifra la clave de sesión con tu RSA-2048 clave privada utilizando PKCS#1 v1.5 tipo 1 almacenamiento. Los dispositivos recuperan la clave AES con la clave pública RSA incorporada en la aplicación. Las claves y IVs no se reutilizan en subidas de paquetes separadas CLI. En una subida de delta, todos los archivos parciales cifrados comparten la clave de sesión y el IV de esa subida.

La clave pública utilizada para la descifra es incorporada en tu aplicación enviada. El contenido de paquete en claro está disponible en dispositivos que ejecutan tu aplicación a través del mismo camino de descifra que utiliza el actualizador, comparable a otros activos en el paquete de la aplicación.

Fallas de descifrado y comprobación de checksum se informan como eventos de estadísticas ("download_fail, checksum_fail, decrypt_fail) al endpoint de estadísticas Capgo o a su manejador de estadísticas autogestionado. Las estadísticas se envían desde el dispositivo; no se informa nada a los anfitriones de paquetes de terceros basado en el éxito o fracaso de la descifrado. Cada intento es normalmente un descarga completa iniciada por el dispositivo, por lo que es impracticable el ataque de tipo probing mediante padding, y el texto modificado aún falla la verificación de checksum firmada.

Una futura versión importante puede agregar un formato versionado con AES-GCM y RSA-PSS over the hash as defense in depth alongside today’s design. That would be an incremental hardening step, not an emergency security fix for the current format.

Capgo utiliza un enfoque de criptografía híbrida que combina la criptografía RSA y AES para una seguridad y rendimiento óptimos:

Capgo Flujo de Criptografía

  • Clave PrivadaGenerado y almacenado de manera segura en tu entorno de desarrollo (utilizado para la cifrado)
  • Clave Pública: Derivada de tu clave privada y almacenada en la configuración de tu aplicación Capacitor (usada para la descriptografía)
  • Claves de Sesión: Claves AES aleatorias generadas para cada carga de paquete
  1. Se genera una clave de sesión AES aleatoria para cada carga de paquete
  2. Su paquete se cifra utilizando la clave de sesión AES
  3. Se calcula el checksum del paquete
  4. La clave de sesión AES y el checksum se cifran juntos utilizando su clave privada RSA (creando la “firma”)
  5. El paquete cifrado y la firma cifrada se almacenan

El checksum se cifra junto con la clave AES para prevenir la manipulación. Dado que solo su clave privada RSA puede crear esta firma, y solo la clave pública correspondiente puede descifrarla, esto garantiza que tanto la clave de sesión AES como el checksum esperado sean auténticos y no hayan sido modificados por un atacante.

  1. Su aplicación descarga el paquete cifrado y la firma cifrada
  2. El Capgo SDK utiliza su clave pública RSA (almacenada en la aplicación) para descifrar la firma
  3. Esto revela la clave de sesión AES y el checksum original
  4. La clave de sesión AES se utiliza para descifrar el paquete
  5. Se calcula un checksum del paquete descifrado y se compara con el checksum original para verificar la integridad

Este proceso garantiza que incluso si un atacante intercepta el paquete cifrado, no pueden modificar la clave de sesión AES o proporcionar un checksum falso, porque necesitarían su clave privada para crear una firma válida que la clave pública pueda descifrar

CaracterísticaCapgoOtras plataformas de actualización OTA
Contenido del paqueteEncriptado en almacenamiento/tránsito; aún inspeccionable por un ingeniero de reversa determinado con el binario de la aplicaciónLeído públicamente
Método de seguridadEncriptación de extremo a extremo verdaderaCode solo con firma
Nivel de privacidadProtección de entrega/almacenamiento fuerte; no anti-reversaLa plataforma puede acceder a su code
ProtecciónContenido + integridad + autenticidadIntegridad + autenticidad solo

¿Por qué esto importa:

  • Code de firma solamente verifica que las actualizaciones no han sido manipuladas y provienen de la fuente correcta
  • Capgo de cifrado protege el paquete mientras se almacena y se entrega y hace que las actualizaciones cifradas falsificadas sean mucho más difíciles porque el atacante necesitaría su clave privada
  • La ingeniería inversa sigue siendo posible después de que la aplicación se envíe, porque el cliente contiene la clave pública necesaria para descifrar y cargar la actualización

Capgo utiliza el método de cifrado V2 como el método estándar:

Método de cifrado V2 (Método estándar actual)

Título de la sección “Cifrado V2 (Estándar Actual)”
  • Utiliza RSA-4096 para una mayor seguridad
  • Utiliza AES-256-GCM para la cifrado autenticado
  • Proporciona verificación de integridad
  • Mejora el rendimiento y la seguridad
  • Utiliza RSA-2048 para cifrar la clave
  • Utiliza AES-256-CBC para cifrar el paquete
  • No está disponible en la versión actual CLI
  • Las aplicaciones legadas que utilizan V1 deben migrar a V2

Paso 1: Generar claves de cifrado

Paso 1: Generar Claves de Criptografía

Primero, genere sus claves de cifrado utilizando el Capgo CLI.

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

Copiar al portapapeles

  • .capgo_key_v2Tu clave privada (manténla segura)
  • .capgo_key_v2.pub: Su clave pública (utilizada por tu aplicación)

Estos archivos se crean en el directorio actual donde ejecutas el comando.

Paso 2: Guarda tu Clave Pública en Capacitor Config (Requerido)

Sección titulada “Paso 2: Guarda tu Clave Pública en Capacitor Config (Requerido)”

Tú debes guardar tu clave pública en la Capacitor config para que tu aplicación móvil pueda descifrar paquetes:

Ventana de terminal
# 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"

Paso 3: Sincronizar Capacitor Plataforma (Requerido)

Sección titulada “Paso 3: Sincronice la plataforma Capacitor (Requerido)”

Después de guardar la clave pública, usted debe sincronizar la plataforma Capacitor para copiar la configuración actualizada a la capa nativa:

Ventana de terminal
# Sync the platform to copy config to native
npx cap sync

La forma más sencilla es cifrar durante el proceso de carga:

Pantalla 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étodo 2: Flujo de trabajo de cifrado manual

Método 2: Flujo de trabajo de cifrado manual

Para tener más control, puedes cifrar manualmente bundles:

  1. Crear un paquete zip:

    Ventana de terminal
    npx @capgo/cli@latest bundle zip com.example.app --path ./dist --key-v2
  2. Proteger el paquete:

    Ventana de terminal
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. Subir a tu almacenamiento (por ejemplo, S3) y registrar con Capgo:

    Ventana 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

Opciones de clave privada:

  1. Basado en archivo (desarrollo local):

    Ventana de terminal
    # Key stored as .capgo_key_v2 file in project root
    npx @capgo/cli@latest bundle upload --key-v2
  2. Variable de entorno (CI/CD):

    Ventana 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"

Configuración de clave pública (Requerido):

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

Entorno de producción:

  • Almacenar claves privadas en servicios de gestión de claves seguras (AWS KMS, Azure Key Vault, etc.)
  • Utilice la gestión de secretos de CI/CD para claves privadas
  • Jamás cometa claves privadas en control de versiones

Uso de la clave:

  • Clave privada: Utilizada por CLI para la cifrado durante la carga de paquete (mantener seguro)
  • Clave públicaAlmacenado en la configuración de la aplicación para la descifrado en el dispositivo (seguro para comitar)

Rotar después de un compromiso de clave privada

Sección titulada “Rotar después de un compromiso de clave privada”

Rotar la pareja de claves cuando la clave privada se sospeche o se confirme comprometida. No se requiere una rotación de calendario rutinaria. Este es un cambio de clave nativa, no un cambio OTA solo.

  1. Generar una pareja de claves de reemplazo:

    Ventana de terminal
    npx @capgo/cli@latest key create
  2. Guarda la clave pública de reemplazo en tu Capacitor configuración:

    Ventana de terminal
    npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub
  3. Sincroniza y envía una versión nativa: Ejecutar npx cap syncDistribuya una nueva versión nativa de la aplicación que contenga la nueva clave pública de reemplazo.

  4. Dirija la nueva versión nativa: Entonces distribuye una nueva versión de aplicación nativa que contenga la clave pública de reemplazo. Dirigir la nueva versión nativa: Los dispositivos que aún ejecutan la versión binaria nativa antigua no pueden descifrar actualizaciones cifradas con la clave de reemplazo. Utiliza

  5. Targeteo de versión As pronto como esa versión nativa esté disponible, reemplaza la clave privada en CI y sube solo paquetes dirigidos a versiones nativas que contengan la clave pública de reemplazo.

Seguridad de la Clave

Seguridad de la clave
  • Jamás compartas claves privadas entre entornos o miembros del equipo
  • Utiliza claves diferentes para diferentes entornos (desarrollo, pruebas, producción)
  • Rotar después de una vulneración: reemplaza la pareja de claves cuando se sospeche o confirme que la clave privada está comprometida; no se requiere una rotación de calendario rutinaria
  • Almacena claves de manera segura utilizando sistemas de gestión de claves adecuados
  • Verifica siempre integridad del paquete después de la desifrado
  • Monitorea por patrones de descarga inusuales o fallas
  • Utiliza HTTPS para todas las URL de la caja (requerido para aplicaciones móviles)
  • Implementar manejo de errores adecuado para fallos de descifrado
  • Limitar el acceso a las llaves de cifrado solo a personal autorizado
  • Utilice acceso basado en roles para operaciones de gestión de llaves
  • Audit del uso y acceso de las llaves regularmente
  • Implementar procedimientos de respaldo y recuperación adecuados

Fallas de descifrado:

  • Verifique que la clave privada coincida con la clave pública utilizada para la criptografía
  • Verifique que el ivSessionKey esté correcto
  • Asegúrese de que esté utilizando la Criptografía V2 (V1 ya no está soportada)

Errores relacionados con la clave:

  • Confirme que el formato de la clave privada es correcto (formato PEM)
  • Verificar que la clave no se ha corrompido durante el almacenamiento/transferencia
  • Verifique que la clave tenga permisos adecuados en la configuración de su aplicación

Problemas de rendimiento:

  • Los paquetes grandes pueden tardar más en cifrar/descifrar
  • Consider using Delta updates to reduce bundle sizes
  • Monitorear el rendimiento del dispositivo durante la descifrado

Verifique el estado de cifrado:

Ventana de terminal
npx @capgo/cli@latest app debug

Prueba el flujo de cifrado/descifrado:

Ventana 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 implementa la cifrado según estándares de la industria:

  • AES-256: Algoritmo de cifrado aprobado por FIPS 140-2
  • RSA-4096: Cifrado asimétrico fuerte para la protección de claves
  • Modo GCM: Proporciona tanto confidencialidad como autenticidad
  • Aleatorio Seguro: Generación de números aleatorios criptográficamente seguros

Esto hace a Capgo adecuado para aplicaciones que requieren cumplimiento con:

  • RGPD (Reglamento General de Protección de Datos)
  • HIPAA (Ley de Portabilidad e Integridad de Seguros de Salud)
  • SOC 2 (Control de Servicios Organizativos 2)
  • ISO 27001 (Gestión de la Seguridad de la Información)
  • Tamaño del paquete: Los paquetes cifrados son ligeramente más grandes (~1-2% de sobrecarga)
  • Tiempo de procesamiento: La cifrado/descifrado añade una latencia mínima
  • Uso de memoria: Aumento temporal durante operaciones de cifrado/descifrado
  • Utilice actualizaciones Delta para minimizar el tráfico de datos cifrados
  • Optimice el tamaño de su paquete convirtiendo las imágenes a formato WebP
  • Minimice los archivos JavaScript y CSS antes de empaquetarlos
  • Elimine dependencias innecesarias y code
  • Monitor device performance on older/slower devices

Sigue adelante desde la Criptografía

a automatizar despliegues cifrados

Sigue adelante desde Cifrado Cifrado para planificar la seguridad y la conformidad, conecte con Conformidad para el detalle de implementación en Conformidad Capgo Escáner de Seguridad para el flujo de trabajo del producto en Capgo Escáner de Seguridad Capgo Seguridad para el flujo de trabajo del producto en Capgo Seguridad Capgo Centro de Confianza para el flujo de trabajo del producto en Capgo Centro de Confianza, y Seguridad de la Organización para el detalle de implementación en Seguridad de la Organización