- EU의 온라인 연령 확인은 신분증 업로드나 얼굴 스캔을 기본값으로 삼지 않고, 필요한 사실만 증명하는 구조라 많은 비판이 핵심을 빗나감
- 사이트가 이름·생년월일·ID 번호를 받는 대신 age >= required_age 같은 임계값 충족 여부만 확인하는 서명된 연령 증명이 기본 단위임
- 같은 자격증명을 여러 사이트에 반복 제시하면 방문 기록이 연결될 수 있어, 선택적 공개나 영지식 증명으로 상관관계를 줄이는 방식이 필요함
- EU Age Verification Blueprint는 Proof of Age attestations, relying parties, attestation providers, age-verification apps, trust lists를 사용하며 European Digital Identity Wallet 구조와 맞물림
- 개인정보 보호는 설계만으로 보장되지 않으며, 안정 식별자 재사용·발급자 실시간 호출·중앙 로그·지갑 텔레메트리·지문추적·비공개 구현 같은 구현 실패를 막아야 함
연령 제한 논쟁의 핵심
- 온라인 연령 확인 논쟁에는 기술 구현과 별개로 연령 제한 자체를 받아들이지 않는 입장이 섞여 있음
- 이런 입장에서는 어떤 개인정보 보호형 설계도 충분한 해법이 되기 어려움
- 9세, 10세, 14세 아동과 청소년은 조작, 중독 루프, 성적 콘텐츠, 도박 메커닉, 그루밍, 괴롭힘, 알고리듬 급진화 같은 위험을 혼자 감당할 준비가 되어 있지 않음
- 부모는 어린 자녀에게 강한 경계를 설정할 수 있지만, 청소년기에는 독립적으로 행동하고 결정하며 타인과 대화할 공간도 필요함
- 사회는 이미 운전, 음주, 도박, 특정 장소 출입에 연령 제한을 적용하고 있으며, 인터넷의 일부 영역에도 같은 원칙이 적용될 수 있음
- 더 어려운 문제는 연령 제한의 정당성보다 인터넷을 신원 검문소로 만들지 않고 집행하는 방법임
잘못된 방식이 만드는 감시 위험
- 온라인 연령 확인을 신분증 스캔, 여권 업로드, 셀피, 얼굴 스캔으로 구현하면 개인정보 위험이 커짐
- 포르노 사이트, 도박 사이트, 온라인 주류 판매점, 종교 포럼에 성인임을 증명하려고 이름, 생년월일, ID 번호, 얼굴, 주소, 여권을 넘길 필요는 없음
- 신뢰할 수 있는 제3자로 로그인하는 방식도 다른 문제를 만듦
- 은행, Google, Apple, 이동통신사, 정부 신원 서비스가 인증을 맡으면 웹사이트에는 문서를 넘기지 않아도 됨
- 대신 신원 제공자가 사용자가 어떤 연령 제한 사이트를 방문하는지 알게 됨
- 한 방식에서는 웹사이트가 사용자의 신원을 알고, 다른 방식에서는 신원 제공자가 사용자의 방문처를 알게 되므로 둘 다 위험함
더 나은 기본 단위: 서명된 연령 증명
- 더 나은 설계는 증명해야 할 사실만 증명하는 데서 시작함
- 웹사이트는 사용자의 이름, 생년월일, ID 번호, 실제 나이가 19세인지 37세인지 74세인지 알 필요가 없음
- 필요한 정보는 다음 조건 충족 여부뿐임
age >= required_age
- 오프라인 비유는 “over 18”만 적힌 공식 카드를 발급받아 연령 제한 장소 입구에서 제시하는 방식임
- 정부 사무소에서 여권이나 국가 ID로 나이를 확인함
- 발급받은 카드는 “18세 이상” 같은 한 가지 사실만 표시함
- 장소 운영자는 카드의 진위만 확인하고 이름, 생년월일, ID 번호는 알 수 없음
- 디지털 방식은 암호학으로 같은 구조를 구현함
- 승인된 발급자가 한 번 나이를 확인함
- 이후 서명된 자격증명을 발급함
{
"claim": "age_over_18",
"value": true,
"issuer": "Trusted Age Attestation Provider",
"valid_until": "2027-12-31"
}
signature = Sign(issuer_private_key, attestation)
Verify(issuer_public_key, attestation, signature)
- 중요한 속성은 웹사이트가 발급자에게 매번 연락할 필요가 없다는 점임
- 웹사이트는 증명이 신뢰된 발급자의 서명을 받았고 아직 유효한지만 확인함
- 발급자는 사용자가 어디에서 증명을 썼는지, 실제로 사용했는지 알지 못함
EU 접근의 구조
- EU Age Verification Blueprint의 핵심은 Proof of Age attestation 기반 구조임
- 시스템은 relying parties, attestation providers, age-verification apps, trust lists로 구성됨
- 이 접근은 European Digital Identity Wallet 아키텍처와 정렬되어 있음
- 사용자는 정확한 나이나 신원을 공개하지 않고 특정 나이 이상임을 증명할 수 있음
- 관련 문서
선택적 공개와 영지식 증명
- 서명된 증명은 매 사이트에 신분증을 업로드하는 방식보다 낫지만, 같은 자격증명을 여러 웹사이트에 제시하면 방문 상관관계가 생길 수 있음
- 이름이 없어도 여러 사이트가 같은 익명 성인이 site A, site B, site C를 방문했다는 사실을 연결할 수 있음
- 더 강한 방식은 선택적 공개 또는 영지식 증명을 사용함
- 지갑은 기본 증명을 그대로 보여주지 않고 다음 명제를 증명함
- 신뢰된 발급자가 서명한 유효한 Proof of Age attestation을 보유함
- 그 증명은 age >= 18을 만족함
- EU 기술 문서는 Proof of Age attestation에서 zkSNARK 증명을 생성하는 방식을 다룸
- 앱은 증명을 회로의 비공개 입력으로 인코딩함
- attestation provider의 공개키 같은 공개 입력을 사용함
- 검증 가능한 zkSNARK proof를 생성함
- 이 방식은 “여기 내 ID가 있음”, “여기 내 생년월일이 있음”, “여기 내 서명된 연령 자격증명이 있음”이 아니라, “내가 18세 이상임을 증명하는 유효한 자격증명을 보유했다는 암호학적 증거”를 제시하는 구조임
- 관련 문서
- EU ZKP technical annex: Proof of Age attestation을 비공개 입력으로 인코딩하고 attestation provider 공개키 같은 공개 검증 입력만 노출해 zkSNARK proof를 생성함
- Verifier developer guide: 표준 mdoc attestation은 사용자가 연령 임계값을 충족한다는 서명된 증명이고, ZKP는 더 강한 개인정보 보호와 연결 가능한 식별자 부재를 제공하는 향상된 증명 형식임
개인정보 보호를 깨뜨리는 구현 조건
- 개인정보 보호형 아키텍처도 잘못 구현되면 약속을 지키지 못함
- 다음 조건은 EU식 접근의 프라이버시 보장을 깨뜨릴 수 있음
- 웹사이트 간 재사용되는 안정 식별자
- 모든 연령 확인 때마다 발급자에게 연락하는 구조
- 검증 이벤트의 중앙집중 로그
- 어떤 relying party가 증명을 요청했는지 기록하는 지갑 텔레메트리
- 웹사이트가 필요한 것보다 많은 속성을 요구하는 동작
- 약한 지갑 보안
- 사용자가 과도하게 정보를 공유하도록 유도하는 나쁜 UX
- 익명 증명을 서로 연결하는 브라우저 또는 기기 지문추적
- 자격증명 사용처를 드러내는 폐기 확인
- 닫혀 있고 감사되지 않는 국가별 구현
- 개인정보 보호 논의의 초점은 연령 확인 시스템 자체를 무조건 반대하는 것이 아니라, 실제 구현이 이 구조를 지키도록 필요한 검사를 넣는 데 있음