새 모델이 적용되었습니다

PII Scanner & Microsoft SEAL Demo

Presidio 로 민감정보를 감지하고 등급을 자동 분류, Microsoft SEAL 동형암호로 데이터를 보호한 채 연산합니다.

모델: 로딩 중…

1. 파일 업로드

여기에 파일을 드롭 하거나 클릭해서 선택
.txt, .log, .csv, .json, .md, .pdf, .docx, .hwp 지원 (최대 32MB)
📤 업로드
📄 텍스트 추출
PII 분석
등급 분류
대기 중…

보안등급 분류

파일을 분석하면 등급(C/S/O)이 여기에 표시됩니다.

요약

아직 분석 결과 없음
#EntityMatch StartEnd ScoreRecognizer

본문 미리보기 (감지된 부분 하이라이트)

파일을 업로드하면 미리보기가 표시됩니다.

활성 인식기

"Show Recognizers" 클릭

SEAL 컨텍스트

상태: 로드 대기
SEAL 이란?

Microsoft SEAL 은 동형암호(Homomorphic Encryption) 라이브러리입니다. 데이터를 복호화하지 않은 상태로 덧셈/뺄셈/곱셈 등의 연산을 수행할 수 있어 개인정보를 외부 서버에 노출하지 않고 처리하는 시나리오에 사용됩니다. 이 데모는 브라우저(node-seal WASM) 에서 모든 키 생성/암호화/연산을 수행합니다.

1. 평문 입력 → 암호화

암호화 전
암호화 전

2. 암호문에 직접 연산

아직 결과 없음

3. 복호화 & 검증

Decrypted -
Expected (plaintext) -
Match -

파라미터

초기화되면 표시됩니다.

키 (Keys)

모두 base64 직렬화 (save()) 결과입니다. 비밀키는 실서비스에서 절대 외부로 유출 금지.

초기화 후 표시됩니다.

암호문 (Ciphertexts)

암호화 후 표시됩니다.

실행 로그


    

이 데모가 보여주는 것

문서 내부에 특정 주민등록번호가 들어있는지를, 문서를 복호화하지 않고 동형암호 연산만으로 검사합니다. 후보 RRN 들은 클라이언트에서 13자리 숫자 벡터로 BFV 암호화되어 서버로 전달되고, 서버는 비밀키 없이 (ct − target)² 만 계산해 결과 암호문을 돌려줍니다. 클라이언트만이 결과를 복호화할 수 있고, 13개 슬롯이 모두 0 이면 일치(MATCH) 입니다.

BFV 스킴이 필요합니다. SEAL 탭이 아직 초기화되지 않았다면 자동으로 BFV/4096 으로 초기화됩니다.

1. 입력

대기 중

2. 결과

#위치후보검사값결과
실행 후 표시됩니다.

Exact: 13개 슬롯의 절댓값 합 (0 → MATCH). · Pattern: (g-1)(g-2)(g-3)(g-4) 의 슬롯 6 값 (0 → 유효한 RRN 형식).

실행 후 활성화

프라이버시 경계

[ EXACT MATCH ]
┌─────────── CLIENT ───────────┐
│ regex /\d{6}-?[1-4]\d{6}/g    │
│ 각 후보 → [d0..d12] → BFV enc │
└──────────────↓────────────────┘
┌─────────── SERVER (no sk) ────┐
│ diff = ct - Plain(target)     │
│ sq   = diff * diff            │
│ relinearize                   │
└──────────────↓────────────────┘
┌─────────── CLIENT ───────────┐
│ 슬롯 0..12 합 = 0  ⇒  MATCH   │
└──────────────────────────────┘

[ PATTERN MATCH ]
┌─────────── CLIENT ───────────┐
│ regex /\d{6}-?\d{7}/g         │
│ (성별 자리 필터링 X — 모두 통과) │
│ 각 후보 → [d0..d12] → BFV enc │
└──────────────↓────────────────┘
┌─────────── SERVER (no sk) ────┐
│ d1 = ct - 1   d2 = ct - 2     │
│ d3 = ct - 3   d4 = ct - 4     │
│ m12 = d1 * d2  (depth 1)      │
│ m34 = d3 * d4  (depth 1)      │
│ p   = m12 * m34 (depth 2)     │
│ → p(g)=(g-1)(g-2)(g-3)(g-4)   │
└──────────────↓────────────────┘
┌─────────── CLIENT ───────────┐
│ 슬롯 6 의 값 = 0              │
│   ⇒ 성별자리 ∈ {1,2,3,4}      │
│   ⇒ 유효한 RRN 형식           │
└──────────────────────────────┘

키 (Keys)

SEAL 탭과 동일한 컨텍스트의 키. 비밀키는 실서비스에서 외부 유출 금지.

초기화 후 표시됩니다.

암호문 (Ciphertexts)

후보별로 입력 암호문 (클라이언트가 전송)서버 결과 암호문 (동형연산 후) 두 개가 짝지어 표시됩니다.

실행 후 표시됩니다.

실행 로그


    

이 데모가 보여주는 것

문서 안에 임의의 키워드 또는 와일드카드 패턴 이 들어있는지를, 토큰을 BFV 암호화한 채로 검사합니다. 길이가 같은 토큰들이 후보가 되며 서버는 (ct − target)² × mask 만 동형연산해 결과 ct 를 돌려줍니다. 클라이언트만이 복호화로 매치 여부를 확인합니다.

※ 본 데모는 ASCII 문자 (코드포인트 ≤ 127) 에 한해 동작합니다 — plain modulus 가 20bit 라 비ASCII 코드는 제곱 시 오버플로 가능. 한국어 패턴 검색은 PII Scanner 탭의 사용자 정의 룰을 사용하세요.

1. 입력

대기 중

2. 결과

#PatternToken위치슬롯합Match
실행 후 표시됩니다.

패턴과 같은 길이의 토큰들이 후보. 슬롯합 = 마스킹된 squared diff 의 합 (0 → MATCH).

실행 후 활성화

프라이버시 경계

┌─────────── CLIENT ───────────┐
│ 공백 단위 토큰화                 │
│ 패턴 P (길이 L) 와 같은 길이만 추림 │
│ 각 토큰 → 코드포인트 벡터 → BFV   │
│   [c0, c1, ..., cL-1, 0, 0, ...] │
└──────────────↓────────────────┘
┌─────────── SERVER (no sk) ────┐
│ target = Plain([P0..PL-1])    │
│   (와일드카드 자리는 0)         │
│ mask   = Plain([m0..mL-1])    │
│   (mi=1 if Pi 리터럴, 0 if *)  │
│ diff  = ct − target          │
│ sq    = diff × diff (depth 1) │
│ relinearize                   │
│ out   = sq × mask  (depth 2)  │
│   → 와일드카드 자리는 0 유지     │
└──────────────↓────────────────┘
┌─────────── CLIENT ───────────┐
│ 슬롯 0..L-1 합 = 0  ⇒  MATCH   │
└──────────────────────────────┘

키 (Keys)

SEAL/RRN 탭과 동일한 컨텍스트의 키.

초기화 후 표시됩니다.

암호문 (Ciphertexts)

패턴별로 후보 토큰의 입력 ct 와 서버 결과 ct 가 나열됩니다.

실행 후 표시됩니다.

실행 로그


    

학습 / 이력 — 사용자 정정으로 분류기 자동 개선

사용자가 AI 권고를 [C][S][O] 버튼으로 정정한 데이터를 모아, 분류기 가중치를 자동으로 갱신합니다. 자동화이지만 사용자가 "학습 라운드 실행" 버튼으로 트리거.

📖 초보 가이드 — 학습이 어떻게 동작하나요?

핵심 흐름 (5단계):

  1. 결정 누적 — 파일 분석 탭에서 [C][S][O] 버튼으로 사용자 최종 분류 기록.
  2. 학습 조건 검사labeled ≥ 10 (총 결정), per-class ≥ 3 (각 등급별), gap ≥ 3 (AI와 다른 결정). 조건 통과해야 학습 가능.
  3. "학습 라운드 실행" 클릭 → 1-step SGD on linear score → gradient 계산.
  4. 결과 확인 — 가중치 변화 (Δw 차트) + 학습 전후 정확도/SSE 비교.
  5. "핫스왑" 채택 — 새 가중치로 즉시 분류기 갱신 (서버 재시작 X).

학습 vs Rule Mining (운영 탭) 의 차이:

  • 학습 (이 탭) = 자동 — gradient 계산해서 모든 entity 가중치 일괄 갱신.
  • Rule Mining (운영) = 제안만 — 후보를 표시, 사용자가 각각 검토 후 채택.

하이퍼파라미터 (위 입력창):

  • η (learning rate) — 가중치 변화 속도. 크면 빠르지만 진동, 작으면 학습 더딤. 기본 0.05.
  • max|Δw| — 단일 라운드의 가중치 변화 한계 (안전망). 기본 0.5.

모델 버전 이력: 모든 학습 라운드 결과가 model_versions 테이블에 영속 보존. 잘못된 학습은 이전 버전으로 롤백 가능.

강제 실행 (force): 학습 조건 미달이어도 실험 목적으로 실행. 데이터 적어서 결과는 노이즈가 클 수 있음.

SPEC 출처: §1 기능 5/6/7/8/10 + §10 학습 파이프라인.

학습 조건

로딩 중…
η = · max|Δw| =

학습 결과

학습 라운드 실행 결과가 여기에 표시됩니다.

결정 이력 (사용자 라벨)

데이터 없음
Confusion Matrix (AI × User)
#파일AIUsergapscoreconf일시
결정 없음

이전 학습 라운드 이력

#일시샘플accSSE상태
학습 이력 없음

📚 모델 버전 이력

한 줄 클릭 시 변경 내역(어떤 가중치가 어떻게 바뀌었는지) 펼침.
로딩 중…

Neural 모델 (KoELECTRA + mDeBERTa)

SPEC §3.4 의 신경망 백본 — frozen 상태로 CLS 임베딩 추출 후 선형 헤드로 분류. 학습 데이터 0건이어도 프로토타입 zero-shot 모드로 동작.

상태 로딩 중…
현재 헤드 상세
아직 학습 안 됨.

익명화 / 등급강등 — PII 가린 채 안전하게 공유

분류된 문서를 외부에 보내야 하는데 PII 가 있다면? 정책에 따라 마스킹/치환/일반화 → 등급 강등까지 자동 반복. 가명화 framework 탭 과는 다릅니다 (아래 가이드 참조).

📖 초보 가이드 — 익명화가 어떻게 동작하나요?

핵심 흐름 (3단계):

  1. 입력 — 파일 분석 결과 가져오기 또는 텍스트 직접 붙여넣기.
  2. "1회 익명화" — 현재 정책 1번 적용 → entity 별 치환된 텍스트 출력.
  3. "target 등급까지 반복" — 정책을 반복 적용해 목표 등급에 도달 (최대 N번).

익명화 (이 탭) vs 가명화 framework (별도 탭) 의 차이:

측면 익명화 (이 탭) 가명화 framework
기준HE-TEST 자체 정책ISO 20889 + 27559 + DPV 2.0 + 4개 관할 법령
목적빠른 등급 강등 (내부 공유)컴플라이언스 보고 (외부 송신)
출력치환된 텍스트 + 새 등급+ 관할별 준수 판정 (KR/JP/US/EU)
엄격함중간 (PoC 단순화)높음 (법령 매핑)

6가지 처리 방법 (method):

  • mask — 별표(*)로 가림. 예: 800101-1234567******-*******
  • remove — 통째로 삭제 (AWS key 같은 자격증명)
  • replace — placeholder. 예: hong@example.com[EMAIL_1]. consistent: true 면 같은 원본은 같은 번호 (문서 내 cross-reference 보존)
  • generalize — 상위 개념으로. 주소 구→시, 날짜 일→월
  • shift — 날짜를 ±N일 무작위 시프트 (시간 순서는 유지)
  • round — 숫자를 N단위로 반올림 (금액 통계용)

target 등급 의미:

  • O 공개 — PII 다 가려짐. 외부 공유 가능 수준.
  • S 민감 (default) — 이메일 등 약식별자 남기되 주민번호 같은 강식별자는 가림.
  • C 위험 유지 — 강등 안 함. 분석 후 비교만 할 때.

정책 수정 어디서? 운영 → 정책 편집기 탭에서 entity 별 method/옵션 변경. 변경 즉시 영속 (anonymization_policy.json).

SPEC 출처: §15 익명화.

익명화 입력

최근 분석한 파일을 가져오거나 텍스트를 직접 붙여넣기. 분석 → 정책에 따라 entity 별 마스킹/치환/일반화 → 등급 재평가.

익명화 정책

entity 별 처리 방법 + target 등급 + 최대 반복 횟수. 변경 시 즉시 영속 (anonymization_policy.json).

로딩 중…

결과

먼저 좌측에서 익명화를 실행하세요.

스코어링 룰 / 기준 — 분류기가 어떻게 점수를 매기는가

현재 분류기 rule-v1 의 모든 가중치·임계값·하이퍼파라미터를 한 화면에. 학습 후에는 가중치가 갱신되지만 공식 자체는 동일.

📖 초보 가이드 — 분류기가 어떻게 동작하나요?

점수 기반 분류 (rule-v1) 의 직관:

  1. 문서에서 PII 항목을 찾는다 (PII 분석 단계).
  2. 각 항목의 가중치 만큼 점수를 더한다 (주민번호 5점, 이메일 1점 등).
  3. 등급 키워드 (예: "비밀번호") 가 있으면 점수 추가.
  4. 비한국어이면 보수적으로 등급 ↑ (정보 부족 보완).
  5. 최종 점수와 임계값을 비교 → C / S / O 결정.

채점 공식 (단순화):

score = Σ (ENTITY_WEIGHTS[type] × count) + LANGUAGE_PENALTY + KEYWORDS_BOOST

if score ≥ T_C  → C (위험)
if T_S ≤ score < T_C  → S (민감)
else  → O (공개)

주요 가중치 (default — 학습으로 변경 가능):

  • KR_RRN (주민번호) — 5.0 (가장 위험)
  • CREDIT_CARD — 4.5
  • KR_PASSPORT — 4.0
  • EMAIL_ADDRESS — 1.0 (약식별자)
  • ... 더 많은 항목은 아래 표 참조

왜 룰 기반인가? — 신경망 (KoELECTRA + mDeBERTa) 와의 차이:

측면 룰 (rule-v1) 신경망 (neural.py)
설명 가능성✅ 매 점수의 근거 표시⚠ 블랙박스 (SHAP 으로 일부)
데이터 요구적음 (0~수십 건도 동작)많음 (수백~수천)
속도매우 빠름 (μs)느림 (수초, GPU 권장)
복잡 패턴⚠ 단순 합 모델✅ 문맥 이해

HE-TEST 는 둘을 weighted ensemble (α default 0.5) 로 결합합니다.

룰 추가/수정 — 동적 편집:

  • custom_patterns.yaml — 정규식·키워드 인식기 자유롭게 추가
  • "Reload Patterns" 버튼 → 즉시 반영 (서버 재시작 X)
  • API: /api/rules/pattern, /api/rules/grade-keyword 등으로 프로그래밍 방식 편집

신뢰도 (confidence): 점수가 등급 경계에서 얼마나 떨어졌는가. 경계에 가까우면 낮은 신뢰도 (사용자 검토 권장), 멀면 높은 신뢰도. 운영 → 신뢰도 보정 (Platt) 탭에서 보정 가능.

SPEC 출처: §3.4 룰엔진 + §3.5 분류기.

스코어링 공식

분류기 rule-v1 가 문서를 채점하는 방식. 학습 후에는 가중치가 갱신되지만 공식 자체는 동일.

로딩 중…

등급 정의 (C / S / O)

등급임계값의미

🎯 신뢰도 (confidence)

confidence = 0.55 + 0.4 · tanh(margin / 2) margin = 활성 등급 밴드의 임계값에서 떨어진 거리 (밴드 안쪽이면 양 임계값까지 최소거리) ▸ margin = 0 → ~0.55 (애매, 사용자 확인 권장) ▸ margin = 1 → ~0.74 ▸ margin = 3 → ~0.91 ▸ margin → ∞ → ~0.95 (확신)

🔧 학습 하이퍼파라미터 + 트리거

상수설명

🧮 Entity 가중치

PII 인식기가 매칭한 entity 1건당 점수에 더해지는 가중치. 학습 시 갱신됨.

Entity가중치막대
로딩 중…

🔤 등급 키워드 보너스

본문 (lowercase) 에서 매칭된 키워드 1건당 점수. 동일 키워드 누적은 3회까지만 카운트.

키워드가중치표시 라벨
로딩 중…

📋 룰셋 다운로드

현재 활성 룰셋(가중치 + 임계값 + 하이퍼파라미터)을 JSON 으로 내보냅니다. 학습 후 핫스왑된 가중치도 즉시 반영됩니다.

➕ PII 정규식 패턴 추가 custom_patterns.yaml

한국형 PII 패턴(여권 / 외국인등록 / 운전면허 / 차량번호 등)을 즉시 등록. 추가 시 분석 엔진이 자동 재구축됩니다.

템플릿 로딩 중…

➕ Deny-list (키워드 명단) 추가

VIP 명단 / 보안 프로젝트명 같이 고정된 단어 목록을 직접 매칭. 한 줄에 한 단어씩 입력.

➕ 등급 키워드 보너스 추가 extra_grade_keywords.json

본문에 매칭되면 점수에 직접 가산되는 키워드. 빌트인 + 사용자 추가가 모두 활성됩니다.

사용자 추가 키워드 (영속 저장)

없음

📜 현재 custom_patterns.yaml 내용

파일 경로:
로딩 중…

가명화 framework (KR·JP·US·EU) — 국제 표준 + 4개 관할 매트릭스

ISO 20889 + 27559 + W3C DPV 2.0 + 4개 관할 (한국 PIPA / 일본 APPI / 미국 CCPA / 유럽 GDPR) 법령 매트릭스 기반의 정식 가명/익명화 PoC.

📖 초보 가이드 — 왜 별도 framework 가 필요한가요?

상황: 단순 익명화 (PII 가리기) 만으로는 외부 공유·해외 송신 시 법규를 만족하지 못합니다. 한국 PIPA, 유럽 GDPR, 일본 APPI, 미국 CCPA 가 각자 다른 기준을 요구.

표준의 의미:

  • ISO/IEC 20889 — 가명화/익명화의 기법 표준 (masking, tokenization, generalization, suppression 등 7가지).
  • ISO/IEC 27559 — 익명화 후의 재식별 위험 평가 표준 (k-anonymity 등).
  • W3C DPV 2.0 — 데이터 카테고리 온톨로지 (검출된 PII 를 표준 클래스에 매핑).
  • 4개 관할 법령 — 각 국가의 PII 정의·처리 요구사항·보존 기간 등.

처리 흐름 (아래 SVG 다이어그램 참조):

  1. 입력 — 파일/텍스트 + 관할 선택 (KR/JP/US/EU 다중 선택) + 처리 수준 (가명화/익명화)
  2. PII 검출 — Presidio + 한국어 NER (분류 파이프라인 재사용)
  3. DPV 매핑 — 검출된 PII 를 W3C DPV 카테고리에 매핑 (예: KR_RRN → dpv:NationalIdentificationNumber)
  4. 관할 분류 — 각 PII 를 identifier (직접식별) / quasi (준식별) / sensitive (민감) 로 분류 (관할마다 다름)
  5. ISO 20889 기법 적용 — masking, tokenization, generalization, suppression 등 (entity 종류에 따라 자동 선택)
  6. 변환문 + 관할별 준수 판정 — 결과 텍스트 + 각 관할 (KR/JP/US/EU) 의 요구사항 만족 여부 별도 평가

처리 수준 (treatment_level):

  • pseudonymization (가명화) — 원본 복원 가능. 매핑 키만 별도 보관하면 추적/재식별 가능. 내부 분석/통계 목적.
  • anonymization (익명화) — 비가역. 매핑 자체를 폐기. 외부 공개·연구 목적.

익명화 / 등급강등 탭과의 차이:

사용 상황 선택
내부 공유 / 빠른 등급 강등익명화 / 등급강등 탭
외부 공개 / 컴플라이언스 보고서가명화 framework 탭 (이 탭)
해외 송신 (GDPR 등 적용)가명화 framework 탭 (관할 다중 선택)

관할별 핵심 차이 (요약):

  • KR (PIPA) — 주민번호·여권번호 등 고유식별번호 엄격. 가명정보 결합 시 동의 또는 통계 목적 제한.
  • JP (APPI) — 가명가공정보 / 익명가공정보 구분. 매핑 폐기 의무.
  • US (CCPA) — Personal Information 광범위. opt-out 권리. 14세 미만 추가 보호.
  • EU (GDPR) — Personal Data + Special Category (인종·종교·건강 등) 구분. 가명화는 추가 보호조치 (recital 28).

SPEC 출처: 본 framework 는 origin/main 의 pseudo_framework.py 모듈 + 아래 SVG 다이어그램으로 시각화.

처리 흐름 — ISO/IEC 27559 기반 PoC

STEP 1 입력 파일 · 텍스트 .txt .pdf .docx .hwp STEP 2 PII 검출 정규식 · 키워드 + NER STEP 3 DPV 매핑 W3C DPV 2.0 dpv-pd: 카테고리 STEP 4 관할 분류 direct · quasi sensitive · secret STEP 5 기법 선택 ISO/IEC 20889 §7 — §8 STEP 6 변환 적용 tokenize · mask generalize · suppress STEP 7 준수 평가 ISO/IEC 27559 KR · JP · US · EU VERDICT & RATIONALE compliant · partial · insufficient + 근거 + 잔여 요구사항 (관할별 카드)
표준 인용: ISO/IEC 20889 (기법 분류) · ISO/IEC 27559 (절차) · 용어는 W3C DPV 2.0. 법령: KR 개인정보보호법 + 가명정보 처리 가이드라인 · JP APPI 仮名加工·匿名加工 · US HIPAA Safe Harbor + CCPA + NIST 800-188 · EU GDPR Art 4(5) + EDPB 01/2025. 본 PoC 는 휴리스틱 판정 — 실 운영 시 법무·통계 검토 필수.

1. 입력 / 옵션

가명화: 매핑 분리 보관 시 식별 가능 (GDPR Art 4(5), KR PIPA §28-2). 익명화: 어떤 합리적 수단으로도 재식별 불가.

대기 중

2. 처리 결과 — 원문 vs 변환문

원문 (Original)변환문 (Transformed)
실행 후 표시됩니다.
실행 후 표시됩니다.

3. 검출 엔티티 → DPV → 분류 → 기법

#EntityDPV (W3C)관할 분류기법 (ISO 20889)변환
실행 후 표시됩니다.

4. 규제별 준수 판정

실행 후 표시됩니다.

5. 처리 로그


    

🇰🇷 대한민국 — 개인정보보호법 (PIPA) 컴플라이언스

개인정보보호법 + 신용정보법 + 분야별 가이드라인. 본 페이지는 참조용 PoC — 실제 신고는 법무·DPO 검토 필수.

📖 빠른 가이드 — PIPA 의 정보 분류 (2020 개정)
  • 고유식별정보 (§24) — 주민등록번호·여권번호·운전면허번호·외국인등록번호. 주민등록번호는 §24-2 별도 처리제한 (법령 근거 필수).
  • 민감정보 (§23) — 사상·신념·노조·정치·건강·성생활·유전·전과. 별도 동의 또는 법령 근거 필요.
  • 개인정보 (§2) — 식별 가능한 정보. 단독 또는 결합으로 특정 가능.
  • 가명정보 (§28-2~7, 2020 신설) — 통계·연구·공익 목적 활용. 추가정보 별도 보관 필수.
  • 익명정보 (§58-2) — 어떤 추가정보로도 복원 불가. PIPA 적용 제외.

유출신고: 72시간 내 PIPC + KISA. 트리거 — ① 1,000명 이상 / ② 민감정보 / ③ 자격증명. 위반 시: 행정처벌 + 손해배상 (법정·징벌적).

1. PII 검출기 + 정책 — 구현 현황

로딩 중…

2. 분야별 가이드라인

로딩 중…

3. 유출신고 양식 자동 초안 (§34)

1,000명 이상 / 민감정보 / 자격증명 유출 시 72시간 이내 PIPC + KISA 신고.

아직 생성되지 않음 — 좌측 버튼으로 생성하세요.

🇺🇸 United States — HIPAA · CCPA · GLBA Compliance

Sector-specific regulations + state laws. 본 페이지는 참조용 PoC — 실제 보고서는 outside counsel 검토 필수.

📖 Quick Guide — Federal · State · Sectoral 3축
  • HIPAA (1996) — Healthcare 분야. Safe Harbor 18 식별자 모두 제거 (§164.514(b)(2)(i)). PHI 보호.
  • CCPA/CPRA (California, 2018 / 2023) — opt-out 권리. Sensitive Personal Information 별도 카테고리 (§1798.140(ae)).
  • GLBA (1999) — Financial 분야. NPI (Nonpublic Personal Information).
  • FCRA — Consumer reports (신용보고서).
  • COPPA — 13세 미만 아동.
  • FERPA — 학생 교육기록.

HIPAA Breach Notification: 60일 (Individuals + HHS) / 미디어 (≥500명). State laws: 모든 50개 주가 별도 통지법 보유 (California Civ. §1798.82 등).

Penalties: HIPAA Tier 4 최대 $1.5M/year; FTC enforcement; class action 가능.

1. PII Detectors + Policy — Implementation Status

Loading…

2. Sectoral Guidelines

Loading…

3. HIPAA Breach Notification Draft (45 CFR §164.400-414)

Individuals: 60d / HHS: 60d / Media (≥500): 60d. State laws vary.

Not generated yet — click buttons on left.

🇯🇵 日本 — APPI / マイナンバー법 컴플라이언스

개인정보보호법 + 마이넘버법 + 분야별 가이드라인. 본 페이지는 참조용 — 실제 보고는 법무 검토 필수.

📖 빠른 가이드 — APPI 3단 계층 구조
  1. 기본법 — 個人情報保護法 (APPI). 2003년 제정, 2015·2020·2022 개정. 한국 PIPA 와 거의 대응.
  2. 특별법 — マイナンバー法. 12자리 마이넘버 전용. APPI 보다 엄격 (利用目的限定·暗号化義務).
  3. 분야 가이드라인 — 金融 (FSA) · 医療 (MHLW) · 電気通信 (MIC).

유출신고 (APPI §26): 速報 3-5일 / 確報 30일. 마이넘버 위반 시 §51 不正取得罪 (최대 4년 징역).

📌 한국 PIPA 와 핵심 차이: 마이넘버 = 별도법 (한국은 PIPA 통합). 유출신고 트리거가 훨씬 광범위 ("권리침해 우려 시" 무조건).

マイナンバー法 — 별도 엄격 규제 ⚠ 가장 엄격

  • 利用目的限定 (§19) — 사회보장·세무·재해대책 3분야만. 그 외 보관 자체 위법.
  • 안전관리조치 의무 (§12) — 암호화·접근통제·감사로그 (PPC 가이드라인 §4).
  • 벌칙 (§48~57) — 부정제공 최대 4년 / 법인 ¥1억~¥2억.

HE-TEST 대응: JP_MY_NUMBER 정책을 remove 강제. my_number_act 위반 자동 판정 (verdict=insufficient). ✅ 구현

1. JP PII 검출기 + 정책 — 구현 현황

로딩 중…

2. 분야별 가이드라인 (金融·医療·電気通信)

로딩 중…

3. PPC 漏洩等報告 양식 자동 생성

APPI §26 + 시행규칙 §8 — 5W1H 9項目. 速報 3-5일 / 確報 30일.

아직 생성되지 않음 — 좌측 버튼으로 생성하세요.

🇪🇺 European Union — GDPR Compliance

Regulation 2016/679 + ePrivacy Directive + national implementations. 본 페이지는 참조용 PoC — 실제 신고는 DPO 검토 필수.

📖 Quick Guide — GDPR 핵심 7개 원칙 + Special Categories
  • Personal Data (Art 4(1)) — 식별 가능한 자연인의 정보. IP 도 포함 (Breyer C-582/14).
  • Special Categories (Art 9) — race·political·religious·trade union·genetic·biometric·health·sex life. 처리 금지 원칙, Art 9(2) 예외만 허용.
  • Criminal data (Art 10) — 공식기관 또는 회원국 법령 근거 시에만.
  • Pseudonymisation (Art 4(5)) — 추가정보 별도 보관. 가명화 자체로는 개인정보 지위 유지.
  • Anonymisation (Recital 26) — 합리적 수단으로도 재식별 불가. GDPR 적용 제외.

7대 원칙 (Art 5): lawfulness · fairness · transparency · purpose limitation · data minimisation · accuracy · storage limitation · integrity & confidentiality · accountability.

유출신고: Art 33 (DPA, 72시간) / Art 34 (data subjects, "without undue delay" if high risk). Penalty: 최대 €20M 또는 글로벌 매출 4% (Art 83).

1. PII Detectors + Policy — Implementation Status

Loading…

2. Sectoral & Cross-Border Guidance

Loading…

3. GDPR Art 33 / Art 34 Breach Notification Draft

Supervisory Authority (DPA): 72 hours / Data Subjects: without undue delay if high risk.

Not generated yet — click buttons on left.

전체 구성도

HE-TEST 의 모든 데이터 흐름을 9개 파이프라인으로 정리한 지도입니다. 각 파이프라인의 부제에 적힌 SPEC 출처와 모듈 파일을 함께 보세요.

📖 초보 가이드 — 9개 파이프라인 한눈에
  1. 분류 추론 파이프라인 — 파일 한 개를 받아 등급(C/S/O) 으로 분류하는 메인 흐름. (탭: 파일 분석)
  2. 신경망 분류 — KoELECTRA + mDeBERTa 두 백본의 임베딩을 조합한 보조 분류기. rule-v1 과 가중 평균.
  3. 사용자 피드백 → 학습 루프 — 사용자가 [C][S][O] 버튼으로 정정한 결정을 SQLite 에 누적, 조건 도달 시 가중치 자동 갱신. (탭: 학습 / 이력)
  4. 가명화 framework (KR·JP·US·EU) — ISO 20889 + DPV 매핑 + 4개 관할 법령 매트릭스. (탭: 가명화 framework)
  5. 익명화 / 등급강등 — 정책에 따라 PII 를 placeholder 로 바꾸고 등급을 한 단계 내림. (탭: 익명화 / 등급강등, 정책 편집은 정책 편집기)
  6. Rule Mining — 학습이 자동이라면 Rule Mining 은 "제안만" — 사용자 검토 후 채택. (탭: Rule Mining)
  7. Platt Calibration — 분류기 신뢰도 숫자를 진짜 정답률에 맞춰 보정. (탭: 신뢰도 보정 (Platt))
  8. Drift Detection — 분류 패턴 변화 (정확도/갭/entity 분포) 자동 감지·알림. (탭: Drift 탐지)
  9. HE 학습 시연 — 다중 사용자의 gradient 를 BFV 동형암호로 평문 없이 합산. (탭: HE 학습 시연)
  10. + 별도 파이프라인: 동형암호 (HE) — RRN/Keyword 검색용 BFV/CKKS 데모. (탭: SEAL Demo / RRN Search / Keyword Search)

색상 범례 — 노드 색상이 어디서 동작하는지 의미합니다:

⬜ 일반 단계 (입출력) 🟦 모델/연산 (서버) 🟩 HE 클라이언트 (브라우저 WASM) 🟧 영속 저장 (SQLite)
분류 추론 파이프라인 파일 → 결과 카드 (SPEC §1 기능 1·3·4)
📂 파일 입력 PDF · DOCX · XLSX · TXT · HWP · CSV · MD · JSON
텍스트 추출 pypdf · python-docx · hwp_extract
BOM/cp949/euc-kr 자동 감지
PII 분석 (3-stack) Presidio + custom_patterns
+ ko_ner.py (KoELECTRA-NER)
+ ner_filter.py 휴리스틱
분류기 classifier.py rule-v1
rule-v1
+ neural.py 앙상블 (α)
설명 + SHAP explainer.py (자연어)
shap_explain.py (토큰 기여도)
결과 카드 등급 · 신뢰도 · 근거 · 자연어
신경망 분류 (Neural) KoELECTRA + mDeBERTa 앙상블 — rule-v1 과 weighted ensemble (SPEC §1 기능 2 · §3.4 충실 구현, neural.py)
📂 텍스트 truncate ~1500 chars
🇰🇷 KoELECTRA-small 256-d CLS
~50MB · 한국어
🌐 mDeBERTa-v3-base 768-d CLS
~280MB · 다국어
🧬 Concat 1024-d 두 임베딩
concat
🎯 분류 헤드 zero-shot or
trained LR head
앙상블 α·rule + (1-α)·neural
α=0.5 default
사용자 피드백 → 학습 루프 사용자 결정 → 새 모델 버전
👤 사용자 결정 [C][S][O] 버튼
+ 메모
💾 SQLite decisions.db
storage.py
학습 조건 검사 labeled≥10 · per≥3 · gap≥3
🧠 Gradient 계산 train.py
1-step SGD on linear score
🔄 핫스왑 ENTITY_WEIGHTS
in-memory 갱신
📚 새 버전 등록 model_versions
rule-v1.N+1
가명화 framework (KR·JP·US·EU) ISO 20889 + 27559 + DPV 2.0 — 4개 관할 매트릭스 (pseudo_framework.py)
📂 입력 파일/텍스트
+ jurisdictions
+ 처리 수준
PII 검출 Presidio + ko_ner
(분류 파이프라인 재사용)
DPV 매핑 W3C DPV 2.0
EntityType → DPV class
관할 분류 KR · JP · US · EU
identifier / quasi / sensitive
ISO 20889 기법 masking · tokenization
generalization · suppression
변환문 + 4개 판정 관할별 준수 여부
+ 처리 로그
익명화 / 등급강등 분류 결과 → 정책 기반 PII 교체 → 등급 다운그레이드 (anonymization.py)
분석 결과 findings + 등급 (C/S/O)
정책 적용 anonymization_policy.json
entity → 교체 전략
PII 교체 [EMAIL_1] · [PHONE_2]
등 placeholder
등급 다운그레이드 C → S 또는 S → O
(/api/anonymize/downgrade)
새 등급 + 사이드카 교체된 텍스트
+ 매핑 (영속 X)
동형암호 (HE) — 별도 파이프라인 모두 브라우저 WASM
🔑 SEAL Init node-seal WASM
BFV / CKKS 컨텍스트
암호화 평문 벡터 → 암호문
비밀키는 클라이언트만
동형연산 서버: 비밀키 없이
(ct − target)² · ×mask
복호화 클라이언트
슬롯 합 = 0 → MATCH
Rule Mining (갭에서 자동 룰 후보) 사용자 검토 후 채택 — 학습 보강 (rule_mining.py · SPEC §2.4 (3))

학습(train.py) 이 자동 갱신이라면, Rule Mining 은 "이렇게 바꿔보세요" 제안만 — 사용자 검토 → 채택. 더 안전.

결정 이력 storage.list_decisions()
SQLite
갭 분석 |AI − User| ≥ min_gap
entity 별 ↑/↓ 빈도
룰 후보 생성 direction (raise/lower)
+ Δw + 신뢰도 + 근거
👤 사용자 검토 "채택" 버튼
Rule Mining 탭
가중치 갱신 classifier.ENTITY_WEIGHTS
in-memory
Platt Calibration (신뢰도 보정) 분류기 confidence 를 진짜 정답률에 맞게 변환 — SPEC §2.4 (2) (platt_calibration.py)

학습 데이터: (score=ai_confidence, label = ai_grade==user_grade). 결과: 시그모이드 두 파라미터 (A, B). 분류 결과 카드의 신뢰도가 실제 정답률 에 맞춰 보정됨.

결정 이력 decisions 테이블
(score, label) 추출
Logistic Regression 2-param GD
800 iter · BCE loss
(A, B) 영속 calibration_params.json
σ(A·x + B) 적용 분류 결과 카드의
신뢰도 보정 표시
진짜 의미 있는 신뢰도 자동화 (예: ≥ 0.9)
의사결정 안전성 ↑
Drift Detection (분류 패턴 변화 감지) 시간 윈도우 비교로 정확도·갭·entity 분포 변화 자동 알림 — SPEC §2.4 (4) (drift_detection.py)

최근 N건(window A) vs 이전 N건(window B). 정확도 −15%p 이상 하락 시 alert, 평균 갭 +0.3 이상 증가 시 warn, entity 분포 PSI ≥ 0.1 시 info.

결정 이력 decisions 시간순
정렬
윈도우 분할 최근 N건 (A)
이전 N건 (B)
3 지표 계산 accuracy_drift
gap_drift · entity PSI
시계열 추이 sliding bin (10건)
정확도·갭 추적
알림 생성 alert / warn / info
임계값 기반
HE 학습 시연 (gradient 보호) 다중 사용자 학습 결과를 평문 없이 합산 — SPEC §2.6 (HE 학습 시연 탭)

개별 사용자의 gradient 가 행동 패턴을 노출 → BFV 동형암호로 합산 후 평균만 노출. 일반 학습 루프의 "Gradient 계산" 단계와 결합 가능 (현재 데모).

N명 클라이언트 각자 gradient 평문
(브라우저 학습)
BFV 암호화 node-seal WASM
poly=4096 · tc128
서버 합산 평문 0 bit 사용
evaluator.add()
관리자 복호화 합 ciphertext
→ Σgrad → /N 평균
모델 갱신 평균 gradient 만
가중치에 반영

💡 두 가지 보안 모델 — (1) 분류 / 학습 / 가명화 / 익명화 / Rule Mining 파이프라인은 local-first (서버=Flask 가 평문을 처리하지만 100% 로컬 머신에서만 동작, 외부 송신 없음). (2) 동형암호 (HE) + HE 학습 시연 은 한 단계 더 — 평문이 메모리에서도 사라지고 ciphertext 만 처리. 다중 사용자 / 다중 머신 시나리오에서 빛남. 클라이언트 WASM (node-seal) 으로 동작.

🧰 사용 모듈 / SW 스택

현재 프로세스에서 실제 import 되어 동작 중인 라이브러리 + SPEC §3 에 명시됐으나 아직 통합 안 된 항목까지 모두 표시. 어디서 동작하는지(서버 / 브라우저 / 저장소) 색상으로 구분.

server (Flask) client (브라우저 WASM) storage (로컬 SQLite) 예정 (미통합)
🟢 활성 모듈 (현재 import 되어 동작 중)
로딩 중…
⚪ 미통합 / 부분 (SPEC 에 계획됐지만 현재 미구현 또는 부분 구현)

KoELECTRA / mDeBERTa 신경망 분류는 통합 완료neural.py 가 두 백본 frozen + linear head 로 동작 (SPEC §1 기능 2 · §3.4). classifier.py rule-v1 과 weighted ensemble (α default 0.5).
⚠ 현재 미구현/부분 구현: SPEC §2.6 동형암호 학습 (gradient HE 보호) — HE 모듈은 별도 데모만, 학습 gradient 와 연결 X. SPEC §2.4 갭 활용 4가지 중 1번 (sample weight) 만 완료, 2/3/4 (Platt calibration · rule mining · drift detection) 미구현. SPEC §2.1 IndexedDB/OPFS → 현재는 서버 SQLite (decisions.db) 로 대체.

로딩 중…
🧬 spaCy 모델 설치 상태
로딩 중…

성능 대시보드

요청 timing + 시스템 메트릭. 페이지가 보이지 않으면 자동 폴링이 멈춥니다 (성능 영향 0).

⏱ Phase 별 Latency (ms)

데이터 수집 중…

🖥 CPU (logical core 별, %)

🌐 Browser 환경 (클라이언트)

로딩 중…

📋 최근 30 요청

tspathtotal msstatus
데이터 없음

🛤 Path 별 호출 횟수

pathcount

로그 뷰어

활성 레벨:
로딩 중…

익명화 정책 편집기

파일에서 검출된 개인정보(PII)를 어떻게 처리할지 결정하는 규칙표입니다. 이메일은 마스킹할까? 주민번호는 별표로 가릴까? 이름은 [PERSON_1] 같은 placeholder 로 바꿀까? — 각 항목별 선택을 여기서 합니다.

📖 초보 가이드 — 정책이 왜 필요한가요?

문제: "민감 등급 (S)" 으로 분류된 문서를 외부에 공유해야 한다고 합시다. 그대로 보내면 안 되고, 개인정보를 가려야 합니다. 그런데 어디까지 가려야 안전한지, 어떻게 가려야 가독성이 살아있는지 는 항목별로 다릅니다.

예시:

  • 주민번호 800101-1234567******-******* (전부 가려야 함, mask)
  • 이메일 hong@gmail.com[EMAIL_1] (placeholder 로 일관성 보존, replace)
  • 전화번호 010-1234-5678***-****-5678 (마지막 4자만 남기기, preserve_last)
  • 주소 서울특별시 강남구 역삼동 123-45서울특별시 강남구 (하위 단위 제거, generalize)
  • 날짜 2026-05-092026-04-21 (±30일 무작위 시프트, shift)

정책의 6가지 처리 방법 (method) — 각 PII 항목에 1개씩 지정:

  • mask — 별표(*)로 가림. preserve_last: 4 로 끝 4자 보존 가능
  • remove — 통째로 삭제 (자격증명 등)
  • replace — placeholder (예: [EMAIL_%d]) 로 교체. consistent: true 면 같은 원본은 같은 번호
  • generalize — 상위 개념으로 (주소 구→시, 날짜 일→월)
  • shift — 날짜를 ±N일 무작위 시프트 (시간 순서는 보존)
  • round — 숫자를 N단위로 반올림

등급 강등 (downgrade): 정책을 적용한 뒤 다시 분류했을 때도 등급이 안 내려가면 (예: C 등급 그대로) 더 강한 정책으로 자동 반복 적용. target_grade 까지 도달하거나 max_iterations 만큼 반복.

정책 적용 후 도달해야 하는 등급. 예: C 문서를 S까지 내리고 싶으면 S 선택.
목표 등급에 도달하지 못하면 정책을 더 강하게 다시 적용. 1~10 사이.

Entity 별 처리 정책

각 PII 항목(KR_RRN 주민번호, EMAIL_ADDRESS 이메일, …)에 어떤 method 를 쓸지 선택. 변경 후 "저장" 클릭.

Entity Type Method 옵션
로딩 중…

미리보기 — 정책 테스트

샘플 텍스트에 현재 정책을 적용해 결과를 확인합니다. 실제 분석/저장은 안 함.

원본

실행 후 표시

익명화 결과

실행 후 표시

Rule Mining — 갭에서 자동 룰 후보 제안

사용자가 자주 AI 와 다르게 등급을 매기는 패턴을 찾아 "이 entity 의 가중치를 ↑/↓ 하시겠습니까?" 식으로 룰 후보를 자동 제안합니다.

📖 초보 가이드 — Rule Mining 이 왜 필요한가요?

상황: AI 가 어떤 문서를 "S 민감" 등급이라 했지만, 사용자는 "C 위험" 으로 정정하는 일이 자주 발생. 왜? AI 의 룰이 그 패턴을 충분히 무겁게 안 봤기 때문.

해결: 결정 이력을 자동 분석해서:

  • "KR_RRN 이 들어간 문서는 사용자가 항상 등급을 1단계 올림" → 이 entity 의 가중치를 ↑ 제안
  • "EMAIL_ADDRESS 만 있는 문서는 사용자가 항상 등급을 내림" → 가중치 ↓ 제안
  • "같은 파일명 패턴이 반복적으로 갭 발생" → 특별 룰 후보

학습 (train.py) 과의 차이: 학습은 가중치 자동 조정. Rule Mining 은 "이렇게 바꿔보세요" 제안만 — 사용자가 채택해야 적용. 더 안전 (자동화 X, 검토 후 적용).

SPEC 출처: §2.4 갭 활용 4가지 중 (3) Rule mining.

갭이 이 값 이상인 결정만 분석. 1=한 단계 (S→C 또는 C→S), 2=두 단계 (O→C).
같은 entity 가 이 횟수 이상 갭에 등장해야 후보로 채택. 우연 패턴 배제.

제안된 룰 후보

각 후보의 근거와 영향을 보고 "채택" 클릭 — 즉시 적용됩니다.

"갭 분석 실행" 버튼을 눌러 시작하세요.

HE 학습 시연 — 평문 없이 gradient 합산

여러 사용자의 학습 결과(gradient)를 서버가 평문을 절대 안 보면서 합산할 수 있습니다. 이게 동형암호(HE) 의 핵심 가치입니다. 아래에서 직접 시연해보세요.

📖 초보 가이드 — 왜 HE 로 학습을 보호하는가?

일반 학습의 문제: 100명의 직원이 각자 회사 문서를 분류·학습하면, 각자의 gradient (가중치 변화량) 가 그 사람의 분류 패턴을 그대로 드러냅니다. "이 사람은 어떤 문서를 위험으로 봤나" → 사실상 직원 행동 추적 가능.

HE 의 해결:

  1. 클라이언트 (브라우저): 각자의 gradient 를 BFV 동형암호로 암호화 → 평문 사라짐
  2. 서버: 암호문들을 받아 그대로 덧셈 (HE 의 동형성 — 평문 없이도 덧셈 가능). 서버는 누가 뭘 학습했는지 모름.
  3. 관리자 (또는 일정 인원 합의): 합산 암호문을 복호화 → 전체 평균 gradient 만 노출. 개별 사용자 정보 X.
  4. 모델은 이 평균 gradient 로 갱신.

왜 가능한가? BFV 같은 HE 스킴은 Enc(a) + Enc(b) = Enc(a+b) 가 수학적으로 성립. 서버는 두 암호문을 곱(덧셈)만 하면 됨. 평문 a, b 는 절대 보지 않음.

본 시연: 4개 entity 의 gradient (예: [KR_RRN: +0.3, EMAIL: -0.1, PHONE: +0.05, NAME: 0.0]) 를 두 클라이언트가 각각 암호화 → 서버가 합산 → 복호화. 시각적으로 평문이 어디서 사라지고 어디서 나타나는지 보여줍니다.

SPEC 출처: §2.6 동형암호와의 연결.

클라이언트 A (사용자 1)

gradient 평문 (학습 결과). 4개 entity 가중치 변화량.
EntityΔw
KR_RRN
EMAIL_ADDRESS
KR_PHONE
PERSON

클라이언트 B (사용자 2)

다른 사용자의 gradient. 다르게 입력해보세요.
EntityΔw
KR_RRN
EMAIL_ADDRESS
KR_PHONE
PERSON
대기 중

STEP 1 클라이언트에서 BFV 컨텍스트 초기화

대기 중...

STEP 2 클라이언트 A·B 가 각자 gradient 를 BFV 로 암호화

대기 중...

STEP 3 서버: 평문 없이 두 암호문을 동형 덧셈 (Enc(A)+Enc(B))

대기 중...

STEP 4 클라이언트 (관리자): 합 암호문 복호화 → 평균 gradient

대기 중...

STEP 5 검증 — 평문 합산 결과와 일치하는가?

대기 중...

HE-FL 학습 (Phase 1) — 실제 결정 이력에서 모델까지

HE 학습 시연 탭이 가상 gradient 로 5단계 흐름만 시연했다면, 이 탭은 실제 결정 이력에서 도출한 gradient 로 1라운드 학습을 완전히 수행합니다. 모델이 진짜 갱신됩니다.

📖 초보 가이드 — 이 화면이 무엇을 보여주나요?

이 페이지의 목적: 사용자가 분류한 파일들의 정보가 어떤 경로로 모델 가중치 갱신까지 이어지는지, 그 과정에서 HE 가 어떻게 데이터를 보호하는지를 6단계로 가시화.

학습 대상 모델: classifier.ENTITY_WEIGHTS (rule-v1) — 약 20개 entity 별 가중치. 1-step linear regression SGD.

학습 데이터 정의:

  • features = 결정의 findings_summary (entity → count, 예: {KR_RRN: 2, EMAIL: 1})
  • target = 사용자 결정 등급 (O=0, S=1, C=2)
  • pred = Σ weights[ent] × count[ent] (현재 모델 forward)
  • grad[ent] = (pred − target) × count[ent] (∂MSE/∂w)

HE 의 역할: 각 클라이언트의 gradient 가 그 클라이언트의 분류 패턴을 그대로 노출 → BFV 동형암호로 암호화. 서버는 ciphertext 만 받아 합산 → 합산 결과를 복호화 → 평균. 평문 gradient 는 어느 한 머신에도 노출되지 않음 (관리자 복호화 시점에만 평균).

6단계 화면:

  1. STEP 1 — 결정 이력 로드 (파일별 AI/User 등급)
  2. STEP 2 — features + target 추출 (학습 데이터)
  3. STEP 3 — 클라이언트별 gradient 계산 (forward + backward)
  4. STEP 4 — BFV 암호화 → 서버 합산 → 복호화 (HE 학습 시연 탭의 흐름 자동 실행)
  5. STEP 5 — 평균 gradient → 모델 적용 (ENTITY_WEIGHTS 갱신 + 새 model_version 영속)
  6. STEP 6 — 학습 전후 비교 (Δw + 새 분류 결과)

SPEC 출처: §2.6 + docs/he_fl_plan.md Phase 1.

결정 이력을 N 등분하여 다중 사용자 시뮬레이션. Phase 1 권장: 1 (단순) 또는 2 (HE 합산 효과 시연).
가중치 변화 속도. 크면 빠르지만 진동, 작으면 안정적이지만 더딤.
대기 중

STEP 1 결정 이력 로드

사용자가 [C][S][O] 버튼으로 정정한 파일 분류 결과 — 학습 재료.

실행 후 표시

STEP 2 features + target 추출

각 결정 → (entity 별 count 벡터, 등급 정수). 분류기 입력 형태.

실행 후 표시

STEP 3 클라이언트별 gradient 계산

각 클라이언트가 자기 데이터로 forward + backward → entity 별 Δw 벡터. 이때까지는 평문.

실행 후 표시

STEP 4 HE 보호 — BFV 암호화 → 서버 합산 → 복호화

각 클라이언트가 gradient 를 BFV 로 암호화 → 서버는 evaluator.add() 로 합산 (평문 0 bit) → 관리자가 복호화 → /N 평균. 여기가 HE 의 핵심.

실행 후 표시

STEP 5 모델 적용 — ENTITY_WEIGHTS 갱신

평균 gradient × η 만큼 가중치 빼기 (gradient descent). 새 model_version 영속 + 활성화.

실행 후 표시

STEP 6 학습 전후 비교 + 검증

평문 합산 결과와 HE 복호화 결과 일치 확인 + 변경된 entity 별 Δw 시각화.

실행 후 표시

Phase 2 — N 라운드 자동 반복 (서버 시뮬)

Phase 1 의 1 라운드를 N 회 자동 반복합니다. 라운드별 정확도·MSE 변화를 시계열로 시각화하여 수렴 여부 확인. HE 보호는 Phase 1 가 BFV 동형성으로 검증; Phase 2 는 서버 측 평문 시뮬레이션으로 빠르게 N 라운드 돌림.

📖 초보 가이드 — Phase 2 가 Phase 1 과 다른 점

Phase 1 (위 6단계) — 실제 BFV 암호화·합산·복호화. 한 라운드 ~5초 (key gen 등 포함).

Phase 2 (이 섹션) — 같은 흐름의 평문 시뮬레이션. HE 의 효과는 Phase 1 이 보여줬으니, 이제 라운드 반복 수렴만 보는 단계. 한 라운드 ~10ms.

핵심 통찰: HE 의 동형성으로 평문 합산 결과 = HE 복호화 결과 (Phase 1 검증). 따라서 Phase 2 의 평문 시뮬도 production 의 HE 결과와 같음.

data 소스: reasons 기반 (train.py 와 동일). 결정 이력의 noise (NRP 등) 영향은 노이즈 fix commit 이후 가중치 0 으로 차단됨.

대기 중

Platt Calibration — 신뢰도 숫자를 진짜 정답률에 맞추기

분류기가 "0.95 신뢰도" 라고 해도 실제 정답률은 0.7 일 수 있습니다. Platt scaling 은 결정 이력에서 학습한 작은 보정 함수로 화면에 표시되는 신뢰도가 진짜 의미 있게 만듭니다.

📖 초보 가이드 — Platt calibration 이론

문제: 분류기가 100건의 문서에 "C 등급일 확률 0.95" 라고 했는데, 실제로는 70건만 C 였다면 → 모델이 과신 (overconfident). 사용자가 "신뢰도 95%" 보고 자동 채택하면 30% 가 틀림 → 사고.

핵심 수식:

P(정답 | 점수 f) = σ(A · f + B) = 1 / (1 + exp(−(A·f + B)))

두 파라미터 A, B 의 역할:

  • A — 시그모이드의 가파름. 분류기 점수에 얼마나 민감한가.
  • B — 시그모이드의 가로 이동. 어느 점수에서 0.5 가 되는가.

학습 데이터 정의:

  • score = ai_confidence (분류기 출력 신뢰도)
  • label = 1 if ai_grade == user_grade else 0 (사용자가 동의했는지)

알고리즘: 위 두 파라미터를 결정 이력에서 logistic regression (gradient descent 800 iter) 으로 학습. sklearn 의존성 X — numpy 도 안 쓰고 순수 Python.

왜 PoC 에 적합한가? 파라미터 단 2개 → 적은 데이터 (~30개부터) 로도 의미 있게 학습. SPEC §2.4 (2) 가 명시적으로 권장.

HE-TEST 에서 효과:

  1. 학습 후 분류 결과 카드의 신뢰도가 실제 정답률에 맞춰 보정됨 (raw → calibrated 둘 다 표시).
  2. 갭이 큰 영역에서 신뢰도가 가장 부정확 → 보정 효과 큼.
  3. 외부 자동화 (예: 신뢰도 0.9+ 만 자동 처리) 의 안전성 ↑.

1. 학습 — 결정 이력에서 (A, B) 추출

현재 SQLite 의 decisions 테이블을 읽어 (score, label) 쌍을 만들고 logistic regression 학습. 5건 이상 필요.

대기 중

2. 보정 곡선 — 원본 점수 vs 보정된 확률

학습된 σ(A·x + B) 함수의 모양. 직선(=identity, 보정 X) 과 곡선의 차이가 보정 강도.

학습 후 표시

3. 임의 점수 보정 테스트

슬라이더로 원본 점수 (raw) 입력 → 보정된 확률 (calibrated) 실시간 확인.

0.50
raw · calibrated

Drift Detection — 분류 패턴 변화 감지

시간이 지나면서 사용자가 AI 와 다르게 매기는 패턴이 변할 수 있습니다 (drift). 방치하면 분류기 정확도가 점점 떨어지지만 알아채기 어려움. Drift Detection 은 자동으로 변화를 감지·알림합니다.

📖 초보 가이드 — Drift 가 뭔가요?

상황: 처음 1개월 — AI 가 "이메일 = S 민감" 으로 분류, 사용자도 동의 (정확도 90%). 그런데 3개월 후 — 회사 정책이 변해서 "이메일 = O 일반" 으로 정정해야 함. 사용자는 매번 정정. AI 는 모름. 학습이 자동 적용되기 전까지 정확도가 계속 떨어짐.

Drift 의 정의 (ML 용어):

  • Concept drift — "정답의 의미가 변함" (위 시나리오)
  • Data drift — "입력 데이터 분포가 변함" (새 문서 유형 등장)
  • User drift — "사용자 판단 기준이 변함" (위 두 가지의 결합)

본 모듈이 보는 3 지표:

  1. 정확도 drift — AI=User 비율의 변화 (최근 N건 vs 이전 N건)
  2. 평균 갭 drift — |AI−User| 평균 변화 (커지면 분류기가 더 자주 어긋남)
  3. Entity 분포 drift — 어떤 PII 가 자주 나오는지 비율 변화 (PSI 비슷한 점수)

알고리즘: 결정 이력을 시간순 정렬 → 최근 N건 (window A) vs 이전 N건 (window B) 통계 비교 → 임계값 초과 시 알림.

임계값 (기본): 정확도 −15%p 이상 하락 → alert, 평균 갭 +0.3 이상 증가 → warn, entity 분포 변화 PSI ≥ 0.1 → info

SPEC 출처: §2.4 갭 활용 4가지 중 (4) User profile drift detection — "특정 사용자의 갭이 커지면 → 정책 변경/조직 변경 신호로 알림".

최근 N건 vs 이전 N건 비교. 데이터 부족 시 자동으로 줄임 (total/2 까지).
알림 발생 기준. 더 민감하게 하려면 낮게.
대기 중

런타임 설정

변경 시 즉시 적용 + settings.json 영속. 프로세스 재시작 후에도 유지.

로딩 중…

🇰🇷 KoELECTRA-NER 모델

spaCy 한국어 NER 의 오탐을 대체하는 fine-tuned 모델. 학습/이력 탭의 신경망 로드와 별개로 단독 로드 가능.

상태 로딩 중…

설정 파일 위치

settings.json — 본 페이지에서 편집
extra_grade_keywords.json — 룰 페이지에서 추가 키워드
custom_patterns.yaml — 룰 페이지에서 정규식/Deny-list
neural_head.json — 학습/이력 탭에서 신경망 head 학습 시 자동 갱신
decisions.db — 사용자 결정 + 학습 이력 + 모델 버전 (SQLite)
logs/app.log — rotating 로그 (1MB × 3 backup)