개인정보 탈감사 (privacy-audit)
용도
로컬 스킬 패키지, 코드 저장소, 데이터 디렉토리에 대해 개인정보 탈감사 준수 심사를 수행하고 등급별 문제 목록과 표준 감사 보고서를 생성합니다. 중국 법역 기준: 「개인정보보호법」(주석 제91호), 「데이터 보안법」, 「네트워크 보안법」(2025 개정), GB/T 35273-2020, GB/T 45574-2025(2025-11-01 시행), GB/T 43697-2024, 「개인정보보호 준수 감사 관리 방법」(2025-05-01 시행) 등을 따릅니다. 심사는 엄격하게: 명확한 근거가 없는 처리는 모두 '불가'로 처리합니다.
적용 상황: AI 스킬/코드/문서 게시 전 안전 점검, 데이터셋 외부 공유 전 탈감사 검증, 로그와 설정 유출 점검, 준수 감사 보고서 생성. 위치 구분: 이 스킬은 '심사/감사'(발견 + 등급 분류 + 개선 제안 + 근거 색인)를 수행하며, '탈감사 실행기'가 아닙니다. 직접 마스킹/데이터 교체가 필요한 경우 탈감사 도구 스킬을 사용하십시오. 이 스킬은 사전에 '게시 가능 여부, 위반 사항, 관련 법규'를 판단합니다. 상업적 위치 (v1.2.0): 'AI 스킬/애플리케이션 게시 전 준수 자가 점검' 시나리오를 대상으로 하며, Coze 등 대화형 플랫폼을 지원합니다(사용자가 첨부 파일 업로드 또는 텍스트 붙여넣기만으로 스캔 가능, 로컬 디렉토리 필요 없음). 유료 스킬로 등록할 수 있습니다.
트리거 단어
- 탈감사 심사 / 프라이버시 심사 / 프라이버시 준수 점검 / 준수 심사 / 프라이버시 보호 감사 / privacy audit / desensitization audit
- 민감 정보 스캔 / PII 스캔 / PII scan / 민감 필드 검출 / 개인정보 스캔 / 데이터 유출 점검
- 이 디렉토리에 개인정보 있는지 스캔 / 이 스킬에 개인정보 있는지 스캔
- 주민등록번호 스캔 / 코드에 휴대폰 번호 있는지 확인 / 코드에 주민등록번호 있는지 확인 / 은행 카드 번호 유출 점검
- 저장소에 하드코딩된 자격 증명 있는지 확인 / 로그에 평문 비밀번호 있는지 확인 / 업로드 파일에 민감 정보 있는지 확인
- 이 스킬이 프라이버시를 유출하는지 확인 / 이 스킬을 게시할 수 있는지 확인 / 공유 전에 탈감사 필요한지 확인 / 데이터셋 탈감사 검증
- 탈감사 개선 제안 / 준수 감사 보고서 생성 / 게시 전 안전 점검 / 등록 전 준수 심사
환경 준비
# 의존성: Python 3.8+, 순수 표준 라이브러리, 타사 의존성 없음
export SKILL_DIR=~/.workbuddy/skills/privacy-audit # 스킬 설치 경로
export TARGET_DIR=/path/to/심사할_디렉토리 # 심사 대상 디렉토리 (코드/스킬/데이터)
export REPORT_DIR=/path/to/보고서_출력_디렉토리 # 스캔 디렉토리 외부 권장 (자체 적중 방지)
실행流程
1단계: L1 자동 스캔 (먼저 기계가, 그 다음 사람이)
# 단일 디렉토리 스캔 + JSON 보고서
python3 "$SKILL_DIR/scripts/privacy_audit.py" "$TARGET_DIR" \
--rules "$SKILL_DIR/scripts/필드_검출_정규식_라이브러리.json" \
--json "$REPORT_DIR/audit_result.json"
# v1.1.0 배치 디렉토리 스캔 (여러 디렉토리 통합 감사) + HTML 시각화 보고서
python3 "$SKILL_DIR/scripts/privacy_audit.py" "$TARGET_DIR_A" "$TARGET_DIR_B" \
--rules "$SKILL_DIR/scripts/필드_검출_정규식_라이브러리.json" \
--json "$REPORT_DIR/audit_result.json" \
--html "$REPORT_DIR/audit_result.html"
- 17가지 민감 필드 스캔: 주민등록번호 / 휴대폰 번호 / 은행 카드 번호 / 이메일 / IP / 정확한 주소 / 정확한 위치 좌표 / 의사 서명 / 병원 기관명 / 비밀번호 평문 / 의료 건강 정보 / 미성년자 정보 / 차량 번호 / 여권 번호 / 위챗 ID / QQ 번호 / 통일사회신용코드 (v1.1.0 신규)
- 5가지 하드코딩된 자격 증명 감지: SkillHub key / GitHub token / OpenAI key / Tencent Cloud SecretId / COS 임시 자격 증명
- 종료 코드 (CI 게이트웨이에 연결 가능):
0=통과;1=고위험 적중 (게시 금지);2=중간 민감성 적중 (인적 확인 필요) --json: 구조화된 보고서 (scanned_roots/summary/verdict/findings 포함, CI에서 사용 가능);--html: 자체 포함 시각화 보고서 (개요 카드 + 등급 분포 그래프 + 파일별 적중 목록, 오프라인에서 볼 수 있음)--strict: 일반 등급 적중도 실패로 처리;--quiet: 결과 줄만 출력
대화형 스캔 (v1.2.0 신규, Coze 등 대화형 시나리오에 적합, 로컬 디렉토리 필요 없음):
# 단일 파일 스캔 (사용자가 업로드한 첨부 파일, 예: .py/.md/.json/.txt 등 텍스트 파일)
python3 "$SKILL_DIR/scripts/privacy_audit.py" --file /path/to/uploaded.py \
--rules "$SKILL_DIR/scripts/필드_검출_정규식_라이브러리.json" \
--json "$REPORT_DIR/audit_result.json"
# 텍스트 내용 스캔 (사용자가 붙여넣은 코드/텍스트 조각)
python3 "$SKILL_DIR/scripts/privacy_audit.py" --text "심사할 텍스트 내용" \
--rules "$SKILL_DIR/scripts/필드_검출_정규식_라이브러리.json"
# 표준 입력 스캔 (파이프라인 입력)
echo "심사할 텍스트" | python3 "$SKILL_DIR/scripts/privacy_audit.py" --stdin \
--rules "$SKILL_DIR/scripts/필드_검출_정규식_라이브러리.json"
2단계: L2 전체 심사 (6차원 인적 대조)
references/개인정보_탈감사_심사_규범.md를 실행 근거로 삼아 차원별로 대조:
- 식별 및 분류: 필드 목록 완전성, 민감도 등급 표시, 조합 재식별 위험, 미성년자 특별 표시
- 탈감사 방식 및 시나리오: 비식별화/익명화 선택이 민감도와 일치하는지 (비가역 우선; 가역은 반드시 키 관리)
- 필드 수준 탈감사: 필드별 저장/표시/전송/공유 4개环节 확인 (중점: 주민등록번호/은행카드는 반드시 암호화 저장; 인터페이스 기본 마스킹; 로그에 평문 금지)
- 프로세스 및 체크리스트: 33개 항목 체크리스트 항목별 체크 (A 사전 식별 5항목 / B 저장 6항목 / C 표시 6항목 / D 로그 4항목 / E 공유 5항목 / F 테스트 2항목 / G 기술 보장 6항목)
- 위반 시나리오 점검: 15개 고빈도 위반 시나리오 항목별 점검 (평문 저장, 인터페이스 미마스킹, 초범위 수집, 자동 동의 체크, 강제 얼굴 인식, 로그 평문, 유출 미통지, 개인정보 불법 거래, 국경 간 미평가 등)
- 준수 근거 검증: 법규 이름/문서 번호/날짜 및 국가 표준 번호는 규범 제6부를 기준으로 하며 변경 불가
3단계: 개선 및 검증
- 고위험(P0) 필수 수정: 하드코딩된 자격 증명 제거 → 환경 변수/키 관리; 평문 민감 데이터 → 암호화 저장 + 마스킹 표시
- 수정 후 L1 스캔 재실행, 종료 코드 0 확인 (또는 저위험만 남음)
- 중위험(P1) 다음 반복에서 수정 권장; 저위험(P2) 기록 후 추후 최적화
4단계: 표준 보고서 출력
references/심사_보고서_템플릿.md를 구조로 보고서 생성: 심사 대상 및 데이터 프로파일 → 결과 개요 → 등급별 문제 목록(P0/P1/P2) → 준수 항목 검증 → 개선 우선 순위 → 체크리스트 대조표 → 결론 및 면책 조항.
의존성 목록
- Python 3.8+ (표준 라이브러리: argparse/json/os/re/sys)
- 타사 의존성 없음; 선택적
--json출력 구조화 보고서로 CI에서 사용 가능
경계 및 보안 (레드라인)
- 법률 자문을 구성하지 않음: 보고서 결론은 특정 비즈니스 시나리오와 결합해야 하며, 고민감 시나리오는 인적 검토 + 준수 변호사 상담 권장
- 보고서를 스캔 디렉토리 외부로 출력: 감사 보고서가 2차 스캔에 적중되거나 게시 대상 산출물에 포함되는 것을 방지
- 전체 로컬: 클라우드 API 호출 없음, 심사 대상 내용 전송 없음
- 바이너리 건너뛰기: .zip/.png/.pdf/.docx/.xlsx/.pyc 등 스캔하지 않음 (스캔 필요 시 먼저 압축 해제/텍스트 변환)
- 삭제 금지: 이 스킬은 보고만 하며, 심사 대상 파일을 삭제하거나 수정하지 않음
경험적 함정 (내장, 반복 방지)
| 함정 | 근본 원인 | 해결 방안 (스크립트에 내장됨) |
|---|---|---|
| 좌표 상수/임의 긴 숫자열이 주민등록번호/은행카드로 오보 | 순수 정규식은 '형태'만 일치시키고 '유효성'은 검증하지 않음 | 주민등록번호 MOD 11-2 검증 코드 확인, 은행카드 Luhn 검증, 검증 실패 시 오보 건너뛰기 |
| 주민등록번호 내부 숫자가 휴대폰 번호/은행카드 정규식에 2차 적중 | 정규식 우선 순위 충돌 | 구간 중복 제거: 적중 구간이 더 높은 우선 순위 적중 내에 완전히 포함되면 건너뛰기 (예: 110101 시작 6자리가 휴대폰 번호로 오보되지 않음) |
| 긴 숫자열(예: 0.00669342162296594323 좌표 상수) 하위 문자열이 휴대폰 번호 적중 | 휴대폰 번호 정규식에 경계 없음 | 휴대폰 번호 정규식에 전후 숫자 경계 추가 (?<![0-9])…(?![0-9]) |
| 감사 보고서가 스캔 디렉토리에 기록되어 2차 적중 | 보고서 자체에 '적중 예제' 포함 | 보고서를 스캔 디렉토리 외부로 출력 (--json이 외부 디렉토리 가리킴) |
| Windows에서 중국어 파일 인코딩 깨짐 | 파일이 GBK일 수 있고 UTF-8이 아님 | read_text가 먼저 UTF-8 시도, 실패 시 인쇄 가능 문자 비율로 폴백 디코딩 |
| node_modules/.git 등 대용량 디렉토리가 스캔 속도 저하 | 필터 없이 전체 스캔 | SKIP_DIRS 내장 (.git/pycache/node_modules/.venv/dist/build 등) |
| 정규식 라이브러리 JSON에 새 필드 추가 후 스크립트 동작 불일치 | 정규식 라이브러리와 스크립트 분리로 동기화 손실 | 정규식 라이브러리 JSON이 유일한 사실 소스, 스크립트가 동적으로 로드; 새 필드 타입은 먼저 JSON 수정 후 스크립트 실행 |
| 정규식 라이브러리 JSON의 pattern 정의 텍스트가 자체 적중 (예: '인민병원' 문자가 병원명 정규식에 포함) | 규칙 정의 자체가 민감어 샘플 | 정상 현상, 자체 심사에서 해당 적중 발생 시 패턴 정의로 인적 확인 후 무시 (보수적 방향, REVIEW로 누락 방지) |
| '베이징시A12345' 지명+숫자가 차량 번호로 오보 | 차량 번호 정규식에 경계 없음, 하위 문자열 ' 京A12345' 적중 | 차량 번호 정규식에 전후 한자/영숫자 경계 추가 (?<!…)(?<![\u4e00-\u9fa5])…(?![…]), 구조 검증기 (성+문자+길이7/8) 이중 보험 |
| 임의 18자리 숫자열이 약 1/31 확률로 통일사회신용코드 GB 32100 검증 통과 | 모듈로 31 검증이 임의 문자열에 대해 자연적으로 통과 확률 제공 | USCC는 '중간 민감'(검토 필요, 인적 확인)으로 분류, 고민감이 아님, 이는 이를 위한 폴백; 음성 제어 테스트는 실제 불법 마지막 자리 사용 |
| 테스트 샘플 레이블 자체 적중 (예: '가짜 위챗 ID: xxx'가 위챗 ID 정규식에 적중) | 레이블 자체에 트리거 접두사+합법적 형식 포함 | 올바른 동작 (실제 시나리오 '위챗 ID: xxx'는 적중해야 함); 테스트 샘플 설계 시 레이블에 트리거 접두사 재현 방지 |
evals/ 테스트 케이스에 가상 민감 샘플이 포함되어 preflight --strict가 phone/email 경고 보고 | 테스트 케이스는 실제 형태의 샘플이 있어야 검출 능력을 테스트할 수 있지만, 게이트의 민감 스캔은 진위를 구분하지 않음 | 게시 자체 점검 시 --waive phone --waive email --reason "evals 테스트 케이스에 가상 테스트 데이터 포함, 실제 개인정보 아님"으로 면제하고 디스크에 기록; .preflight-waiver.json은 게시 전 삭제; 샘플 파일 첫 줄에 일관되게 '가상 테스트 데이터' 표시 |
| 임의 18자리 숫자열(예: 타임스탬프+일련번호)이 약 1/11 확률로 주민등록번호 MOD 11-2 검증 통과 | 검증 코드는 합법성만 보장하고 진위성은 보장하지 않음, 임의 문자열은 자연적으로 통과 확률 존재 | 알려진 한계: 인적 확인 후 일련번호/타임스탬프/流水号로 확인 후 무시; 이를 위해 정규식을 완화하지 마십시오 (REVIEW로 누락 방지) |
사용 예제 (대화 시뮬레이션)
사용자: ~/projects/skill-demo 디렉토리를 심사해 주세요. 게시할 수 있나요?
Agent:
1. L1 스캔 실행:
python3 ~/.workbuddy/skills/privacy-audit/scripts/privacy_audit.py ~/projects/skill-demo \
--rules ~/.workbuddy/skills/privacy-audit/scripts/필드_검출_정규식_라이브러리.json --json ~/reports/demo_audit.json
2. 종료 코드 1 → 2개 고위험 적중 (GitHub token 하드코딩 + 주민등록번호 평문) → 게시 금지 판정
3. 《심사 규범》에 따라 L2 6차원核对: 저장 미암호화, 표시 미마스킹, 로그에 평문 포함…
4. 등급별 문제 목록 출력 (H-1 하드코딩 token / H-2 주민등록번호 평문 저장 / M-1 로그 평문…)
5. 개선 제안 + 표준 보고서 → 사용자 수정 후 L1 재실행 → 종료 코드 0 → 게시 허용
참고 문서
references/개인정보_탈감사_심사_규범.md: 전체 6차원 규범 (L1/L2 계층, 33개 항목清单, 15개 위반 시나리오, 18개 법규 + 6개 국가 표준 색인, 부록 도구 설명) — 심사 실행의 유일한 사실 근거references/개인정보_탈감사_심사_요점.md: 6차원 요점 (법규 배경 및 판단 차원 상세 설명; 출처 등급 공식 = 법률, 법규 및 국가 표준, 커뮤니티 합의 = 공개 집행/사법 판례 및 업계 실무)references/심사_보고서_템플릿.md: L2 표준 보고서 구조 템플릿references/Changelog.md: 버전 기록 유일한 사실 소스 (1.0.0 → 현재 버전 전체 변경 기록 및 버전 설명)evals/: 회귀 평가 세트 (10개 실행 가능 테스트 케이스 +trigger_eval.json트리거 단어 의도 세트), 이 스킬 변경 후 한 번 실행하여 기존 기능이 손상되지 않았는지 확인, 실행 방법은evals/README.md참조
버전 및 사실 소스
- 현재 버전 번호는 SKILL.md frontmatter의
version을 기준으로 함; 게시 태그, README 버전 요약,references/Changelog.md의 현재 버전 항목 모두 이에 정렬됨. - 역사적 변경 사항은
references/Changelog.md가 유일한 사실 소스임. SKILL.md와 README의 Changelog는 최근 두 버전의 요약 + 해당 파일 링크에 불과, 각 위치에 전체 버전 기록을 별도로 유지하지 마십시오 — 세 개의 전체 병렬은 반드시 표류합니다. - 본문의
v1.1.0 신규/v1.2.0 신규는 기능 소속 표시: 해당 기능이 처음 등장한 버전을 표시하며, 역사적 기록에 속하며 현재 버전 번호와 함께 변경되지 않습니다 (현재 버전이 이미 1.3.0이더라도 표시는 원래대로 유지). scripts/필드_검출_정규식_라이브러리.json의"version": "1.1.0"은 규칙 라이브러리 버전: 스킬 버전과 독립적이며, 필드 유형/정규식/검증기가 실제로 변경될 때만 증가합니다. 1.2.0은 스캔 진입점(--file/--text/--stdin)만 변경하고 규칙은 변경하지 않았으므로 규칙 라이브러리는 여전히 1.1.0입니다 — 이는 올바른 상태이며, 오타가 아니므로 '정렬'하지 마십시오.
Changelog
전체 버전 기록은
references/Changelog.md(유일한 사실 소스)를 참조하십시오. 아래 표는 최근 두 버전 요약입니다.
| 날짜 | 버전 | 변경 유형 | 변경 내용 | 출처 |
|---|---|---|---|---|
| 2026-09-06 | 1.3.1 | 최적화 | 사이트 내 태그 추가 (프라이버시 보호/탈감사/PII/개인정보 보호 등 6개), 기능 변화 없음 | SkillHub 측 최적화 |
| 2026-08-29 | 1.3.0 | 최적화 | 트리거 단어 커버리지 58% → 100%(신규 evals/trigger_eval.json 의도 세트 16개 + 트리거 단어 클러스터 30개 확장); description 444자 → 238자로 수렴, 세부 사항 본문으로 이동; 신규 evals/ 실행 가능 평가 테스트 세트 10개(--run --aggregate 평균 1.00); 신규 references/Changelog.md; 버전 및 버전 기록 두 가지 사실 소스 설정 | 건강 검진 보고서 개선 |
| 2026-08-19 | 1.2.0 | 신규 | 스크립트에 --text/--stdin/--file 단일 파일/텍스트 스캔 진입점 추가 (Coze 대화형 입력에 적합, 로컬 디렉토리 필요 없음); 위치를 '게시 전 준수 게이트웨이'로 수렴; 신규 상업적定位 설명 추가 | Coze 등록 개선 |
(1.1.0 및 이전 항목은 references/Changelog.md 참조)
면책 조항
이 스킬은 AI 보조로 생성되었으며 참고용으로만 제공되며 공식 법률 자문을 구성하지 않으며 자격을 갖춘 변호사를 대체할 수 없습니다. 구체적인 준수 판단은 비즈니스 시나리오와 결합하여 전문 법률 담당자에게 문의하고 최신 시행 법규를 기준으로 해야 합니다.