보안
디지털 라이프를 위한 은행 수준 암호화
제로 지식 아키텍처
ByteGuard는 제로 지식 보안 모델을 기반으로 구축되었습니다. 당사는 암호화 키를 열람, 접근 또는 저장하지 않습니다.
- 마스터 비밀번호: 앱 잠금 해제를 위한 개인 키입니다. 전송되거나 원격으로 저장되지 않습니다.
- 복구 키(Secret Key): 금고 생성 시 생성되는 12단어 복구 문구(BIP39)입니다. 마스터 비밀번호와 결합하여 최대한의 보안을 제공합니다.
- 로컬 키 파생: 64MB 메모리 비용과 3회 반복의 Argon2id로 마스터 키를 로컬에서 파생합니다. HKDF-SHA256이 키 계층을 구축합니다.
- 백도어 없음: 마스터 비밀번호와 복구 키를 모두 분실하면 데이터를 복구할 수 없습니다. 이는 의도된 설계입니다.
암호화 세부 정보
다층 암호화가 모든 민감한 데이터를 보호합니다.
- Master Key: Argon2id(마스터 비밀번호 ‖ Secret Key, salt)를 로컬에서 파생합니다. OWASP 권장 파라미터: 메모리 64MB × 3회 반복으로 GPU 무차별 대입 공격에 충분히 대응합니다. 이 키는 절대 기기를 떠나지 않습니다.
- 인증 해시(Auth Hash): HKDF-SHA256(Master Key, info="vault-auth-v1"). 비밀번호 검증 용도로만 사용됩니다. 상수 시간 바이트 비교로 타이밍 공격을 방지합니다.
- KEK (키 암호화 키): HKDF-SHA256(Master Key, info="vault-kek-v1"). 금고 DEK를 언래핑(unwrap)하는 용도로만 사용되며, 사용자 데이터에 직접 접근하지 않습니다.
- 금고 DEK (금고 전체): 256비트 무작위 생성 키입니다. **평문 DEK는 기기 RAM을 절대 떠나지 않으며**, 래핑된 DEK(KEK로 AES-256-GCM 암호화된 암호문)는 금고 메타데이터와 함께 저장되고 iCloud 활성화 시 CloudKit Private DB를 통해 동기화됩니다 — 기기를 떠나는 것은 암호문뿐입니다. 마스터 비밀번호를 변경하더라도 KEK 재파생과 DEK 재래핑만 수행되며, 금고 전체를 다시 암호화하지 않습니다.
- 항목 키 (Item Key, 항목별): 유형 + 항목 ID에서 HKDF-SHA256(금고 DEK, info="type-{T}-item-{ID}-v1")로 파생됩니다. 각 레코드가 독립된 키를 사용하므로 한 키가 유출되어도 다른 키에는 영향이 없습니다.
- 필드 암호문: AES-256-GCM(항목 키, 평문)으로 유형별 민감 필드를 암호화합니다: 로그인 비밀번호, 보조 비밀번호, PIN, 보안 질문 답변, 사용자 정의 시크릿 필드, 카드 번호(PAN). 계정 이름, 사용자 이름, URL, 만료일, 태그는 검색과 인덱싱을 위해 평문 메타데이터로 저장됩니다. 매 암호화 시 고유한 IV를 사용해 동일한 평문도 서로 다른 암호문을 생성합니다.
데이터 저장
데이터는 기기에 보관됩니다. 클라우드 동기화는 선택 사항이며 항상 암호화됩니다.
- 로컬 우선: 모든 데이터가 기기의 암호화된 로컬 데이터베이스에 저장됩니다.
- 선택적 iCloud 동기화: 활성화되면 데이터가 기기에서 암호화된 후 CloudKit을 통해 개인 iCloud 컨테이너에 업로드됩니다.
- 생체 인증 보호: Secure Enclave를 통해 Face ID와 Touch ID를 지원합니다. 생체 인증 데이터는 iOS가 처리하며 앱에서 접근할 수 없습니다.
당사가 할 수 없는 것
제로 지식 아키텍처로 인해:
- 저장된 데이터를 열람, 접근 또는 복호화할 수 없습니다
- 마스터 비밀번호를 재설정할 수 없습니다
- 복구 키 없이 금고를 복구할 수 없습니다
- 법 집행 기관을 포함한 누구에게도 데이터를 공유할 수 없습니다
- 암호화에 백도어를 삽입할 수 없습니다
기기 보안 호환성
ByteGuard는 Apple의 내장 보안 기능과 완벽하게 연동되도록 설계되었습니다.
- Apple Lockdown Mode: Apple의 최고 수준 보안 보호와 완벽 호환. 잠금 모드가 활성화된 상태에서도 AutoFill, iCloud 동기화, 위젯 등 모든 기능이 정상 작동합니다.
- WebView 미사용: ByteGuard는 웹 렌더링 엔진을 사용하지 않습니다. 보관함 데이터가 WebKit을 통해 처리되지 않아 브라우저 기반 공격 벡터를 원천 차단합니다.
- Secure Enclave 통합: 생체 인증은 전적으로 iOS Secure Enclave에서 처리됩니다. ByteGuard는 생체 인식 데이터에 접근하거나 저장하지 않습니다.
기기 수준 보호
생체 인증 빠른 잠금 해제의 경계는 iOS Keychain과 Secure Enclave가 공동으로 유지합니다. 애플리케이션은 Face ID/Touch ID에서 파생된 어떠한 키도 보유하지 않습니다.
- iOS Keychain ACL: 금고 DEK의 사본은 kSecAttrAccessibleWhenUnlockedThisDeviceOnly + kSecAccessControlBiometryCurrentSet 속성으로 Keychain에 저장됩니다. 기기가 잠겨 있거나 Face ID 인증이 이루어지지 않은 상태에서는 읽을 수 없습니다.
- Secure Enclave가 인계받음: Keychain 항목은 Secure Enclave 내부의 기기 키로 암호화됩니다. 앱이 SecItemCopyMatching을 호출하면 iOS가 Face ID를 트리거하며, 성공 시 SE가 복호화하여 평문 DEK를 반환합니다 — 앱은 어떠한 SE 키에도 접근하지 않습니다.
- Face ID 재등록 시 자동 무효화: biometryCurrentSet 시맨틱: 사용자가 시스템 설정에서 Face ID를 제거하거나 재등록하면 iOS가 자동으로 Keychain 항목을 삭제합니다. ByteGuard는 시작 시 무효화를 감지하고 마스터 비밀번호 재입력을 강제합니다.
- 엄격 모드 (대체 경로 없음): biometryCurrentSet이 사용 불가능한 경우(시뮬레이터, 등록된 생체 인증 없음), DEK 캐시는 단순히 실패하며 — 보호 수준이 낮은 Keychain 항목으로 절대 대체되지 않습니다. 대체 경로는 Face ID를 아예 활성화하지 않은 것보다 더 약하며 사용자의 의도에 반하기 때문입니다.
- 메모리 제로화 (금고 DEK): 잠금, 일시 중단 또는 금고 전환 시, 금고 DEK는 컴파일러 최적화를 방지하는 메모리 배리어와 함께 세 번 덮어 쓰입니다(0 → 무작위 → 0). 마스터 키 / KEK는 잠금 해제 함수 내부의 로컬 변수로 Swift ARC에 의해 해제됩니다(명시적 제로화는 하지 않음). Argon2 내부 버퍼는 libsodium의 sodium_memzero로 제로화됩니다.
App Store에서 다운로드