암호화, 복구 코드, 백업, 기기 변경 — 궁금한 답이 여기에 있습니다.
정말로 암호화됩니다. CosmosBox는 계정 불필요 설계: 데이터는 기본적으로 당신의 기기에만 존재하며, 가장 강력한 알고리즘으로 처리됩니다 — 비밀번호는 Argon2id(128MB 메모리 사용, GPU 무차별 대입 사실상 불가)로 마스터 키를 유도하고, 각 파일은 다시 독립된 AES-256-GCM 랜덤 키로 암호화됩니다. 키(마스터 키)는 잠금 해제 중에만 메모리에 존재하며 잠그면 즉시 삭제됩니다. 데이터 키는 기기 보안 칩(Android Keystore / iOS Keychain)이 보관합니다.
계정이 없다는 것은 “서버가 비밀번호를 보관한다”는 단계가 없다는 뜻 — 비밀번호 유출 면은 제로입니다. 대가로 비밀번호를 잊으면 복구 코드로만 데이터를 되찾을 수 있습니다.
바로 그런 경우를 위한 “비밀번호 복구”(복구 코드 방식)입니다. 활성화하면 시스템이 복구 코드를 생성합니다(5개로 분할 가능, 3개가 모이면 복원): 1-2개는 직접 보관하고 나머지는 믿을 만한 사람에게 나눠줍니다. 비밀번호를 잊으면 복구 코드를 입력하는 것만으로 비밀번호를 재설정하고 모든 데이터를 복원할 수 있습니다 — 서버 개입 전혀 불필요합니다.
비밀번호를 잊었고, 비밀번호 복구도 켜지 않았고, 백업도 없다면 — 데이터는 복원할 수 없습니다. 이것이 계정 없는 암호화의 물리적 한계입니다. 강력히 권장합니다: 비밀번호 설정 후 즉시 비밀번호 복구를 활성화하세요.
복구 코드 = 32바이트 진성 난수(32 × 8 = 256비트 엔트로피), 시스템의 안전한 난수 소스(Random.secure())로 생성 — 1비트 1비트가 독립적인 동전 던지기의 결과입니다. 깨려면 2²⁵⁶가지 가능성에서 정답을 찾아야 합니다.
2²⁵⁶은 얼마나 큰가? 직관적인 비교:
즉 “수학적으로 깰 수 없다”의 정확한 의미는: 절대 불가능이 아니라, 물리 법칙이 허용하는 계산 능력 안에서는 불가능 — “어렵다”가 아니라 “물리적으로 불가능”합니다.
양자 컴퓨터도 구원하지 못합니다: 그로버 알고리즘은 대칭 키 탐색을 절반으로 줄입니다: 256비트 → 2¹²⁸회. 하지만 2¹²⁸도 우주의 원자 수를 초과합니다 — 양자 컴퓨터도 마찬가지로 불가능합니다. 복구 코드가 사용하는 AES-256-GCM이 바로 양자 탐색에 저항하는 강도입니다.
왜 인간의 비밀번호는 안 되는가?
| 인간의 비밀번호 | 복구 코드 | |
|---|---|---|
| 엔트로피 원천 | 당신의 기억 — 예측 가능(흔한 단어, 생일, 키보드 패턴) | 진성 난수 생성기 |
| 실제 엔트로피 | 12자리 랜덤 ≈ 78비트; 흔한 비밀번호는 종종 30비트 미만 | 256비트 |
| 파괴 비용 | 30비트 ≈ 10⁹회, GPU로 몇 시간 | 2²⁵⁶회, 물리적으로 불가능 |
30비트와 256비트의 차이는 8배가 아니라 2²²⁶ ≈ 10⁶⁸배 — 이것이 “강력한 KDF(Argon2id)는 인간의 비밀번호를 지킬 수 있지만, 256비트 랜덤 키에는 금상첨화에 불과하다”는 이유입니다: 복구 코드는 KDF의 감속조차 필요 없습니다 — 그 자체가 완전 엔트로피의 키이기 때문입니다.
정직한 한계: “수학적으로 깰 수 없다”는 키 자체만 보호합니다. 복구 코드를 실제로 무력화하는 것은 절대 전수 조사가 아니라 인간의 부분입니다 — 메모에 적어서 촬영된 것, 루팅된 기기의 메모장에 저장된 것, 자신에게 보낸 스크린샷이 클라우드에 올라간 것. 키는 아무리 강해도 유출되면 끝입니다. 철칙: 종이에 적어 잠금 서랍에 보관 / 비밀번호 관리자에 저장(이것도 강력한 마스터 비밀번호와 함께) — 촬영 금지, 클라우드 금지, 누구에게도 보내지 마세요. 친구 지분은 Shamir 분할의 조각이며, 하나만으로는 무의미하니 안심하고 나눠줄 수 있습니다.
저장 암호화 등급(암호화 카메라, 암호화 메모 등)은 보안 강도가 낮은 순서로:
| 등급 | 파일 | 보안 | 기기 변경 |
|---|---|---|---|
| 평문 | 암호화 안 함 | 손에 넣으면 누구나 읽음 | 그냥 복사 |
| 포터블 | 암호화, 소금은 파일 내 | 비밀번호 필요 | 비밀번호 입력 |
| 소금 분리(암호화) | 암호화, 소금은 기기에 | 비밀번호 + 기기 소금 필요 | 복구 코드 필요 |
| 소금 교환(최강 내보내기) | 암호화, 소금은 오프라인 교환 | 비밀번호 + 소금, 2요소 | 상대의 소금 필요 |
쉽게 기억: 평문 → 포터블 → 소금 분리, 안전도와 번거로움도 함께 올라갑니다. 기본 “전역 설정 따름”으로 충분한 경우가 대부분. 파일이 민감할수록 높은 등급을 선택하세요.
표준 절차: 구 기기에서 백업(로컬 또는 WebDAV 클라우드) → 새 기기에서 복원 → 백업 비밀번호 입력.
새 기기에서 구 키 되찾기: 백업에 복구 설정이 자동으로 포함됩니다 — 복원 후 복구 코드를 입력하면 구 기기의 마스터 키가 복원되고 모든 암호화 데이터를 즉시 읽을 수 있습니다.
단일 파일 공유: 캐릭터 카드 등의 도구는 내보내기를 지원 — 포터블 형식은 새 기기에서 내보내기 비밀번호만 입력하면 됩니다. “오프라인 소금 교환” 형식은 먼저 소금을 오프라인으로 교환해야 합니다(더 안전, 민감 파일용).
백업은 암호문의 단순 복사가 아니기 때문입니다. 백업은 새 기기에서 모든 것을 재구축할 수 있게 해야 하므로, 암호문뿐 아니라 평문 구조 데이터(일부 도구 데이터)와 키 재료(소금, 검증 데이터, 복구 설정)도 포함합니다 — 이 모든 것을 백업 고유의 비밀번호로 통째로 다시 잠가야 합니다. 기기 위의 암호화는 “파일 유출”을 막고, 백업 비밀번호는 “백업 파일 유출”을 막습니다 — 두 개의 독립된 층입니다. 백업 비밀번호를 잊었다면? 복구 코드로 마스터 키를 복원한 뒤 백업을 다시 만들어야 합니다.
암호화 백업을 당신 자신의 클라우드/프라이빗 클라우드(견과운, NextCloud, Synology 등 WebDAV 지원 서버)에 자동 업로드 — 제3자를 거치지 않습니다. 백업 파일은 암호화(.encbak)되고, 비밀번호는 Keystore에 보관되며, 전송은 HTTPS입니다. 매일/매주 자동 백업이 시작 시 실행되어 기기를 잃어도 클라우드에서 데이터를 되찾을 수 있습니다.
소금 분실: 소금 분리 백업(파일에 소금이 없음)은 복호화할 수 없게 됩니다 — 당신 자신도 포함해서요. 그래서 활성화 시 앱이 반복적으로 경고합니다: 백업 소금을 내보내서 오프라인으로 보관(USB / 인쇄 / 비밀번호 관리자)하세요.
소금 유출: 유출 이전의 모든 소금 분리 백업이 위험해집니다(되돌릴 수 없음 — 클라우드의 구 백업 삭제 권장). 백업 소금을 재생성하면 새 백업은 자동으로 새 소금을 사용해 더 이상 유출되지 않습니다. 구 소금이 소금 라이브러리에 남아 있는 동안 구 백업도 복원 가능합니다.
소금 보관이 부담스럽다면 기본 ‘포터블’ 백업으로 충분합니다 — 소금이 포함되어 있고, 기기 변경 시 비밀번호 입력만으로 복원되며, 이미 충분히 안전합니다.
아닙니다. 초기 버전에는 “외부 파일 가져오기가 기존 데이터를 덮어쓰는” 심각한 결함이 있었고 이후 버전에서 수정되었습니다: 기기에 데이터가 있으면 외부에서 백업을 열 때 잠금 해제 후 병합 가져오기(기존 데이터 + 신규, id 기준 중복 제거)가 실행됩니다. 완전히 빈 기기(첫 사용)만 원스텝 가져오기입니다. 반드시 최신 버전으로 업데이트하세요.
구 버전으로 내보낸 백업이라면: 안의 사진이 아직 원 기기의 키로 암호화되어 있어 대상 기기에서 복호화할 수 없습니다 — 새 버전으로 다시 내보내세요(새 내보내기는 사진을 내보내기 비밀번호로 재암호화하므로, 새 기기에서 비밀번호를 입력하면 볼 수 있습니다).
새 버전 내보내기라면: 입력한 것이 내보내기 비밀번호인지 확인하세요. “오프라인 소금 교환” 형식은 보내는 쪽의 소금을 먼저 가져와야 합니다.
두 가지 과거 문제 모두 수정되었습니다: ① 공유 대상이 이 앱의 태스크 스택에 합쳐져 “위챗 화면에 붙는” 원인이었던 것 — 이제 공유가 독립 태스크로 열려 돌아오면 바로 앱으로 복귀합니다; ② 화웨이 기기의 FileProvider 크래시(R8 난독화 때문)로 내보내기가 꺼지던 것 — org.xmlpull.v1 유지로 수정되었습니다. 그래도 문제가 발생하면 피드백으로 기기 모델과 시스템 버전을 알려주세요.
암호화 내보내기는 강력한 비밀번호를 강제합니다: 8자 이상, 문자와 숫자 포함, 숫자만·문자만은 불가 — 약한 비밀번호는 확인할 수 없습니다. 포터블 형식에서는 소금이 파일에 포함되므로 비밀번호가 파일의 유일한 키입니다 — 비밀번호가 강할수록 파일이 안전합니다. “오프라인 소금 교환” 내보내기와 결합하면 비밀번호와 파일이 모두 유출되어도 풀 수 없습니다.