Wiser Locker는 데이터를 이렇게 보호합니다
공개일: 2026년 9월 24일
최종 업데이트: 2026년 10월 12일
이 보안 백서는 Wiser Locker가 사진을 어떻게 지키는지 정확히 알고 싶은 모든 분을 위한 문서입니다. 설계를 공개하는 이유는, 좋은 암호화는 설계를 숨기는 데 기대지 않고 이용자가 가진 비밀번호에만 기대기 때문입니다.
- 비밀번호는 휴대폰 안에서만 쓰이며 저희에게 전송되지 않습니다. 이용자 대신 금고를 열 수 있는 백도어나 마스터 키는 없습니다. 선택 기능인 클라우드 동기화도 암호화된 데이터만 이용자 본인의 Google 드라이브에 올립니다.
- 파일마다 고유한 무작위 키가 있습니다. 파일 목록, 태그, 썸네일도 암호화됩니다.
- 숨김 공간에는 독립된 자체 키가 있습니다. 열려면 금고 비밀번호와 숨김 공간 비밀번호가 둘 다 필요합니다.
- 모든 암호화는 공개되어 있고 오랫동안 검증된 표준 알고리즘을 사용합니다.
- 결국 보호 수준은 비밀번호에 달려 있습니다. 다른 곳에서 쓰지 않는 긴 비밀번호를 사용하세요.
1. 비밀번호가 키가 되는 과정
Wiser Locker는 비밀번호로 파일을 직접 암호화하지 않습니다. 대신 위에서 아래로 이어지는 키 체인을 사용합니다.
- 이용자의 금고 비밀번호를 일부러 느리고 메모리를 많이 쓰는 계산에 통과시켜 잠금 해제 키로 바꿉니다.
- 잠금 해제 키가 하는 일은 하나, 마스터 키를 여는 것입니다. 마스터 키는 금고를 만들 때 생성되는 무작위 256비트 키이며, 비밀번호와는 아무 관련이 없습니다.
- 마스터 키에서 세 가지 용도별 키가 만들어집니다. 데이터베이스용, 파일 키 보관용, 변조 감지용입니다. 각 키는 한 가지 용도로만 쓰이므로, 하나가 유출되어도 마스터 키는 드러나지 않습니다.
- 파일마다 고유한 파일 키가 있으며, 그림 1의 파일 키 보관 키로 암호화되어 저장됩니다.
이 구조 덕분에 비밀번호를 바꿀 때는 마스터 키를 다시 감싸기만 하면 됩니다. 몇 초면 끝나고, 사진을 다시 암호화할 필요가 없습니다.
대신 감수해야 할 점이 있습니다. 비밀번호를 바꿔도 마스터 키 자체는 바뀌지 않습니다. 비밀번호를 바꾸기 전에 누군가 금고 전체를 복사해 두었고 이전 비밀번호도 알고 있다면, 비밀번호를 바꿔도 그 복사본은 막을 수 없습니다.
2. 파일 하나하나를 잠그는 방법
- 파일을 추가하면 그 파일만의 무작위 파일 키가 생깁니다. 원본과 썸네일은 이 키에서 각각 별도의 키를 만들어 씁니다.
- 파일은 1 MiB 단위로 나누어 암호화합니다. 각 조각에는 인증 태그가 붙고, 어느 파일의 몇 번째 조각이며 길이가 얼마인지가 함께 기록됩니다. 중간이 잘리거나, 순서가 바뀌거나, 다른 파일의 데이터가 섞이면 감지되어 거부됩니다.
- 파일 키는 해당 파일과 공간에 묶여 있습니다. 다른 파일이나 다른 공간으로 옮기면 풀 수 없습니다.
- 파일을 일반 공간과 숨김 공간 사이에서 옮길 때는 파일 키만 다시 감쌉니다. 사진이나 동영상 자체가 저장 공간에 복호화되는 일은 없습니다.
3. 파일 목록과 태그
- 파일 이름, 태그, 필터, 날짜, 위치, 통계는 모두 암호화된 데이터베이스에 저장됩니다.
- 데이터베이스 키는 마스터 키에서 만들어지므로, 따로 추측할 비밀번호가 없습니다.
- 모든 파일 기록에는 인증 코드도 붙어 있어, 키 없이는 기록을 바꿀 수 없습니다.
4. 숨김 공간의 이중 잠금
숨김 공간에는 자체 숨김 마스터 키가 있습니다. 이 키 역시 무작위로 만들어지며 일반 공간의 마스터 키와는 전혀 관련이 없습니다. 이 키를 꺼내려면 두 가지가 동시에 필요합니다.
- 일반 공간이 잠금 해제된 상태, 즉 금고 비밀번호나 생체 인증으로 로그인한 상태
- 올바른 숨김 공간 비밀번호
이 둘이 함께 있어야만 숨김 마스터 키를 여는 키가 만들어집니다. 그래서 다음과 같습니다.
- 숨김 공간 비밀번호만 알아서는 열 수 없습니다.
- 금고 비밀번호만 알아도 열 수 없습니다. 강요에 못 이겨 알려 준 경우도 마찬가지입니다.
- 생체 인증은 일반 공간 로그인에만 쓰이며 숨김 공간을 열 수 없습니다.
복구 키는 숨김 공간을 설정할 때 만들어지는 무작위 코드로, 숨김 공간 비밀번호를 잊었을 때 데이터를 처리하기 위한 것입니다. 복구 키 역시 일반 공간이 잠금 해제된 동안에만 작동합니다. 앱에서는 복구 키로 연 숨김 공간이 정리만 가능합니다. 항목의 숨김을 해제하거나 삭제할 수는 있지만 사진이나 동영상을 볼 수는 없습니다. 하지만 암호학적으로는 숨김 공간 비밀번호와 똑같이 숨김 마스터 키를 열 수 있으므로, 똑같이 안전하게 보관해야 합니다.
숨김 공간이 있다는 사실 자체를 아무도 알 수 없다고 주장하지는 않습니다. 휴대폰의 파일을 살펴볼 수 있는 사람은 숨김 공간을 설정해 두었다는 사실과, 대략 몇 개의 파일이 얼마나 큰 크기로 들어 있는지를 알아낼 수도 있습니다. 저희가 지키는 것은 콘텐츠입니다.
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 매개변수는 형식에 고정되어 있으며, 읽을 때 다르면 거부합니다. 따라서 파일을 고쳐서 계산 부담을 줄일 수는 없습니다.

