Wiser Locker

보안 백서

비밀번호부터 모든 파일, 데이터베이스, 백업까지 기기 안에서 보호하는 Wiser Locker의 암호화 설계예요.

Wiser Locker는 데이터를 이렇게 보호합니다

공개일: 2026년 9월 24일
최종 업데이트: 2026년 10월 12일

이 보안 백서는 Wiser Locker가 사진을 어떻게 지키는지 정확히 알고 싶은 모든 분을 위한 문서입니다. 설계를 공개하는 이유는, 좋은 암호화는 설계를 숨기는 데 기대지 않고 이용자가 가진 비밀번호에만 기대기 때문입니다.

  • 비밀번호는 휴대폰 안에서만 쓰이며 저희에게 전송되지 않습니다. 이용자 대신 금고를 열 수 있는 백도어나 마스터 키는 없습니다. 선택 기능인 클라우드 동기화도 암호화된 데이터만 이용자 본인의 Google 드라이브에 올립니다.
  • 파일마다 고유한 무작위 키가 있습니다. 파일 목록, 태그, 썸네일도 암호화됩니다.
  • 숨김 공간에는 독립된 자체 키가 있습니다. 열려면 금고 비밀번호와 숨김 공간 비밀번호가 둘 다 필요합니다.
  • 모든 암호화는 공개되어 있고 오랫동안 검증된 표준 알고리즘을 사용합니다.
  • 결국 보호 수준은 비밀번호에 달려 있습니다. 다른 곳에서 쓰지 않는 긴 비밀번호를 사용하세요.

1. 비밀번호가 키가 되는 과정

그림 1: 비밀번호에서 파일까지 이어지는 키 체인

Wiser Locker는 비밀번호로 파일을 직접 암호화하지 않습니다. 대신 위에서 아래로 이어지는 키 체인을 사용합니다.

  1. 이용자의 금고 비밀번호를 일부러 느리고 메모리를 많이 쓰는 계산에 통과시켜 잠금 해제 키로 바꿉니다.
  2. 잠금 해제 키가 하는 일은 하나, 마스터 키를 여는 것입니다. 마스터 키는 금고를 만들 때 생성되는 무작위 256비트 키이며, 비밀번호와는 아무 관련이 없습니다.
  3. 마스터 키에서 세 가지 용도별 키가 만들어집니다. 데이터베이스용, 파일 키 보관용, 변조 감지용입니다. 각 키는 한 가지 용도로만 쓰이므로, 하나가 유출되어도 마스터 키는 드러나지 않습니다.
  4. 파일마다 고유한 파일 키가 있으며, 그림 1의 파일 키 보관 키로 암호화되어 저장됩니다.

이 구조 덕분에 비밀번호를 바꿀 때는 마스터 키를 다시 감싸기만 하면 됩니다. 몇 초면 끝나고, 사진을 다시 암호화할 필요가 없습니다.

대신 감수해야 할 점이 있습니다. 비밀번호를 바꿔도 마스터 키 자체는 바뀌지 않습니다. 비밀번호를 바꾸기 전에 누군가 금고 전체를 복사해 두었고 이전 비밀번호도 알고 있다면, 비밀번호를 바꿔도 그 복사본은 막을 수 없습니다.

2. 파일 하나하나를 잠그는 방법

  • 파일을 추가하면 그 파일만의 무작위 파일 키가 생깁니다. 원본과 썸네일은 이 키에서 각각 별도의 키를 만들어 씁니다.
  • 파일은 1 MiB 단위로 나누어 암호화합니다. 각 조각에는 인증 태그가 붙고, 어느 파일의 몇 번째 조각이며 길이가 얼마인지가 함께 기록됩니다. 중간이 잘리거나, 순서가 바뀌거나, 다른 파일의 데이터가 섞이면 감지되어 거부됩니다.
  • 파일 키는 해당 파일과 공간에 묶여 있습니다. 다른 파일이나 다른 공간으로 옮기면 풀 수 없습니다.
  • 파일을 일반 공간과 숨김 공간 사이에서 옮길 때는 파일 키만 다시 감쌉니다. 사진이나 동영상 자체가 저장 공간에 복호화되는 일은 없습니다.

3. 파일 목록과 태그

  • 파일 이름, 태그, 필터, 날짜, 위치, 통계는 모두 암호화된 데이터베이스에 저장됩니다.
  • 데이터베이스 키는 마스터 키에서 만들어지므로, 따로 추측할 비밀번호가 없습니다.
  • 모든 파일 기록에는 인증 코드도 붙어 있어, 키 없이는 기록을 바꿀 수 없습니다.

4. 숨김 공간의 이중 잠금

그림 2: 숨김 공간을 열기 위해 필요한 두 가지 조건

숨김 공간에는 자체 숨김 마스터 키가 있습니다. 이 키 역시 무작위로 만들어지며 일반 공간의 마스터 키와는 전혀 관련이 없습니다. 이 키를 꺼내려면 두 가지가 동시에 필요합니다.

  1. 일반 공간이 잠금 해제된 상태, 즉 금고 비밀번호나 생체 인증으로 로그인한 상태
  2. 올바른 숨김 공간 비밀번호

이 둘이 함께 있어야만 숨김 마스터 키를 여는 키가 만들어집니다. 그래서 다음과 같습니다.

  • 숨김 공간 비밀번호만 알아서는 열 수 없습니다.
  • 금고 비밀번호만 알아도 열 수 없습니다. 강요에 못 이겨 알려 준 경우도 마찬가지입니다.
  • 생체 인증은 일반 공간 로그인에만 쓰이며 숨김 공간을 열 수 없습니다.

복구 키는 숨김 공간을 설정할 때 만들어지는 무작위 코드로, 숨김 공간 비밀번호를 잊었을 때 데이터를 처리하기 위한 것입니다. 복구 키 역시 일반 공간이 잠금 해제된 동안에만 작동합니다. 앱에서는 복구 키로 연 숨김 공간이 정리만 가능합니다. 항목의 숨김을 해제하거나 삭제할 수는 있지만 사진이나 동영상을 볼 수는 없습니다. 하지만 암호학적으로는 숨김 공간 비밀번호와 똑같이 숨김 마스터 키를 열 수 있으므로, 똑같이 안전하게 보관해야 합니다.

숨김 공간이 있다는 사실 자체를 아무도 알 수 없다고 주장하지는 않습니다. 휴대폰의 파일을 살펴볼 수 있는 사람은 숨김 공간을 설정해 두었다는 사실과, 대략 몇 개의 파일이 얼마나 큰 크기로 들어 있는지를 알아낼 수도 있습니다. 저희가 지키는 것은 콘텐츠입니다.

5. 잠금 해제 방법과 강요 대응 비밀번호

방법 열리는 곳
금고 비밀번호 일반 공간
생체 인증 일반 공간 (키의 사본은 Android의 하드웨어 기반 보안 저장소에 보관되며, 강한 생체 인증이 필요합니다)
숨김 공간 비밀번호 일반 공간에 로그인한 뒤의 숨김 공간
복구 키 일반 공간에 로그인한 뒤의 숨김 공간 정리
강요 대응 비밀번호 아무것도 열리지 않음

강요 대응 비밀번호(멤버십 기능)는 미리 따로 정해 두는 비밀번호입니다. 누군가 강요해서 앱을 열어야 할 때 이 비밀번호를 입력하면, 앱은 휴대폰에 있는 금고 전체를 즉시 지우고 설정에 따라 “로그인 실패” 또는 빈 금고 화면을 보여 줍니다. 이 작업은 되돌릴 수 없으며, 다른 곳에 저장해 둔 .wlz 백업은 지울 수 없습니다. 강요 대응 비밀번호의 저장 형식에는 키를 담을 자리가 없으므로, 이 비밀번호로 어떤 데이터에도 접근할 수 없습니다.

앱은 비밀번호를 반복해서 틀릴 때 입력 속도도 늦춥니다. 다만 이것은 앱 안에서 하는 시도만 제한한다는 점에 유의하세요. 9장을 참고하세요.

6. 백업과 클라우드 동기화

6.1 백업 파일

  • 백업 파일(.wlz)은 금고 비밀번호로 보호되지만, 백업마다 고유한 무작위 키를 따로 사용합니다.
  • 파일 개수, 크기 같은 세부 정보는 암호화된 내용 안에 들어 있어, 백업 파일 바깥에서는 볼 수 없습니다.
  • 숨김 공간의 데이터는 암호화된 상태 그대로 백업에 들어갑니다. 백업을 만들 때도 복원할 때도 숨김 공간은 열리지 않으며, 복원한 뒤에도 숨김 공간 비밀번호가 필요합니다.
  • 복원하기 전에 백업을 철저히 검사합니다. 예상과 다른 부분이 있으면, 불완전한 데이터로 금고를 덮어쓰지 않고 복원을 멈춥니다.

6.2 클라우드 동기화 및 백업

클라우드 동기화 및 백업은 실버 멤버십의 선택 기능으로, 이용자 본인의 Google 드라이브를 통해 여러 휴대폰에서 같은 금고를 쓸 수 있게 해 줍니다. 켜기 전에는 동작하지 않습니다.

  • 본인의 드라이브로 바로. 휴대폰은 Google 드라이브와 직접 통신하며, 앱 전용으로 마련된 보이지 않는 폴더만 사용합니다. 저희 서버를 거치는 데이터는 없으며, 앱은 드라이브의 다른 파일을 볼 수 없습니다.
  • 새 비밀번호가 필요 없습니다. 동기화 키는 이미 있는 마스터 키와 숨김 마스터 키에서 각각 별도의 HKDF 용도로 만들어집니다. 동기화 키로 마스터 키나 다른 키를 거꾸로 알아낼 수는 없습니다. 새 휴대폰은 Google 로그인과 금고 비밀번호만으로 참여할 수 있습니다.
  • 올라가는 것은 암호문뿐입니다. 사진과 동영상은 휴대폰에서 이미 암호화된 그대로, 파일에 대해 아무것도 드러내지 않는 이름으로 올라갑니다. 파일 목록, 태그, 필터, 설정의 변경은 AES-256-GCM으로 봉인한 변경 기록으로 전달됩니다. 키 파일도 비밀번호로 보호된 상태 그대로 올라갑니다. 사진과 동영상을 제외한 모든 업로드 객체에는 마스터 키에서 파생한 키로 만든 MAC이 붙고, 클라우드의 이름과 묶입니다.
  • 변조는 감지되지만 동기화를 멈추지는 않습니다. 각 변경 기록에는 해당 휴대폰의 순번과, 같은 휴대폰의 직전 기록에 대한 MAC이 들어 있어 하나의 사슬을 이룹니다. 검증을 통과하지 못한 객체(바뀌었거나, 위조되었거나, 이름이 바뀐 것)는 건너뛰며, 휴대폰의 데이터를 바꾸는 데 절대 쓰지 않습니다. 영향을 받는 것은 그 객체나 사슬의 그 부분뿐이고, 다른 휴대폰과 다른 기록은 계속 동기화됩니다. 사슬에 빈틈이 생기면 24시간을 기다린 뒤, 그 부분만 멈추고 다른 휴대폰의 최근 스냅숏으로 채웁니다. 자신의 기록이 사라진 것을 알아챈 휴대폰은 새 사슬을 시작해 자기가 쓴 내용을 다시 게시하고 새 스냅숏을 올립니다. 키 파일, 금고 표시, 빠지거나 손상된 사진과 동영상도 올바른 데이터를 가진 휴대폰이 같은 방식으로 되돌려 놓습니다. 클라우드에서 무언가가 빠져도 휴대폰에서 삭제로 이어지지는 않습니다. 내려받은 파일은 금고에 넣기 전에 하나하나 SHA-256으로 대조합니다.
  • 숨김 공간은 계속 분리됩니다. 숨김 공간의 변경 기록은 숨김 마스터 키에서 만든 키로 봉인되고, 같은 고정 크기로 채워지며, 일반 공간의 기록과 같은 순번 체계를 씁니다. 휴대폰은 숨김 공간이 열려 있을 때만 이 기록을 적용하며, 그전까지는 암호화된 채로 기다립니다.
  • 비밀번호 변경. 금고 비밀번호를 바꾸면 다시 감싼 키 파일만 올라가고 키 자체는 바뀌지 않습니다. 1장과 같은 한계가 있습니다. 이전 키 파일은 과거 시점으로 되돌릴 수 있도록 클라우드에 30일 동안 남지만, 적용되는 비밀번호는 언제나 가장 최근의 것입니다.
  • 삭제와 강요 대응 비밀번호. 완전히 삭제한 파일과 변경 기록은 30일 동안 되살릴 수 있습니다. 강요 대응 비밀번호는 해당 휴대폰의 금고와 동기화 연결만 지우며, 클라우드 데이터는 삭제하지 않습니다.

클라우드가 볼 수 있는 것: Google이나 이용자의 Google 계정에 들어온 사람은 암호화된 객체의 개수, 크기, 변경 시점을 볼 수 있고, 숨김 공간을 쓰고 있는지 추측할 수도 있습니다. 하지만 내용, 파일 이름, 태그, 필터는 읽을 수 없으며 어떤 키도 갖고 있지 않습니다. 유일한 예외는 클라우드 금고마다 붙인 이름입니다. 이 이름은 암호화되지 않으므로 개인적인 내용은 넣지 마세요.

알려진 한계:

  • 사슬은 빠지거나 바뀐 기록을 감지하지만, 클라우드가 데이터를 내주도록 강제할 수는 없습니다. 클라우드가 새 기록을 내주지 않으면 동기화가 늦어지며, 저희는 다른 휴대폰이 보는 빈틈으로 간접적으로만 알아챕니다.
  • 권한이 있는 사람은 클라우드 사본 전체를 삭제할 수 있고, 저희는 이를 막을 수 없습니다. 각 휴대폰의 데이터는 그대로 남고, 다음 동기화 때 클라우드에 다시 올라갑니다.
  • 어떤 휴대폰의 변경을 다른 휴대폰이 받기 전에 그 휴대폰을 잃어버리고, 그 변경의 클라우드 사본까지 삭제되면 그 변경은 되찾을 수 없습니다.
  • 기기 목록에서 휴대폰을 제거하면 다른 휴대폰들은 그 휴대폰의 이후 변경을 거부하지만, 그 휴대폰이 이미 내려받은 내용은 되돌릴 수 없습니다. 이후의 접근을 막으려면 Google 계정에서 그 휴대폰을 로그아웃하세요. 저희는 마스터 키를 교체하지 않습니다. 금고 비밀번호를 바꾸면 예전 비밀번호로는 최신 키 파일을 열 수 없게 되지만, 그 휴대폰이 이미 가진 키를 무효로 만들지는 못합니다.

7. 앱을 사용하는 동안의 보호

  • 복호화된 사진과 썸네일은 메모리에만 존재하며 임시 파일로 저장되는 일이 없습니다.
  • 동영상은 휴대폰 안에서만 접근할 수 있는 연결을 통해 재생되며, 주소에는 무작위로 만든 추측할 수 없는 접근 코드가 들어 있습니다.
  • 스크린샷과 화면 녹화는 기본으로 차단됩니다. 차단을 끄려면 금고 비밀번호가 필요합니다.
  • 잠금, 백그라운드에서의 자동 잠금, 로그아웃을 하면 사용 중인 키를 즉시 지우고 무효로 만듭니다.
  • 앱은 Android 시스템 백업에서 제외되며, 다른 앱에는 아무것도 노출하지 않습니다.
  • 선택 사항인 사용 분석은 기본으로 꺼져 있습니다. 켜더라도 어떤 기능을 썼는지만 기록하며, 파일 이름, 태그, 콘텐츠, 키는 기록하지 않습니다.
  • 원본 파일은 이용자가 복호화하기로 선택했을 때만 휴대폰 저장 공간에 기록됩니다.

8. Wiser Locker가 막아 주는 상황

상황 결과
휴대폰을 잃어버렸거나 도난당했고, 습득한 사람이 비밀번호를 모릅니다 암호화된 데이터만 보입니다
누군가 금고 폴더나 백업 파일을 복사합니다 비밀번호가 없으면 잠긴 상태로 남고, 추측 한 번마다 큰 비용이 듭니다
강요 때문에 금고 비밀번호를 알려 주게 됩니다 숨김 공간은 잠긴 채로 남습니다
강요 때문에 지문을 대게 됩니다 일반 공간만 열립니다
강요 때문에 비밀번호를 입력하게 됩니다 강요 대응 비밀번호를 입력해 휴대폰의 금고를 지울 수 있습니다
누군가 암호화된 파일, 기록, 백업을 변조합니다 변경이 감지되어 거부됩니다
다른 앱이 콘텐츠를 읽으려 합니다 접근할 수 없습니다
누군가 이용자의 Google 드라이브에 있는 클라우드 사본에 접근합니다 알아볼 수 없는 이름의 암호화된 데이터와 클라우드 금고에 붙인 이름만 보입니다
클라우드가 동기화 기록이나 키 파일을 삭제, 변조, 위조, 순서 변경, 재전송합니다 검증을 통과하지 못한 부분만 건너뛰고 나머지는 계속 동기화됩니다. 데이터를 가진 휴대폰이 자동으로 되돌려 놓으며, 휴대폰의 데이터에는 영향이 없습니다

9. Wiser Locker가 막을 수 없는 상황

다음 한계를 꼭 알아 두세요.

  • 약한 비밀번호는 오프라인에서 추측당할 수 있습니다. 금고는 휴대폰의 공유 저장 공간에 있습니다. 폴더 전체를 손에 넣은 사람은 컴퓨터로 복사한 뒤, 앱의 재시도 지연과 무관하게 횟수 제한 없이 비밀번호를 추측할 수 있습니다. 한 번 추측하는 데 시간이 걸리긴 하지만, 6자리 숫자 같은 짧은 비밀번호는 여전히 찾아낼 수 있습니다. 금고와 숨김 공간 모두 긴 비밀번호를 사용하세요. 클라우드 동기화를 켜 둔 동안에는 이용자의 Google 계정에 들어온 사람도 마찬가지입니다.
  • 침해된 휴대폰. 휴대폰이 루팅되었거나 악성 소프트웨어에 감염되었다면, 잠금이 풀려 있는 동안 공격자가 화면이나 메모리를 읽을 수 있습니다.
  • 화면을 지켜보거나 촬영하는 사람. 스크린샷을 막아도 다른 카메라까지 막을 수는 없습니다.
  • 잊어버린 비밀번호. 백도어는 없습니다. 금고 비밀번호를 잊으면 데이터를 열 수 없습니다. 숨김 공간 비밀번호를 잊은 경우에는 복구 키로 항목의 숨김을 해제하거나 삭제할 수만 있습니다.
  • 비밀번호를 바꾸기 전에 만든 복사본. 1장을 참고하세요.
  • 이미 다른 곳에 복사된 백업. 강요 대응 비밀번호는 휴대폰에 있는 금고만 지웁니다. 다른 곳에 저장된 .wlz 백업은 지울 수 없습니다. Google 드라이브에 있는 클라우드 동기화 데이터도 지울 수 없습니다.
  • 숨김 공간이 있다는 사실. 4장을 참고하세요.
  • 클라우드가 볼 수 있는 정보와 내주지 않는 데이터. 6장을 참고하세요.
  • 제거한 휴대폰. 이미 내려받은 내용은 그 휴대폰에 남습니다. 6장을 참고하세요.

10. 저희가 일부러 하지 않는 일

  • 금고 비밀번호나 어떤 키도 받거나 보관하지 않습니다. 저희 서버에는 금고 비밀번호, 마스터 키, 복구 키의 사본이 없으므로, 이용자의 데이터를 볼 수도, 비밀번호를 대신 복구해 드릴 수도 없습니다. 클라우드 동기화를 켜면 암호화된 금고가 저희 서버를 거치지 않고 휴대폰에서 이용자 본인의 Google 드라이브로 바로 저장되며, 이 경우에도 이를 여는 금고 비밀번호나 키는 저희가 받지 않습니다.
  • 금고를 휴대폰 한 대에 묶어 두지 않습니다. 앱을 다시 설치하거나 새 휴대폰으로 옮길 때 필요한 것은 비밀번호와 금고 폴더(또는 백업)뿐입니다. 그 대신 9장에서 설명한 오프라인 추측 위험이 따릅니다.
  • 저희만의 암호화 알고리즘을 만들지 않습니다.

11. 기술 사양

자세한 내용이 궁금한 분을 위한 표입니다.

용도 사용하는 표준
비밀번호에서 키 만들기 Argon2id: 메모리 64 MiB, 반복 3회, 병렬 처리 2, 매번 무작위 16바이트 솔트
하위 키 만들기 HKDF-SHA256, 용도, 공간, 금고별로 분리
키 감싸기 AES-256-GCM
사진 및 동영상 콘텐츠 AES-256-GCM 또는 XChaCha20-Poly1305 (설정에서 선택), 1 MiB 단위 인증 암호화
데이터베이스 SQLCipher
기록의 변조 감지 HMAC-SHA256
난수 운영체제의 암호학적으로 안전한 난수 생성기
키 길이 모든 마스터 키, 파일 키, 복구 키는 256비트
클라우드 동기화 키 HKDF-SHA256, 마스터 키 또는 숨김 마스터 키에서 용도별로 분리해 생성
클라우드 변경 기록 AES-256-GCM, 고정 크기로 채움, HMAC-SHA256 사슬로 연결

Argon2id 매개변수는 형식에 고정되어 있으며, 읽을 때 다르면 거부합니다. 따라서 파일을 고쳐서 계산 부담을 줄일 수는 없습니다.