Speaker Identity Privacy And Safety
화자 인식은 개인 식별 가능성이 있는 기능이다. 따라서 기술적으로 가능하다는 이유만으로 음성 원본, 임베딩, 대화 기록, 개인화 profile을 무제한 저장하거나 Cloud로 전송하면 안 된다.
1. 데이터 분류
| 데이터 | 민감도 | 저장 위치 권장 | Cloud 전송 |
|---|---|---|---|
| 일반 실행 중 raw audio/WAV/PCM | 높음 | 기본 저장 금지 | 금지 |
| 보이스 프로필 등록용 5개 임시 WAV | 높음 | OnDevice session temp | 금지 |
| accepted source sample | 높음 | 필요성이 승인된 경우에만 온디바이스 암호화 보관 | 금지 |
| Reference Embedding | 높음 | OnDevice + Cloud Registry 암호화 | 등록 동기화에 한해 허용 |
| Query Embedding | 높음 | 기본 비저장 | PPT runtime 요청 호환에 한해 전송 가능, Cloud 조회·매칭·저장 금지 |
| Voice ID | 중간 | 온디바이스 원본, Cloud mapping key | 가능 |
| display name | 중간 | Cloud 사용자 정보, 기기 표시 cache | metadata bind 시 가능 |
| speaker confidence/state | 낮음~중간 | 로그 가능 | 가능 |
| 대화 기록 | 중간~높음 | speaker scope + retention | 요약/후보만 |
| profile candidate | 중간 | 동의/삭제 정책 필요 | 제한 가능 |
| person_id / identity link | 중간~높음 | 계정/제품 identity 저장소 | 가능하나 최소화 |
| vital_face_id | 높음 | 바이탈 사인 저장소 | 직접 노출 금지, scope token 권장 |
| vital history | 높음 | 바이탈 사인 저장소 | 요약/추세만 제한 가능 |
| external account scope | 높음 | 계정 연동 저장소 | scope 요약만 가능 |
2. 삭제와 동의
필수 정책:
- 화자 등록 시 목적과 저장 범위를 안내한다.
- 화자 삭제 시 embedding, accepted source sample, history, profile candidate를 함께 삭제한다.
- Cloud 동기화가 있다면 삭제 이벤트도 Cloud로 전달한다.
- 등록용 5개 임시 WAV는 OnDevice template commit이 끝나면 즉시 삭제한다.
- Cloud 연결 재시도는 Voice ID + Reference Embedding Sync Outbox를 사용하며 WAV를 다시 사용하지 않는다.
- accepted source sample은 재부팅 후 재등록, embedding rebuild, 모델 버전 변경 대응을 위해 온디바이스 암호화 저장소에만 보관할 수 있다.
- Voice ID와 Person Profile 연결을 해제하면 개인화 memory, 바이탈 이력 접근, 외부 계정 접근도 즉시 중단한다.
- Vital Face ID 또는 Google 계정 연결은 Voice ID 삭제와 별개로 해제/삭제 가능해야 한다.
2.1 Cloud에는 원음이 아닌 등록 Reference Embedding을 동기화
최신 제품 기준에서는 등록 원음을 Cloud로 보내지 않는다. OnDevice가 Reference Embedding과 Voice ID를 만든 뒤 다음 데이터를 Cloud Voice Sync Registry에 동기화한다.
requestId,profileBindingToken,voiceId,deviceId- nickname, locale, 개인화 설정
- Reference Embedding과 model/profile version, sync 상태
Cloud에는 WAV, PCM, 로컬 파일 경로를 보내지 않는다. sync가 실패하면 동일 Voice ID와 Reference Embedding payload를 idempotent하게 재시도한다. Figma의 업로드 오류는 원음 업로드 오류가 아니라 Voice Sync Registry 동기화 오류를 뜻한다.
Runtime Query Embedding은 별도 데이터다. PPT 3페이지의 Lookup API 입력에는 포함되어 있지만 조회 키는 Voice ID뿐이며 Cloud 화자 인식에는 사용하지 않는다. 서버는 이를 로그·DB·캐시에 저장하지 않아야 한다. 계약 정리 시 필드를 제거할 수 있다면 제거하는 편이 데이터 최소화 원칙에 더 맞다.
제품 등록 경로의 상세 계약은 보이스 프로필 등록 제품 구현 기준서를 따른다.
3. 안전 실행 정책
side-effect 기능은 speaker confidence에 따라 실행 정책을 달리해야 한다.
| 기능군 | identified | unknown/ambiguous | multi/overlap |
|---|---|---|---|
| 일반 대화 | 허용 | 허용 | 재시도 권장 |
| 제품 설명 | 허용 | 허용 | 재시도 권장 |
| 청정/이동 | 허용 | 확인 질문 | 차단 |
| 보안/잠금/프라이버시 | 권한 확인 | 차단 | 차단 |
| 개인 기록 조회 | 본인만 | 차단 | 차단 |
| 바이탈 이력 요약 | linked/verified + 동의 + 단일 화자 | 차단 또는 앱 확인 | 차단 |
| 외부 계정 일정 | verified + provider scope | 차단 | 차단 |
4. 로그 정책
로그에 남길 수 있는 것:
speaker_statespeaker_confidencespeaker_countsafety_gatepersonalization_appliedauthority_gate- 마스킹 또는 hash 처리한 Voice ID trace
로그에 남기면 안 되는 것:
- Query Embedding과 Reference Embedding 원문
- raw audio
- accepted source sample
- 음성 파일 경로
- 민감 profile 원문
- 이름과 민감 속성을 결합한 장기 로그
5. 리스크와 대응
| 리스크 | 예시 | 대응 |
|---|---|---|
| 오인식 개인화 | 다른 사람의 선호 공간 적용 | confidence/margin gate |
| 기록 노출 | unknown speaker가 “내 기록 보여줘” | speaker owner 확인 |
| 권한 오남용 | guest가 보안 해제 요청 | authority_level gate |
| 다화자 오작동 | 주변 대화가 명령처럼 인식 | overlap/multi speaker block |
| 데이터 과수집 | temporary raw audio 방치 또는 runtime embedding 저장 | local commit 직후 삭제, Query Embedding 비저장, Reference Embedding 목적 제한 |
| 건강 정보 노출 | 다른 화자의 바이탈 이력 발화 | person_id/consent/single speaker gate |
| 외부 계정 오용 | Google 일정이 잘못된 화자에게 노출 | provider scope + verified identity gate |
| identity 오결합 | Voice ID를 잘못된 Face ID/Account에 연결 | 앱 확인, suggested 상태, revoke flow |
| latency 회귀 | 화자인식 0.5초 지연이 모든 기능에 누적 | 민감 기능만 blocking, timeout fallback |
6. Identity Link 보안 원칙
Voice ID, Vital Face ID, 컨트롤 앱 계정, Google 계정은 모두 다른 trust level을 가진다. 따라서 아래 원칙을 둔다.
- Voice ID는 OnDevice가 발급하지만 인증 수단이 아니라 발화 주체 evidence로 시작한다.
- Reference Embedding은 생체성 데이터로 보고 전송 암호화, 저장 암호화, 접근 감사, 삭제 전파를 적용한다.
- Person Profile에 연결되지 않은 Voice ID는 민감 정보 접근에 사용할 수 없다.
- Vital Sign 이력은 건강 정보이므로
linked/verified, 명시 동의, 단일 화자 조건을 모두 만족해야 한다. - Google 계정 연동은 provider scope와 token lifecycle을 별도 관리한다.
account_display_name은 identity key가 아니라 표시 이름 또는 link 후보일 뿐이다.