개인정보 보호와 암호화
이런 단어들은 앱 소개 글에서 대개 느슨하게 쓰이는데, 정작 진짜 가치는 그 차이에 있습니다. 숨긴 것은 잠근 것이 아닙니다. 잠근 것은 암호화한 것이 아닙니다. 그리고 다른 누군가가 쥐고 있는 키는 사실 내 키가 아닙니다.
-
ChaCha20-Poly1305
-
데이터를 숨기는 동시에 변조 여부까지 감지하는 최신 암호화 알고리즘입니다. 예전 방식에 쓰이는 하드웨어 가속을 항상 갖추고 있지는 않은 휴대폰에서 특히 빠릅니다.
ChaCha20이 암호화를 담당하고, Poly1305는 데이터가 변경되지 않았음을 검증하는 태그를 만듭니다. 이 둘을 합쳐 인증된 암호화라고 부릅니다 — 변조된 파일을 복호화하려 하면 그럴듯한 쓰레기값이 나오는 게 아니라 명확하게 실패합니다.
TLS와 최신 보안 메시징에서 쓰이는 것과 같은 방식입니다. AES 가속 기능이 없는 하드웨어에서는 AES보다 눈에 띄게 빠르기 때문에, 휴대폰에서는 이쪽을 선호하는 경향이 있습니다.
함께 보기: 저장 시 암호화 vs 전송 중 암호화키 래핑
-
키 래핑
봉투 암호화 -
파일을 키 하나로 암호화한 다음, 그 키를 잠금 해제 수단마다 각각 별도로 암호화해 두는 방식입니다. 암호를 바꿀 때 모든 걸 다시 암호화하는 대신 이 작은 키만 다시 래핑하면 됩니다.
파일은 기기에서 생성된 키 하나로 단 한 번 암호화됩니다. 그 키는 다시 암호로 래핑(암호화)되고, 복구 코드로 또 한 번 래핑됩니다. 봉투가 두 개고, 각 봉투 안에 같은 키가 하나씩 들어 있는 셈입니다.
그 결과는 모두 실용적입니다. 암호를 바꾸면 수백 기가바이트가 아니라 수백 바이트만 다시 씁니다. 생체 인증 잠금 해제는 별도의 보안 체계가 아니라 그저 또 하나의 래핑된 사본일 뿐입니다. 그리고 모든 봉투를 다 잃어버리면 키도 함께 사라집니다 — 그 키는 다른 어디에도 존재하지 않기 때문입니다.
함께 보기: 복구 코드ChaCha20-Poly1305
-
복구 코드
-
암호를 잊었을 때 마스터 키를 풀어낼 수 있는 일회성 문자열입니다. 그 누구도 이걸 재발급할 수 없습니다 — 앱을 만든 사람을 포함해서 그 누구도 애초에 이걸 가진 적이 없기 때문입니다.
설정할 때 딱 한 번 보여주며, 이건 두 개의 문 중 두 번째 문입니다. 이 코드를 적어서 기기가 아닌 다른 곳에 보관해 두면, 암호를 잊어버려도 그저 조금 불편한 정도로 끝납니다.
암호를 잊고 복구 코드까지 잃어버리면, 그 어떤 사람도 파일을 복호화할 수 없습니다. 이건 논쟁의 여지가 있는 고객지원 정책이 아니라, 키의 사본이 아예 존재하지 않는다는 사실 그 자체입니다. 파일만큼이나 소중하게 보관하세요.
-
미끼 금고
그럴듯한 부인 가능성 -
완전히 다른, 무해해 보이는 금고를 여는 두 번째 암호입니다. 누군가가 강제로 앱을 열게 만들더라도, 그렇게 열리는 건 그 사람이 찾던 게 아닙니다.
두 암호는 둘 다 진짜이고, 둘 다 실제 금고를 엽니다. 화면 어디에도 또 다른 금고가 존재한다는 흔적은 없으며, 지금 보여주고 있는 게 어느 쪽인지는 앱 자체도 물어볼 방법이 없습니다.
이건 잠금 해제를 거부하는 게 선택지가 아닌 상황 — 국경 검문, 강요, 누군가 옆에 서서 감시하는 상황 — 을 위해 존재합니다. 이럴 때는 암호화만으로는 소용이 없습니다. 문제는 키 자체가 아니라, 그 키를 쓰도록 강요받는다는 사실이기 때문입니다.
-
Keychain
-
기기의 보안 하드웨어가 뒷받침하는, 작은 비밀 정보를 위한 시스템의 보호된 저장 공간입니다. 키와 토큰이 있어야 할 자리이며, 크기가 큰 것은 여기 들어갈 수 없습니다.
여기 저장된 항목에는 조건을 걸 수 있습니다 — 기기가 잠금 해제된 상태에서만, 오직 이 기기에서만, 생체 인증이나 암호 확인을 거친 뒤에만 읽을 수 있다는 식으로요. 이 조건들은 앱이 알아서 지키는 게 아니라 하드웨어 차원에서 강제됩니다.
여기엔 데이터가 아니라 비밀 정보가 저장됩니다. 키, 토큰, 래핑된 자료가 여기 들어가고, 정작 암호화된 파일 자체는 용량이 문제 되지 않는 디스크에 남습니다.
함께 보기: 키 래핑저장 시 암호화 vs 전송 중 암호화
-
저장 시 암호화 vs 전송 중 암호화
-
저장 시 암호화되어 있다는 건 디스크에서 읽을 수 없다는 뜻입니다. 전송 중 암호화되어 있다는 건 네트워크상에서 읽을 수 없다는 뜻입니다. 이 둘은 서로 별개의 보호 장치라서, 제품이 정직하게 한쪽만 갖추고 다른 쪽은 갖추지 않을 수도 있습니다.
HTTPS는 전송 중 암호화입니다 — 네트워크를 들여다보는 그 누구로부터도 안전하지만, 일단 도착하고 나면 반대편 서버에서는 완전히 그대로 읽을 수 있습니다. 저장 시 암호화는 저장된 사본 자체에 관한 것으로, 기기를 분실하거나 디스크를 통째로 복제당했을 때 의미가 있습니다.
개인정보 보호 관련 문구를 꼼꼼히 읽는다는 건 대개 이 둘 중 어느 쪽을 말하는지 가려내는 일입니다. "귀하의 데이터는 암호화되어 있습니다"라는 문장에 "저장 시"나 "전송 중" 어느 쪽도 붙어 있지 않다면, 그건 일부러 말하지 않기로 고른 문장입니다.
함께 보기: ChaCha20-Poly1305제로 지식
-
제로 지식
-
운영사조차 저장된 내용을 읽을 수 없도록 만든 설계입니다 — 키가 사용자의 기기 밖으로 나가는 일이 절대 없기 때문입니다. 확인하는 방법은 간단합니다. 그쪽에서 비밀번호를 재설정해 주고도 여전히 내 데이터를 돌려줄 수 있는가?
모든 걸 다 잊어버린 뒤에도 서비스가 접근 권한을 복구해 줄 수 있다면, 그건 곧 그 서비스가 데이터를 풀 수 있는 무언가를 쥐고 있다는 뜻입니다 — 그 말은 그 서비스가 강요당해 그 힘을 쓸 수도 있고, 그 서비스가 침해당하면 침입자도 똑같은 힘을 물려받는다는 뜻이기도 합니다.
이 트레이드오프는 실재하며, 순수한 장점인 것처럼 포장하기보다는 명확히 밝혀야 합니다. 진짜 제로 지식이라면 마지막 키를 잃어버렸을 때 정말로 접근 권한을 영영 잃는다는 뜻입니다. 운영사만 나를 구해줄 수 있고 다른 누구도 구해줄 수 없는 세 번째 선택지 같은 건 없습니다.
함께 보기: 복구 코드저장 시 암호화 vs 전송 중 암호화
-
생체 인증
Face ID, Touch ID -
본인 확인을 하는 건 앱이 아니라 기기이고, 앱은 그저 예·아니오만 전달받습니다. 지문이나 얼굴 데이터는 앱에 절대 도달하지 않으며, 그 어느 것도 비밀번호가 아닙니다.
생체 인증 잠금 해제는 비밀 정보를 대체하는 게 아니라, 그 비밀 정보를 감싸는 편의 기능일 뿐입니다. 실제로 보호되는 건 저장된 키이고, 그래서 그 뒤에는 항상 암호가 존재합니다 — 생체 인증은 실패할 수 있고, 그럴 때의 대안은 반드시 사용자가 기억하고 있는 무언가여야 하기 때문입니다.
비교 작업은 전용 하드웨어 내부에서만 이뤄지고, 그 템플릿은 절대 그 하드웨어 밖으로 나가지 않습니다. Face ID를 지원하는 앱은 무언가를 수집하는 게 아니라 시스템에 질문 하나를 던지고 있는 것뿐입니다.
-
익명 분석
-
누가 그 일을 했는지는 기록하지 않고 이벤트 발생 횟수만 세는 것입니다. 이 주장이 실제로 얼마나 가치 있는지는 전적으로 각 이벤트에 무엇이 함께 딸려 가는지에 달려 있습니다 — 파일 이름, 경로, URL이야말로 이런 약속이 보통 깨지는 지점입니다.
화면이 열렸다는 사실을 아는 건 단순 집계입니다. 어떤 파일이 재생됐는지를 아는 건 한 사람에 대한 묘사입니다. 이 둘을 가르는 건 "익명"이라는 단어가 아니라, 그 이벤트가 어떤 항목을 함께 담고 있느냐입니다.
믿을 만한 주장이라면 보내는 것만큼이나 *보내지 않는* 것도 구체적으로 밝힙니다 — 파일 이름 없음, 경로 없음, URL 없음, 자격 증명 없음, 세션을 넘나들며 유지되는 식별자 없음 — 그리고 이 기능 전체를 끌 수 있는 방법도 제공합니다.
함께 보기: 저장 시 암호화 vs 전송 중 암호화