메뉴로 바로가기

암호화

Capgo은 앱 번들을 통해 JavaScript code 및 자산을 보호하는 강력한 종단-to-종단 암호화 기능을 제공합니다. 이 암호화 시스템은 앱의 보안에 대한 완전한 제어를 유지하면서 실시간 업데이트의 편의성을 유지하기 위해 설계되었습니다.

Capgo의 암호화 시스템은 업로드된 패키지를 비인가 접근으로부터 보호하기 위해 업계 표준 암호화 방법을 사용합니다. 암호화가 활성화되면 개발 환경을 떠나기 전에 패키지는 암호화되어 저장되고 전송되며 사용자의 장치에서 앱이 패키지를 해독할 때까지 암호화 상태로 유지됩니다.

__CAPGO_KEEP_0__에서 실제로 보호하는 것Capgo와 같은 OTA 시스템은 업데이트만 서명하는 반면 Capgo는 업로드된 패키지를 저장 및 전송하기 전에 암호화합니다. 이로 인해 저장 또는 전송 중에 패키지 내용을 비인가 접근으로부터 보호하고, 유효한 암호화된 업데이트를 만들 수 있는のは 당신의 개인 키를 보유한 사람들만이 됩니다. 그러나 shipped 웹 자산을 역공학할 수 없게 만드는 것은 아닙니다: 클라이언트가 업데이트를 해독하기 위해 사용하는 공개 키는 앱에 분포되어 있으므로 충분한 노력만 하면 패키지 내용을 검사할 수 있습니다. __CAPGO_KEEP_0__를 사용할 때 __CAPGO_KEEP_0__를 사용할 때

암호화 방법

암호화 방법

Capgo은 RSA 및 AES 암호화가 최적의 보안성과 성능을 제공하는 하이브리드 암호화 접근 방식을 사용합니다:

Capgo 암호화 흐름

1. 개인 키 생성

1. 개인 키 생성 섹션
  • 개인 키: 개발 환경에서 안전하게 생성 및 저장되며 암호화에 사용됩니다.
  • 공개 키: 개인 키에서 파생되며 앱의 Capacitor 구성에서 암호 해독에 사용됩니다.
  • 세션 키: 각 업로드 배ंडल에 대한 임의 AES 키

2. 암호화 과정

2. 암호화 과정 섹션
  1. 각 업로드 배ंडल에 대한 임의 AES 세션 키가 생성됩니다.
  2. AES 세션 키를 사용하여 배ंडल이 암호화됩니다.
  3. 압축 파일의 체크섬은 계산됩니다.
  4. AES 세션 키와 체크섬은 모두 RSA 개인 키를 사용하여 암호화됩니다 (‘서명’을 만듭니다).
  5. 암호화된 압축 파일과 암호화된 서명은 저장됩니다.

체크섬은 AES 키와 함께 암호화되어 변조를 방지합니다. 왜냐하면만 RSA 개인 키만이 이 서명을 만들 수 있고, 이 서명을 해독할 수 있는 공개 키만이 이 서명을 해독할 수 있기 때문입니다. 따라서 AES 세션 키와 예상되는 체크섬은 모두 가짜가 아니며, 공격자가 변조하지 않았는지 확인하기 위해 이 서명이 유효한지 확인합니다.

  1. 앱은 암호화된 압축 파일과 암호화된 서명을 다운로드합니다.
  2. Capgo SDK은 앱에 저장된 RSA 공개 키를 사용하여 서명을 복호화합니다.
  3. 이것은 AES 세션 키와 원래 체크섬을 드러냅니다.
  4. AES 세션 키는 압축 파일을 복호화합니다.
  5. 복호화된 압축 파일의 체크섬이 계산되고 원래 체크섬과 일치하는지 확인합니다.

이 과정은 공격자가 암호화된 압축 파일을截获해도, AES 세션 키나 가짜 체크섬을 제공할 수 없습니다. 왜냐하면 공격자가 유효한 서명을 만들기 위해서는 개인 키가 필요하기 때문입니다. 그리고 개인 키는 공개 키가 서명을 해독할 수 있도록 합니다.

Capgo vs Other Platforms

Capgo vs Other 플랫폼
FeatureCapgo다른 OTA 플랫폼
배포 콘텐츠저장/전송 중 암호화되지만 앱 바이너리와 함께 결정된 역공학자에 의해 검사할 수 있습니다.공개 가능한
보안 방법__CAPGO_KEEP_0__ 암호화Code 서명만
개인 정보 수준__CAPGO_KEEP_0__ 보호; 역공학 방지 기능이 아닌플랫폼이 code에 접근할 수 있습니다
보호내용 + 무결성 + 진위무결성 + 진위만

이것이 중요한 이유는

  • Code 서명 __CAPGO_KEEP_0__ 서명은 업데이트가 변조되지 않았는지와 올바른 출처에서 왔는지 확인합니다
  • Capgo 암호화 __CAPGO_KEEP_0__는 __CAPGO_KEEP_0__ Encryption V2를 표준 암호화 방법으로 사용합니다:
  • __CAPGO_KEEP_0__ Encryption V2 (현재 표준) __CAPGO_KEEP_0__는 RSA-4096를 향상된 보안을 위해 사용합니다

__CAPGO_KEEP_0__는 AES-256-GCM을 인증된 암호화를 위해 사용합니다

__CAPGO_KEEP_0__는 데이터 무결성을 확인합니다

Capgo는 성능과 보안을 향상합니다

__CAPGO_KEEP_0__는 번들을 저장하고 전송하는 동안 보호하고, 위조된 암호화된 업데이트를 훨씬 더 어려워지게 만듭니다. 공격자는 업데이트를 암호화하고 로드하기 위해 필요한 개인 키를 필요로 합니다.

__CAPGO_KEEP_0__는 앱이 배포된 후에도 역공학이 가능합니다. 클라이언트에는 업데이트를 암호화하고 로드하기 위해 필요한 공개 키가 포함되어 있습니다.
  • __CAPGO_KEEP_0__ 암호화 방법
  • __CAPGO_KEEP_0__ 암호화 방법 섹션
  • __CAPGO_KEEP_0__는 현재 표준 암호화 방법으로 Encryption V2를 사용합니다:
  • __CAPGO_KEEP_0__ Encryption V2 (현재 표준) 섹션

V1 암호화 (deprecated)

V1 암호화 (deprecated) 섹션
  • RSA-2048를 사용하여 키 암호화
  • AES-256-CBC를 사용하여 패키지 암호화
  • 현재 CLI에서 더 이상 사용할 수 없습니다.
  • V1을 사용하는 레거시 앱은 V2로 마이그레이션해야 합니다.

Setting Up Encryption

암호화 설정

1단계: 암호화 키 생성

1단계: 암호화 키 생성

먼저 Capgo CLI을 사용하여 암호화 키를 생성하세요.

터미널 창
# Generate new encryption keys (creates files in current directory)
npx @capgo/cli@latest key create

이것이 생성됩니다:

  • .capgo_key_v2: 개인 키 (이것을 안전하게 보관하세요!)
  • .capgo_key_v2.pub: 공개 키 (애플리케이션에서 사용)

이 파일들은 명령어를 실행한 현재 디렉토리에서 생성됩니다.

Step 2: Capacitor 공개 키를 저장하세요 (필수)

Step 2: Capacitor 공개 키를 저장하세요 (필수) 섹션

당신 당신 Capacitor 설정에 공개 키를 저장해야 하므로 모바일 앱이 패키지를 암호화할 수 있습니다:

터미널 창
# 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"

Step 3: Capacitor 플랫폼을 동기화하세요 (필수)

Step 3: Capacitor 플랫폼을 동기화하세요 (필수) 섹션

공개 키를 저장한 후에 당신 sync the Capacitor platform to copy the updated config to the native layer:

터미널 창
# Sync the platform to copy config to native
npx cap sync

파일 암호화

파일 암호화

1. 업로드 중 암호화

__CAPGO_KEEP_0__

__CAPGO_KEEP_1__

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

__CAPGO_KEEP_4__

__CAPGO_KEEP_5__

__CAPGO_KEEP_6__

  1. __CAPGO_KEEP_7__

    __CAPGO_KEEP_8__
    npx @capgo/cli@latest bundle zip com.example.app --path ./dist --key-v2
  2. __CAPGO_KEEP_10__

    __CAPGO_KEEP_11__
    npx @capgo/cli@latest bundle encrypt ./com.example.app.zip CHECKSUM_FROM_STEP_1
  3. Capgo에 등록하기 위해 저장소에 업로드하세요 (예: S3).

    터미널 창
    # 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

키를 안전하게 저장하는 방법

키를 안전하게 저장하는 방법 섹션

개인 키 옵션:

  1. 파일 기반 (개발용):

    터미널 창
    # Key stored as .capgo_key_v2 file in project root
    npx @capgo/cli@latest bundle upload --key-v2
  2. 빌드 자동화 도구(CI/CD) 환경 변수:

    터미널 창
    # 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"

공개 키 설정(필수):

터미널 창
# Must save public key to Capacitor config for mobile app
npx @capgo/cli@latest key save --key ./.capgo_key_v2.pub

운영 환경:

  • 보안 키 관리 서비스(AWS KMS, Azure Key Vault 등)에 개인 키를 저장하세요.
  • CI/CD 비밀 관리를 사용하여 개인 키를 관리하세요.
  • 버전 관리 시스템에 개인 키를 절대 커밋하지 마세요.

키 사용:

  • 개인 키: CLI을 사용하여 업로드할 때 패키지 암호화를 위해 사용됩니다 (보안 유지)
  • 공개 키: 앱 구성에서 디바이스에서 해독하기 위해 저장됩니다 (소스 코드에 포함해도 안전)

보안을 강화하기 위해 암호화 키를 정기적으로 회전하세요:

  1. 새로운 키를 생성하세요:

    터미널 창
    # Navigate to desired directory first, then create keys
    mkdir ./new-keys && cd ./new-keys
    npx @capgo/cli@latest key create
  2. Capacitor 구성에 새로운 공개 키를 저장하세요:

    터미널 창
    npx @capgo/cli@latest key save --key ./new-keys/.capgo_key_v2.pub
  3. 애플리케이션 구성 업데이트 새로운 공개 키와 함께

  4. 업데이트된 애플리케이션 배포 새 키로 암호화된 번들을 업로드하기 전에

보안 최적화 방법

보안 최적화 방법
  • 개인 키를 환경 또는 팀 구성원과 공유하지 마세요
  • 다른 키를 다른 환경 (개발, 스테이징, 운영) 에서 사용하세요
  • 키를 정기적으로 회전하세요 (권장: 6-12 개월마다)
  • 키를 안전하게 저장하세요 적절한 키 관리 시스템을 사용하여

Bundle Security

Bundle Security
  • 반드시 암호 해독 후 다운로드 패턴이나 실패가 이상할 경우
  • 이상한 다운로드 패턴이나 실패를 감시하세요 모바일 앱의 경우 모든 Bundle URL에 HTTPS를 사용하세요 (필수)
  • 모바일 앱의 경우 모든 Bundle URL에 HTTPS를 사용하세요 (필수) 모바일 앱의 경우 모든 Bundle URL에 HTTPS를 사용하세요 (필수)
  • 암호화 실패 시 적절한 오류 처리를 구현하세요. Access Control
  • 역할 기반 접근 제어 키 관리 작업에 대한 역할 기반 접근 제어를 사용하세요.
  • 키 사용 및 접근을 정기적으로 감사하세요. 적절한 백업 및 복구 절차를 구현하세요.
  • Implement proper error handling for decryption failures
  • Access Control Section titled “Access Control”

암호화 문제 해결

암호화 문제 해결 섹션

일반적인 문제

일반적인 문제 섹션

해독 실패:

  • 개인 키가 암호화에 사용된 공개 키와 일치하는지 확인하십시오.
  • 암호화에 사용된 키가 올바른지 확인하십시오. ivSessionKey is correct
  • 암호화 V2를 사용 중인지 확인하십시오 (V1은 더 이상 지원되지 않습니다).

키 관련 오류:

  • 개인 키 형식이 올바른지 확인하십시오 (PEM 형식).
  • 저장/전송 중에 키가 손상되지 않았는지 확인하십시오.
  • 애플리케이션 구성에서 키가 올바른 권한을 가지고 있는지 확인하세요.

성능 문제:

  • 대형 번들을 암호화/복호화하는데 더 오랜 시간이 걸릴 수 있습니다.
  • 번들의 크기를 줄이기 위해 Delta(매니페스트) 업데이트를 사용하는 것을 고려하세요.
  • 디바이스의 성능을 복호화하는 동안 모니터링하세요.

디버그 명령어

디버그 명령어

암호화 상태를 확인하세요:

터미널 창
npx @capgo/cli@latest app debug

암호화/복호화 워크플로우를 테스트하세요:

터미널 창
# 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

Copy to clipboard

법적 준수 및 표준

Capgo의 암호화 구현은 업계 표준을 따릅니다.

  • AES-256FIPS 140-2로 승인된 암호화 알고리즘입니다.
  • RSA-4096키 보호를 위한 강력한 비대칭 암호화입니다.
  • GCM 모드위변조와 기밀성을 제공합니다.
  • Secure Random암호학적으로 안전한 난수 생성입니다.

이것은 Capgo를 다음 규정에 부합하는 애플리케이션에 적합하게 만듭니다.:

  • GDPR (일반 데이터 보호 규정)
  • HIPAA (건강 보험 포트 ability 및 책임성 법)
  • SOC 2 (서비스 조직 제어 2)
  • ISO 27001 (정보 보안 관리)

성능 고려 사항

성능 고려 사항

암호화 오버헤드

암호화 오버헤드
  • 배포 크기: 암호화 된 배포는 약 1-2%의 오버헤드가 발생합니다.
  • 처리 시간__CAPGO_KEEP_0__
  • 메모리 사용량: 임시적으로 암호화/복호화 작업 중에 메모리 사용량이 증가합니다.

최적화 팁

최적화 팁
  • Delta (매니페스트) 업데이트를 사용하여 암호화된 데이터 전송량을 최소화하세요.
  • 이미지를 WebP 형식으로 변환하여 번들 크기를 최적화하세요.
  • JavaScript 및 CSS 파일을 미리 최소화하여 번들링하세요.
  • 사용하지 않는 의존성을 제거하고 code
  • 오래된/느린 장치에서 장치 성능을 모니터링하세요.

다음 단계

다음 단계