SpaceMoon이 파일을 보호하는 방식

이 페이지에서는 SpaceMoon이 하는 일과 할 수 없는 일을 쉬운 말로 설명해요. 지나치게 큰 약속을 믿게 하기보다 한계를 알려 드리는 편이 낫다고 생각해요.

요약

패턴에서 키까지

패턴은 5×5 점에서 6개 이상을, 같은 점을 두 번 지나지 않게 이어 그려요. SpaceMoon은 Argon2id로 패턴을 키로 바꿔요. 이때 libsodium(Android에서는 1.0.20 버전)을 사용해요.

파일 암호화 방식

복구 문구

지문

지문 잠금 해제는 선택 사항이에요. 지문은 SpaceMoon이 아니라 Android가 확인하며, 앱은 지문 정보를 받지 않아요. 강한 생체 인증을 막 통과했을 때만 쓸 수 있는 Android Keystore 키가 마스터 키를 열어요. 누군가 휴대폰에 새 지문을 추가하면 이 키는 더 이상 쓸 수 없고, 다시 패턴을 사용해야 해요.

백업 파일

앱의 다른 보호 기능

알아야 할 한계

모든 것을 막아 주는 앱은 없어요. SpaceMoon의 한계를 솔직하게 알려 드려요.

단순한 패턴은 맞히기 쉬워요

짧거나 흔한 모양(L, Z, 직선)은 옆에서 지켜보거나, 화면에 남은 자국을 보거나, 몇 번만 시도해도 맞힐 수 있어요. 사람들이 실제로 쓰는 패턴은 가능한 패턴의 수가 말해 주는 것보다 훨씬 맞히기 쉬워요. 더 많은 점을 지나고 더 여러 번 꺾어 주세요. 너무 단순한 패턴이면 앱이 알려 줘요.

추측에 걸리는 시간

앱 안에서는 한 번 시도할 때마다 약 1초가 걸리고, 5번 틀린 뒤로는 대기 시간이 늘어나요. 하지만 내 백업 파일을 가진 사람이나, 루팅된 휴대폰에서 기기 솔트를 빼낸 사람은 대기 시간 없이 컴퓨터로 추측할 수 있어요. Argon2id가 속도를 늦추지만, 패턴은 긴 비밀번호보다 경우의 수가 훨씬 적어요. 고성능 그래픽 카드 1장(RTX 4090급)으로 초당 약 1,000번 추측한다고 할 때의 대략적인 추정치예요.

추측 대상경우의 수걸리는 시간(그래픽 카드 1장)
가장 흔한 패턴 10,000개104약 10초
점 6개로 된 모든 패턴1.28 × 108약 1.5일
점 7개로 된 모든 패턴2.42 × 109약 28일
점 8개로 된 모든 패턴4.36 × 1010약 1.4년
복구 문구(92비트)4.95 × 1027약 1.6 × 1017년

측정값이 아니라 추정치예요. 패턴 수는 최대치이고, 실제로 쓰이는 패턴은 훨씬 적어요. 하드웨어가 더 많거나 빠르면 그만큼 추측도 빨라져요.

백업 파일은 나만 볼 수 있게 보관하세요

백업 파일에는 기기 솔트가 없어서, 파일을 손에 넣은 사람은 누구든 위처럼 오프라인으로 패턴을 시도할 수 있어요. 내 클라우드 계정처럼 나만 접근할 수 있는 곳에만 보관하고, 더 긴 패턴을 쓰세요.

루팅되었거나 악성 앱에 감염된 휴대폰

누군가 앱의 권한으로 코드를 실행할 수 있다면(예: 루팅된 휴대폰, 또는 휴대폰을 완전히 장악한 악성 앱), 기기 솔트를 열어 오프라인으로 추측할 수 있어요. 보관함이 열려 있는 동안에는 키가 메모리에 있어서 루트 권한이나 디버거로 읽을 수 있어요. Android와 Flutter 내부에서 만들어지는 일부 사본과 화면에 표시된 사진은 메모리에서 바로 지울 수 없어요.

일부 정보는 드러나요

앱 저장 공간에 있는 암호화된 파일의 개수, 대략적인 크기, 만들어지거나 바뀐 시각은 숨겨지지 않아요. SpaceMoon이 설치되어 있다는 사실도 마찬가지예요.

앱 아이콘 변경은 홈 화면만 바꿔요

지문은 더 약한 경로예요

지문 잠금 해제는 Argon2id를 거치지 않아요. 안전성은 휴대폰의 지문 센서와 Android Keystore에 달려 있어요. 언제든 설정에서 끌 수 있어요.

침입자 사진

앱은 셔터음을 내지 않지만, 일본이나 한국 등 일부 국가에서 판매된 휴대폰은 셔터음이 항상 나요. 다른 앱이 카메라를 쓰고 있거나 전면 카메라가 없으면 사진을 찍지 않아요. 처음 만든 보관함을 열기 전까지 사진은 Android Keystore 키로 잠겨 있어요.

사진 정보

시스템 화면이 열려 있는 동안에는 잠기지 않아요

시스템 화면(권한 요청, 삭제 확인, 사진·파일 선택기, 지문 확인 창)이 열려 있는 동안과 가져오기나 내보내기가 진행되는 동안에는 앱이 잠그기를 미뤄요. 앱을 나간 상태라면 그것이 끝나고 2초 뒤에 잠겨요.

보관함들은 기기 솔트를 함께 써요

한 휴대폰의 모든 보관함은 같은 기기 솔트를 써요. 누군가 그 솔트를 가지고 있다면, 한 번의 추측으로 모든 보관함을 동시에 시험할 수 있어요. 보관함 하나를 공격하는 데 드는 비용은 똑같아요.

어떤 앱도 막을 수 없는 것

누군가 패턴을 그리는 모습을 지켜보거나, 카메라로 화면을 찍는 경우예요.

둘 다 잃어버리면 누구도 도울 수 없어요

패턴과 복구 문구를 모두 잃어버리면 누구도 파일을 되살릴 수 없어요. 저희도 마찬가지예요.