테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

개인정보 보호 기술

데이터에서 이름만 지우면 익명이 될까. 준식별자를 이어 붙이는 재식별부터 k-익명성·l-다양성·t-근접성, 노이즈로 수학적 보장을 주는 차분 프라이버시, 암호문 그대로 계산하는 동형 암호와 다자간 계산, 연합 학습과 합성 데이터, 그리고 설계·로그·보존 기한 같은 실무 원칙까지를 작은 예로 계산해 본다.

목차 (14)
  1. 개인정보, 민감정보, 식별자와 준식별자
  2. 가명화와 익명화
  3. 재식별 위험: 준식별자의 결합
  4. k-익명성: 일반화와 억제
  5. l-다양성과 t-근접성
  6. 차분 프라이버시
  7. 동형 암호
  8. 안전한 다자간 계산과 연합 학습
  9. 합성 데이터
  10. 데이터 최소화, 보존 기한, 목적 제한
  11. 개인정보 보호 중심 설계(Privacy by Design)
  12. 로그와 분석 도구에서 새는 개인정보
  13. 흔한 오해
  14. 핵심 자료

이 노트는 개인정보를 다루는 기술을 설명한다. 한국 개인정보 보호법의 조문은 2026년 10월에 국가법령정보센터에서 연 판(2026년 9월 11일 시행)을 기준으로 인용하고, GDPR은 비교를 위해서만 짚는다. 법률 조언이 아니다. 실제 처리가 법에 맞는지는 개인정보보호위원회의 안내와 전문가 검토로 확인한다. 표의 사람·우편번호·전화번호는 모두 지어낸 값이다. 암호 기법의 수학은 암호학 노트, 머신러닝 쪽 이야기는 머신러닝 노트에 있다.

개인정보, 민감정보, 식별자와 준식별자

개인정보 보호법은 개인정보를 살아 있는 개인에 관한 정보로서 성명·주민등록번호·영상처럼 개인을 알아볼 수 있는 정보, 그리고 그것만으로는 알아볼 수 없어도 다른 정보와 쉽게 결합하여 알아볼 수 있는 정보라고 정의한다(제2조 제1호). 쉽게 결합할 수 있는지는 다른 정보를 구할 가능성, 알아보는 데 드는 시간·비용·기술을 합리적으로 고려해 정한다. 또 사상·신념, 노동조합·정당의 가입·탈퇴, 정치적 견해, 건강, 성생활 등에 관한 정보는 민감정보로 따로 묶어, 별도 동의나 법령의 근거가 없으면 처리하지 못하게 한다(제23조).

기술 쪽에서는 열을 세 갈래로 본다. 그것만으로 사람을 가리키는 식별자(이름, 전화번호), 혼자서는 여러 사람에게 해당하지만 몇 개를 합치면 한 사람으로 좁혀지는 준식별자(우편번호, 생년월일, 성별), 그리고 보호하려는 대상인 민감 속성(진단, 소득)이다. 이 노트의 거의 모든 기법은 준식별자를 어떻게 다루느냐의 이야기다.

개인정보의 세 갈래: 식별자(이름, 주민등록번호, 전화번호, 이메일), 준식별자(우편번호, 생년월일, 성별, 기기 ID), 민감정보(건강, 사상, 노동조합, 정치적 견해)식별자그것만으로 한 사람을 가리킨다이름주민등록번호전화번호이메일 주소준식별자몇 개를 합치면 한 사람으로 좁혀진다우편번호 · 동네생년월일 · 나이성별 · 직업기기 · 광고 ID민감정보드러나면 피해가 큰 속성(법 제23조)건강 · 성생활사상 · 신념노동조합 · 정당정치적 견해이름을 지워도 준식별자가 남으면 다른 표와 이어 붙여 사람을 다시 찾을 수 있다. 위험은 대개 가운데 칸에서 생긴다.
개인정보의 갈래. 식별자는 지우거나 바꾸기 쉽지만, 준식별자는 분석에 쓸모가 있어 남기는 경우가 많고 바로 거기서 재식별이 일어난다.

가명화와 익명화

가명처리는 개인정보의 일부를 삭제하거나 일부 또는 전부를 대체해 추가 정보 없이는 특정 개인을 알아볼 수 없게 하는 것이고, 그 결과가 가명정보다(제2조 제1호의2, 제1호 다목). 이름을 일련번호로 바꾸고 대응표를 따로 잠가 두는 것이 전형적인 예다. 가명정보는 여전히 개인정보다. 대응표(추가 정보)와 합치면 되돌아오기 때문이다. 대신 통계 작성, 과학적 연구, 공익적 기록 보존 등을 위해서는 정보 주체의 동의 없이 처리할 수 있고(제28조의2), 처리하는 사람은 특정 개인을 알아보려는 목적으로 쓰면 안 되며, 처리 중에 개인을 알아볼 수 있는 정보가 생기면 즉시 멈추고 회수·파기해야 한다(제28조의5).

익명정보는 시간·비용·기술 등을 합리적으로 고려할 때 다른 정보를 써도 더는 개인을 알아볼 수 없는 정보이고, 법은 이런 정보에 적용되지 않는다(제58조의2). 법은 원칙으로 익명처리로 목적을 이룰 수 있으면 익명으로, 그렇지 않으면 가명으로 처리하라고 정한다(제3조 제7항). GDPR도 구조가 같다. 전문 26은 추가 정보로 사람과 이을 수 있는 가명 처리 정보를 식별 가능한 사람에 관한 정보로 보고, 익명 정보에는 데이터 보호 원칙을 적용하지 않는다고 적는다.

개인정보, 가명정보, 익명정보의 띠. 가명정보는 추가 정보와 합치면 되돌릴 수 있어 여전히 개인정보이고, 익명정보만 법 적용에서 빠진다. GDPR도 같은 구분을 둔다사람을 알아보기 쉬움어떤 수단으로도 알아볼 수 없음개인정보법 제2조 제1호 가·나목알아볼 수 있거나,쉽게 결합해 알아봄법 전체 적용가명정보제1호 다목 · 제28조의2추가 정보 없이는알아볼 수 없음통계·연구 등에동의 없이 처리 가능익명정보제58조의2다른 정보를 써도더는 알아볼 수 없음법 적용 제외GDPR(전문 26)도 같다: 가명 처리 정보는 개인정보이고, 익명 정보에는 원칙을 적용하지 않는다.어느 칸인지는 처리 방법이 아니라 재식별 가능성(시간·비용·기술 고려)으로 정해진다.
개인정보에서 익명정보까지의 띠. 어느 칸에 있는지는 '무엇을 했는가'가 아니라 '되돌릴 수 있는가'로 정해진다. 해시나 일련번호로 바꾼 것만으로는 대개 가운데 칸이다.

재식별 위험: 준식별자의 결합

이름을 지운 표가 위험한 이유는 다른 표가 있기 때문이다. 같은 준식별자를 가진 공개 명부(선거인 명부, 회원 목록, SNS 프로필)와 이어 붙이면 지운 이름이 돌아온다. Sweeney(2000)는 1990년 미국 인구조사 요약 자료로 계산해, 우편번호 5자리·성별·생년월일 셋만으로 미국 인구의 87%(2억 4,800만 명 중 2억 1,600만 명)가 유일할 가능성이 높다고 보고했다. 그는 k-익명성 논문(2002)에서 이름을 지우고 공개된 매사추세츠의 의료 보험 자료(GIC)를 선거인 명부와 이어 당시 주지사의 의료 기록을 찾아낸 사례도 적었다.

이름 없는 의료 표와 이름 있는 명부를 우편번호, 생년월일, 성별로 이으면 두 사람의 진단이 이름과 묶인다. 우편번호가 다른 한 사람은 이어지지 않는다공개된 의료 표(이름 지움)공개 명부(이름 있음)우편번호 · 생년월일 · 성별 · 진단이름 · 우편번호 · 생년월일 · 성별13481 1991-04-02 여위염13487 1985-11-19 남당뇨13452 1979-06-30 여고혈압가나다13487 1985-11-19 남라마바13410 1991-04-02 여사아자13452 1979-06-30 여이어진 2명은 이름과 진단이 다시 묶였다. 지운 것은 이름뿐이었다.한 동네 25,000명, 생일 365일 × 나이 80가지 × 성별 2 = 58,400가지 조합이면고르게 퍼져 있다고 쳐도 한 사람이 동네에서 유일할 확률은 약 65%다.이름·번호·날짜는 모두 지어낸 예다.
연결 공격. 두 표가 공유하는 준식별자 세 개로 이름과 진단이 다시 묶인다. 아래 계산은 사람이 고르게 퍼져 있다고 가정한 대략값으로, 한 동네 25,000명 가운데 한 사람이 유일할 확률이 약 65%다.

열이 많은 데이터는 더 위험하다. Narayanan과 Shmatikov(2006)는 익명으로 공개된 넷플릭스 영화 평점 기록을 IMDb의 공개 평점과 맞춰 사람을 찾아냈다. 구매 기록, 위치 기록, 검색어처럼 한 사람에게 값이 많이 쌓이는 데이터는 몇 개만 알아도 사실상 지문이 된다. 위치 기록이 특히 그렇다는 것은 GIS와 지도 노트의 개인정보 절에 있다.

k-익명성: 일반화와 억제

k-익명성은 공개하는 표의 모든 행이 준식별자로 보면 적어도 k−1개의 다른 행과 같도록 만드는 기준이다. 그러면 공격자가 누군가의 나이·우편번호·성별을 알아도 후보가 k명 아래로 줄지 않는다. 같은 준식별자를 가진 행의 묶음을 동치류라 하고, 가장 작은 동치류의 크기가 그 표의 k다. 값을 넓은 범주로 바꾸는 일반화(23살 → 20대, 13481 → 134**)와 튀는 행을 아예 빼는 억제로 k를 올린다.

아홉 행짜리 장난감 의료 표를 단계별로 일반화한다. 나이를 10살 구간으로, 우편번호를 앞 세 자리로 바꾸고 혼자 남은 한 행을 억제하면 k가 2가 된다나이우편번호성별진단묶음 크기2313481여감기12713487여위염12513452여감기13413493남당뇨13813495남감기13113466남위염14513472여고혈압14913479여당뇨16213421남고혈압1단계 1k = 1동치류 9개l = 120–2913481여감기120–2913487여위염120–2913452여감기130–3913493남당뇨130–3913495남감기130–3913466남위염140–4913472여고혈압140–4913479여당뇨160–6913421남고혈압1단계 2k = 1동치류 9개l = 120–29134**여감기320–29134**여위염320–29134**여감기330–39134**남당뇨330–39134**남감기330–39134**남위염340–49134**여고혈압240–49134**여당뇨260–69134**남고혈압1단계 3k = 1동치류 4개l = 120–29134**여감기320–29134**여위염320–29134**여감기330–39134**남당뇨330–39134**남감기330–39134**남위염340–49134**여고혈압240–49134**여당뇨2***고혈압억제단계 4k = 2동치류 3개l = 2회색 줄 = 혼자인 행데이터는 지어낸 예
1 / 4

원본: 나이·우편번호를 그대로 둔다. 동치류(준식별자가 같은 묶음) 9개, 가장 작은 묶음의 크기 k = 1. 모든 행이 저마다 다른 조합이라 나이·우편번호·성별만 알면 그 사람의 진단을 바로 찾는다.

k-익명성. 공개하는 표의 모든 행이 준식별자로 보면 적어도 k−1명과 구별되지 않게 만든다. 방법은 값을 넓은 범주로 바꾸는 일반화와, 튀는 행을 빼는 억제다.

단계마다 대가가 있다. 일반화할수록 분석에 쓸 정밀도가 줄고, 억제한 행은 정보를 통째로 잃는다. 드문 집단(고령, 희귀 질환)이 가장 먼저 억제되므로, 바로 그 집단을 연구하려는 분석이 망가지기 쉽다. 그래서 실무에서는 k 하나만이 아니라 어떤 열을 얼마나 일반화했는지, 몇 행을 억제했는지를 함께 기록한다.

l-다양성과 t-근접성

k-익명성은 "어느 행인지"는 숨기지만 "무엇인지"는 숨기지 못할 수 있다. 묶음 안의 민감 값이 모두 같으면 묶음만 알아도 값이 드러난다(동질성 공격). 공격자가 배경지식으로 몇 값을 지울 수 있을 때도 마찬가지다. l-다양성은 동치류마다 민감 값이 적어도 l가지(가장 단순한 '구별되는' 정의 기준)이도록 요구한다. 아래 두 표는 둘 다 k = 2이지만, 표 B는 40대 여성 묶음의 진단이 모두 고혈압이라 l = 1이다.

k가 2로 같은 두 표. 표 A는 묶음마다 진단이 두 가지 이상이라 l = 2이고, 표 B는 40대 여성 묶음의 진단이 모두 고혈압이라 l = 1이다. 묶음 분포가 전체 분포와 얼마나 다른지가 t다표 Ak = 2, l = 2, t = 0.6320–29 134** 여감기 · 위염 · 감기2가지30–39 134** 남당뇨 · 감기 · 위염3가지40–49 134** 여고혈압 · 당뇨2가지표 Bk = 2, l = 1, t = 0.7520–29 134** 여감기 · 위염 · 감기2가지30–39 134** 남당뇨 · 감기 · 위염3가지40–49 134** 여고혈압 · 고혈압진단이 드러남l = 묶음 안 진단 종류 수의 최솟값. t = 묶음의 진단 분포와 전체 분포의 거리(총변동 거리) 가운데 최댓값.k만 보면 두 표가 같아 보이지만, 표 B의 40대 여성은 묶음만 알아도 진단까지 알려진다.
k가 같은 두 표의 l과 t. 표 A의 t는 0.63, 표 B는 0.75다. 범주 사이 거리가 모두 같다고 보면 t-근접성의 EMD는 총변동 거리와 같다.

다양하기만 해도 부족할 수 있다. 전체 환자의 1%만 앓는 병이 어떤 묶음에서는 절반이라면, 그 묶음에 속한다는 사실만으로 위험이 크게 오른다. t-근접성은 묶음 안 민감 값의 분포가 전체 분포와 거리 t 이상 다르지 않게 한다. 기준이 강해질수록 표는 더 뭉개진다. 이 계열의 기법은 모두 "공격자가 무엇을 아는가"를 가정해야 하는데, 그 가정이 틀리면 보장도 사라진다는 한계가 있다. 다음 절의 차분 프라이버시는 이 가정을 없애는 쪽으로 나아갔다.

차분 프라이버시

차분 프라이버시(differential privacy)는 데이터가 아니라 질의에 답하는 방법에 거는 약속이다. 한 사람의 기록이 있든 없든(이웃한 두 데이터베이스) 어떤 답이 나올 확률이 최대 eε배까지만 달라지게 한다. 그러면 답을 본 사람은 그 한 사람이 데이터에 있었는지 거의 알 수 없다. ε = 1이면 그 비율이 2.72배, ε = 0.1이면 1.11배다. 공격자의 배경지식을 가정하지 않는다는 것이 앞 절의 기법과 다른 점이다.

가장 기본인 라플라스 메커니즘은 참값에 척도 b = Δf/ε인 라플라스 분포의 노이즈를 더한다. Δf(민감도)는 한 사람이 답을 바꿀 수 있는 최대 크기로, "몇 명인가" 같은 개수 질의는 1이다. ε = 0.1이면 b = 10이고, 노이즈는 95% 확률로 ±30.0 안에 든다. 수천 명 단위의 개수라면 충분히 쓸 만하지만 몇 명짜리 칸이라면 노이즈가 값을 덮는다. 차분 프라이버시가 큰 집계에 잘 맞고 작은 집단에는 비싼 이유다.

라플라스 분포 세 개. ε이 0.5면 척도 2로 넓게, ε이 2면 척도 0.5로 좁게 퍼진다. 오른쪽 표는 노이즈가 95% 확률로 들어오는 폭이다-8-40+4+8더해지는 노이즈εb = 1/ε95% 폭0.52±6.011±3.020.5±1.5작은 ε = 강한 보호,큰 노이즈, 덜 정확한 답
민감도 1인 질의에 더하는 라플라스 노이즈. ε이 작을수록 분포가 넓어 보호는 강하고 답은 부정확하다. ε은 보호와 정확도를 맞바꾸는 손잡이다.

같은 데이터에 질의를 여러 번 하면 노이즈를 평균 내 참값에 다가갈 수 있다. 그래서 차분 프라이버시는 프라이버시 예산으로 운영한다. 같은 데이터에 ε1, ε2를 쓴 답을 함께 공개하면 전체는 (ε1 + ε2)-차분 프라이버시다(순차 합성). 총예산을 정하고, 질의마다 나눠 주고, 다 쓰면 더 답하지 않는다.

총예산 ε 1을 질의 네 개에 나눠 쓰는 막대. 세 질의가 0.5, 0.25, 0.25를 써서 예산을 다 쓰고, 네 번째 질의는 거절된다예산 ε = 1감기 환자 수ε 0.5참값 120공개 121.1남음 0.50당뇨 환자 수ε 0.25참값 48공개 46.3남음 0.25고혈압 환자 수ε 0.25참값 75공개 75.7남음 0.00위염 환자 수ε 0.25참값 60거절: 예산 부족남음 0.00
1 / 4

"감기 환자 수"에 ε = 0.5을 쓴다. 척도 b = 1/0.5 = 2, 참값 120에 노이즈를 더해 121.1을 공개한다(95% 확률로 ±6.0 안). 누적 ε = 0.50, 남은 예산 0.50.

프라이버시 예산. 같은 데이터에 ε₁, ε₂를 쓴 두 질의를 함께 공개하면 전체는 ε₁ + ε₂-차분 프라이버시다(순차 합성). 총예산 ε = 1을 질의에 나눠 주고, 다 쓰면 멈춘다. 노이즈는 정해 둔 난수로 만들어 그림이 재현된다.

노이즈를 서버가 아니라 사용자 기기에서 넣는 방식은 로컬 차분 프라이버시다. 가장 오래된 형태가 무작위 응답이다. 민감한 질문에 동전을 던져 앞면이면 참말을, 뒷면이면 다시 던져 나온 대로 "예/아니요"를 답하게 하면 참말 확률이 3/4이고 ε = ln 3 ≈ 1.10이다. 개인의 답은 믿을 수 없지만 모으면 되돌릴 수 있다. 관측된 "예"가 35%라면 실제 비율은 20%로 추정된다.

가장 큰 실제 사용 예는 미국 인구조사국이다. 인구조사국은 2020년 인구조사 자료를 공개하면서 차분 프라이버시에 기반한 공개 회피 시스템으로 노이즈를 넣었다. 다만 인구조사국의 해당 안내 페이지에는 2026년 10월 현재 "더는 최신이 아니다"라는 표시와 함께, 노이즈 주입을 금지한 상무부 지시에 따라 대안을 검토 중이라는 설명이 붙어 있다(Census Bureau). 정확도와 보호 사이의 선택이 기술만이 아니라 정책의 문제라는 것을 보여 준다. 정의와 정리는 Dwork와 Roth의 교과서에 있다.

동형 암호

앞의 기법들이 데이터를 흐리게 해 공개한다면, 암호 쪽 기법은 데이터를 보이지 않게 한 채 계산한다. 동형 암호는 암호문끼리 연산한 결과를 복호화하면 평문끼리 연산한 결과가 나오는 암호다. 고객은 값을 암호화해 보내고, 서버는 키 없이 암호문으로 계산해 결과의 암호문만 돌려준다. 교과서판 RSA가 곱셈에 대해 이런 성질을 갖는다는 것은 암호학 노트의 RSA 절에서 본 그대로다(그 성질이 바로 패딩 없는 RSA가 위험한 이유이기도 하다).

동형 암호의 흐름. 고객이 값을 암호화해 보내면 서버는 풀지 않고 암호문끼리 연산해 결과의 암호문을 돌려주고, 고객이 비밀 키로 풀어 답을 얻는다고객값 a, b를 암호화Enc(a), Enc(b)서버(클라우드)키 없이 계산Enc(a)⊕Enc(b) = Enc(a+b)고객비밀 키로 풀기Dec(Enc(a+b)) = a+b서버는 a도, b도, a + b도 보지 못한다. 본 것은 무작위처럼 보이는 암호문뿐이다.덧셈만(부분 동형), 곱셈 깊이 제한(준동형), 아무 회로나(완전 동형)로 갈래가 나뉜다.대가는 속도와 크기다. 평문 계산보다 훨씬 느리고 암호문도 훨씬 크다.
동형 암호로 계산을 맡기기. 서버는 입력도 결과도 보지 못한다. 비밀 키는 고객에게만 있다.

한 가지 연산만 되는 부분 동형 암호는 오래전부터 있었고, 덧셈과 곱셈을 임의 횟수로 할 수 있는 완전 동형 암호는 2009년 Gentry가 처음 구성했다. 격자 문제에 기댄다는 점에서 양자내성 암호와 뿌리가 같다. 지금도 평문 계산보다 크게 느리고 암호문이 커서, 집계·통계·간단한 모델 추론처럼 계산이 짧고 데이터가 민감한 곳부터 쓰인다.

안전한 다자간 계산과 연합 학습

안전한 다자간 계산(MPC)은 여러 참여자가 자기 입력을 서로 보이지 않고 함수의 결과만 함께 얻는 방법이다. 가장 쉬운 예가 덧셈 비밀 분산이다. 각자 값을 무작위 조각으로 나눠 한 조각씩 나눠 주면, 조각 하나는 무작위 수와 구별되지 않는다. 각자 받은 조각을 더한 부분합만 공개하고 부분합을 모두 더하면 총합만 드러난다. 회사들이 서로의 고객 명단을 보지 않고 겹치는 수만 세거나, 직원 연봉을 보지 않고 평균만 내는 데 쓸 수 있다.

세 사람이 각자 값을 조각 셋으로 나눠 한 조각씩 나눠 준다. 열마다 받은 조각을 더한 부분합만 공개하고, 부분합을 모두 더하면 세 값의 총합 13,200만 드러난다비밀 값A에게 간 조각B에게 간 조각C에게 간 조각조각의 합A: 4,2008112,2901,099= 4,200B: 3,9001,5309771,393= 3,900C: 5,1002,6041452,351= 5,100공개하는 부분합4,9453,4124,843총합 13,200조각 하나하나는 0 ~ 100,002 사이 무작위 수처럼 보여 원래 값을 알려 주지 않는다(mod 100,003).세 사람이 모두 짜고 조각을 모으지 않는 한, 각자는 총합 말고는 남의 값을 모른다.
세 사람이 서로의 값을 모른 채 총합만 계산한다. 모든 참여자가 짜고 조각을 모으면 깨지므로, 몇 명까지 공모해도 안전한지가 MPC 설계의 핵심 가정이다.

연합 학습은 같은 생각을 머신러닝에 옮긴 것이다. McMahan 외(2016)가 제안한 방식에서 서버는 모델을 기기에 보내고, 기기는 자기 데이터로 학습한 갱신만 돌려보내며, 서버는 갱신을 평균 내 모델을 고친다. 원본 데이터는 기기를 떠나지 않는다. 다만 갱신 자체에서 학습 데이터가 새어 나올 수 있어, 갱신을 서버가 개별로 보지 못하게 하는 보안 집계(MPC)나 갱신에 노이즈를 넣는 차분 프라이버시를 함께 쓴다. 모델 학습의 기본은 머신러닝 노트에 있다.

연합 학습 한 라운드: 서버가 모델을 기기 세 대에 보내고, 기기는 각자 데이터로 학습한 갱신만 서버로 보내며, 서버는 갱신을 평균 내 모델을 고친다. 원본 데이터는 기기 밖으로 나가지 않는다서버: 공유 모델갱신을 평균 내 고친다기기 1데이터는 여기 남음기기 2데이터는 여기 남음기기 3데이터는 여기 남음① 모델 내려보내기② 갱신만 올리기갱신에서도 학습 데이터가 새어 나올 수 있어, 보안 집계나 차분 프라이버시 노이즈를 함께 쓴다.
연합 학습 한 라운드. 오가는 것은 모델과 갱신뿐이다.

합성 데이터

합성 데이터는 원본의 분포와 상관을 배운 생성 모델로 실존하지 않는 행을 만들어 대신 공유하는 방법이다. 개발·테스트 환경, 외부 협업, 교육용 데이터에 특히 쓸모가 있다. 하지만 "가짜니까 안전하다"는 자동으로 성립하지 않는다. 생성 모델이 원본 행을 외워서 거의 그대로 내놓을 수 있고, 드문 사람일수록 그렇다. 그래서 합성 데이터는 쓸모(분포·상관이 맞는가, 합성으로 학습한 모델이 원본에서도 잘 되는가)와 위험(원본 행을 베끼거나 지나치게 가까운 행이 있는가)을 함께 검사하고, 강한 보장이 필요하면 생성 모델을 차분 프라이버시로 학습한다.

합성 데이터 만드는 흐름: 원본 데이터로 생성 모델을 학습하고 합성 행을 만든 뒤, 통계가 원본과 맞는지와 원본 행을 그대로 베끼지 않았는지를 검사한다원본 데이터개인정보 포함생성 모델 학습분포·상관을 배운다합성 행 생성실존하지 않는 행두 가지 검사쓸모와 위험쓸모: 원본과 닮았나열별 분포, 열 사이 상관합성으로 학습한 모델의 성능드문 집단이 살아남았는지위험: 원본이 새지 않나원본 행을 그대로 베낀 행원본과 지나치게 가까운 행드문 사람이 다시 보이는지
합성 데이터 만들기. 쓸모 검사만 통과하고 위험 검사를 건너뛰면 원본을 흐리게 복사한 것과 다르지 않을 수 있다.

데이터 최소화, 보존 기한, 목적 제한

가장 확실한 보호는 갖지 않는 것이다. 개인정보 보호법 제3조는 처리 목적을 명확히 하고 그 목적에 필요한 범위에서 최소한의 개인정보만 수집할 것(제1항), 목적 외의 용도로 활용하지 말 것(제2항)을 원칙으로 둔다. 제21조는 보유 기간이 지나거나 목적을 이루는 등 개인정보가 불필요해지면 지체 없이 파기하고, 복구·재생되지 않게 하며, 다른 법령 때문에 보존해야 하면 다른 개인정보와 분리해 보관하라고 정한다.

개인정보의 수명 다섯 단계: 목적 정하기, 최소 수집, 목적 안에서 이용, 보유 기간, 복구할 수 없는 파기. 다른 법령으로 보존해야 하면 분리해 보관한다목적 정하기제3조 ①왜 모으는지 먼저최소 수집제3조 ①목적에 필요한 것만목적 안 이용제3조 ②다른 용도로 안 씀보유 기간제21조 ①끝나면 지체 없이파기제21조 ②복구·재생 불가다른 법령이 보존을 요구하면다른 개인정보와 분리해 보관(제21조 ③)익명·가명으로도 목적을 이룰 수 있으면익명을 먼저, 안 되면 가명으로(제3조 ⑦).조문은 개인정보 보호법. 백업·로그·분석 도구의 사본도 같은 기한을 따라야 파기가 끝난다.
개인정보의 수명. 목적이 먼저 정해져야 무엇을 모을지와 언제 지울지가 정해진다.
  • 모으기 전에 묻는다. 생년월일 대신 "성인 여부", 주소 대신 "시·군·구"로 충분한지 본다. 쓰지 않는 열은 나중에 새는 열이 된다.
  • 기한을 코드로 둔다. 테이블마다 보존 기한을 메타데이터로 적고, 기한이 지난 행을 지우는 작업을 정기 배치로 돌린다. 백업과 분석 웨어하우스의 사본도 같은 기한을 따라야 한다.
  • 목적별로 나눈다. 결제·배송에 쓴 주소를 마케팅 분석이 그대로 읽지 않도록 접근 권한과 뷰를 목적별로 나눈다.

개인정보 보호 중심 설계(Privacy by Design)

Privacy by Design은 캐나다 온타리오주 정보·프라이버시 위원이던 Ann Cavoukian이 정리한 일곱 원칙이다. 핵심은 보호를 나중에 덧붙이는 기능이 아니라 처음부터 설계에 넣고, 사용자가 아무것도 하지 않아도 보호되는 것을 기본값으로 삼는 것이다. GDPR 제25조는 이 생각을 컨트롤러의 의무로 옮겨, 가명처리·데이터 최소화 같은 조치를 설계 단계부터 넣고 기본값으로는 목적에 필요한 개인정보만(수집량·처리 범위·보관 기간·접근 범위 모두) 처리하도록 정했다.

Privacy by Design의 일곱 원칙과 개발자가 할 일: 사전 예방, 기본값으로서의 보호, 설계에 녹아든 보호, 포지티브섬, 처음부터 끝까지 보안, 가시성과 투명성, 사용자 존중1사후 대응이 아닌 사전 예방설계 검토에서 개인정보 흐름부터 본다2기본값으로서의 보호사용자가 아무것도 안 해도 보호된다3설계에 녹아든 보호나중에 붙이는 기능이 아니라 구조로4제로섬이 아닌 포지티브섬기능과 보호를 맞바꾸지 않는다5처음부터 끝까지 보안수집부터 파기까지 수명 전체를 지킨다6가시성과 투명성무엇을 왜 쓰는지 검증할 수 있게 연다7사용자 프라이버시 존중사용자 중심의 기본값·동의·통제GDPR 제25조는 비슷한 생각을 "설계와 기본값에 의한 데이터 보호" 의무로 정했다.
Privacy by Design의 일곱 원칙과 개발자가 옮길 수 있는 한 줄. 두 번째 원칙(기본값)이 실무에서 가장 효과가 크다.

로그와 분석 도구에서 새는 개인정보

데이터베이스를 아무리 잘 지켜도 개인정보는 옆길로 샌다. 요청 하나가 접근 로그, 애플리케이션 로그, 오류 추적 서비스, 분석 SDK, 세션 녹화 도구, 백업으로 복제되고, 사본마다 접근 권한과 보존 기한이 따로다. OWASP 로깅 치트 시트는 세션 식별자, 접근 토큰, 비밀번호, 민감한 개인정보, 결제 카드 데이터, 동의하지 않은 정보 등을 로그에 그대로 남기지 말고 지우거나 가리라고 권한다.

요청 하나가 접근 로그, 앱 로그, 오류 추적, 분석 SDK, 세션 녹화, 백업에 복제되며 개인정보가 새는 지점과 막는 법어디에 남나무엇이 새나막는 법접근 로그URL 쿼리의 이메일·토큰쿼리에 개인정보 금지앱 로그요청 본문 통째 출력허용 목록 필드만 기록오류 추적예외 메시지·지역 변수전송 전 마스킹분석 SDK페이지 제목·검색어·ID보낼 이벤트를 정해 둠세션 녹화입력란에 친 글자입력란 기본 가림백업·복제본지운 데이터의 사본보존 기한을 같게사본마다 접근 권한과 보존 기한이 따로라, 원본만 지워서는 파기가 끝나지 않는다.
요청 하나가 남기는 사본들. 원본 데이터베이스만 보고 '우리는 개인정보를 최소로 저장한다'고 말하기 쉽다.
  • URL에 개인정보를 넣지 않는다. 쿼리 문자열은 접근 로그, 프록시, 브라우저 기록, Referer 헤더로 퍼진다. 이메일·전화번호·토큰은 본문이나 헤더로 보낸다.
  • 로그는 허용 목록으로 찍는다. 요청·응답 본문을 통째로 찍지 말고, 기록할 필드를 정해 그것만 남긴다. 금지 목록은 새 필드가 생길 때마다 뚫린다.
  • 오류 추적 도구에 보내기 전에 가린다. 예외 메시지와 지역 변수에 사용자 입력이 섞인다. SDK의 마스킹 훅에서 지운다.
  • 분석 이벤트를 설계한다. 페이지 제목·URL·검색어에 개인정보가 섞이지 않는지 보고, 사용자 ID 대신 서비스 안에서만 통하는 가명 ID를 쓴다.
  • 세션 녹화는 입력란을 기본으로 가린다. 비밀번호뿐 아니라 이름·주소·메모 칸도 마찬가지다.
  • 사본의 기한을 맞춘다. 로그·백업·분석 웨어하우스의 보존 기한을 원본과 같은 정책으로 관리한다. 운영 쪽 로그 설계는 관측성 노트에 있다.

흔한 오해

  • "해시하면 익명이다" — 해시는 같은 입력에 늘 같은 값을 내는 결정적 함수다. 입력의 가짓수가 적으면 전부 해시해 보면 된다. 010으로 시작하는 휴대폰 번호는 뒤 8자리, 곧 100,000,000가지뿐이라 초당 10억 번 해시하는 장비(가정)라면 0.1초, 초당 1만 번으로 느리게 만든 해시라도 2.8시간이면 끝난다. 되돌리지 않아도 같은 번호는 같은 해시라 사람을 이어 추적하는 데는 그대로 쓰인다. 미국 FTC도 2024년 글에서 해시가 데이터를 익명으로 만들지 않는다고 못 박았다(FTC). 해시나 비밀 키를 쓴 HMAC으로 바꾼 값은 잘해야 가명정보다.
  • "이름만 지우면 된다" — 준식별자 몇 개로 대부분의 사람이 유일해진다(재식별 절).
  • "집계 통계는 안전하다" — 작은 칸(한 명짜리 셀)이나 두 집계의 차이로 개인 값이 드러난다. 차분 프라이버시가 이 문제를 다루려고 나왔다.
  • "동의를 받았으니 무엇이든 해도 된다" — 동의는 정해진 목적에 대한 것이고, 목적 제한과 최소화 원칙은 여전히 적용된다.
  • "암호화했으니 개인정보가 아니다" — 키를 가진 쪽에게는 그대로 개인정보다. 암호화는 유출 피해를 줄이는 보호 조치이지 익명화가 아니다.
전화번호의 SHA-256 해시를 끝 네 자리 1만 가지를 차례로 해시해 되돌리는 작은 예와, 010 뒤 여덟 자리 1억 가지를 전부 시도하는 데 걸리는 시간작은 예(빌드 때 실제로 계산)공개된 해시a1d04a90c91696a4…321df8후보010-0000-0000 … 010-0000-9999결과4,822번째 후보 010-0000-4821에서 해시가 일치실제 크기: 010 뒤 8자리 = 100,000,000가지빠른 해시(가정: 초당 10억 개)약 0.1초느린 해시(가정: 초당 1만 개)약 2.8시간느린 해시도 시간만 늘릴 뿐이고, 같은 번호는 늘 같은 해시라 사람을 이어 추적하는 데는 그대로 쓰인다.번호는 지어낸 예다. 처리 속도는 장비마다 크게 달라 원리를 보이려는 가정값이다.
'해시하면 익명'이 틀린 이유. 끝 네 자리만 모르는 지어낸 번호의 해시를 빌드 때 실제로 되돌린다. 전체 휴대폰 번호 공간도 가짓수가 작아 같은 방법이 통한다.

핵심 자료

요지는 직접 정리한 한 줄이다. 암호 기법의 원리는 암호학 노트, 보안 전반은 보안 노트, 결제 데이터의 보관 규칙은 결제 시스템 노트에 있다.

문헌연도한 줄 요지
Simple Demographics Often Identify People Uniquely (Sweeney)20001990년 미국 인구조사 요약 자료로, 우편번호 5자리·성별·생년월일만으로 인구의 87%가 유일할 가능성이 높다고 추정했다.
k-Anonymity: A Model for Protecting Privacy (Sweeney)2002공개 표의 모든 행이 준식별자로 k−1개 이상의 다른 행과 구별되지 않게 하자는 모델과, 의료 자료와 선거인 명부를 이은 재식별 사례.
ℓ-Diversity: Privacy Beyond k-Anonymity (Machanavajjhala 외)2006k-익명 표도 묶음의 민감 값이 한 가지이거나 배경지식이 있으면 무너짐을 보이고, 묶음마다 민감 값이 다양하도록 요구했다.
t-Closeness: Privacy Beyond k-Anonymity and ℓ-Diversity (Li, Li, Venkatasubramanian)2007묶음 안 민감 값의 분포가 전체 분포와 t 이상 다르지 않게 하자는 기준. 분포 사이 거리로 EMD를 쓴다.
How To Break Anonymity of the Netflix Prize Dataset (Narayanan, Shmatikov)2006익명 처리된 영화 평점 기록을 IMDb 공개 평점과 맞춰 사람을 다시 찾아냈다. 고차원 데이터는 몇 개 값만으로도 유일하다.
The Algorithmic Foundations of Differential Privacy (Dwork, Roth)2014차분 프라이버시의 정의, 라플라스 메커니즘, 합성 정리를 정리한 무료 교과서.
Communication-Efficient Learning of Deep Networks from Decentralized Data (McMahan 외)2016데이터를 기기에 둔 채 각자 학습한 갱신을 평균 내는 연합 학습(FedAvg)을 제안했다.
NIST SP 800-188 De-Identifying Government Datasets2023비식별 기법, 재식별 위험 시험, 공개 검토 위원회 같은 거버넌스를 묶은 정부 데이터 비식별 지침.
Privacy by Design: The Seven Foundational Principles (Cavoukian)2009사전 예방, 기본값으로서의 보호, 설계에 녹아든 보호 등 일곱 원칙.