๐Ÿ“– HE-TEST ๋ฌธ์„œ

โ† ๋ฐ๋ชจ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

๋ชฉ์ฐจ

  1. ๋™ํ˜•์•”ํ˜ธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€
  2. SEAL ์˜ ๋‘ ์Šคํ‚ด: BFV vs CKKS
  3. ํ‚ค 4์ข… โ€” ์—ญํ• ๊ณผ ๋ณดํ˜ธ ๋ ˆ๋ฒจ
  4. ํ‚ค ์ƒ์„ฑยท๋ฐฐํฌ ํ๋ฆ„
  5. ๋™ํ˜•์—ฐ์‚ฐ ์ข…๋ฅ˜์™€ ๊ณฑ์…ˆ ๊นŠ์ด
  6. ๋…ธ์ด์ฆˆ ์˜ˆ์‚ฐ (Noise Budget)
  7. ํŒจํ„ด ๋งค์นญ ํŠธ๋ฆญ โ€” ๋‹คํ•ญ์‹ zero-test
  8. ํ‚ค์›Œ๋“œ/์™€์ผ๋“œ์นด๋“œ ๊ฒ€์ƒ‰ โ€” ํ† ํฐ ๋‹จ์œ„ HE ๋งค์นญ
  9. ๊ฐ€๋ช…ํ™”/์ต๋ช…ํ™” ํ”„๋ ˆ์ž„์›Œํฌ โ€” KRยทJPยทUSยทEU + DPV
  10. ๋ณธ ๋ฐ๋ชจ์˜ ํ”„๋ผ์ด๋ฒ„์‹œ ๋ชจ๋ธ
  11. ์‹ค์ œ ์šด์˜ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ
  12. ์ฐธ๊ณ  ์ž๋ฃŒ

1. ๋™ํ˜•์•”ํ˜ธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€

Homomorphic Encryption (HE) ์€ ์•”ํ˜ธ๋ฌธ ์ƒํƒœ์—์„œ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ์•”ํ˜ธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์•”ํ˜ธ๋Š” Dec(Enc(a) + Enc(b)) ์™€ ๊ฐ™์€ ํ•ฉ์‚ฐ์„ ์‹œ๋„ํ•˜๋ฉด ์˜๋ฏธ ์—†๋Š” ๋น„ํŠธ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ, HE ์—์„œ๋Š” ์ •์˜๋œ ์—ฐ์‚ฐ ์ง‘ํ•ฉ(+, ร—, โ€ฆ) ์•ˆ์—์„œ Dec(Enc(a) โŠ• Enc(b)) = a + b ๊ฐ€ ์„ฑ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ฅ˜์ง€์› ์—ฐ์‚ฐ๋Œ€ํ‘œ
PHE (Partially HE)ํ•œ ์ข…๋ฅ˜๋งŒ (์˜ˆ: + ๋งŒ, ๋˜๋Š” ร— ๋งŒ)Paillier(+), RSA(ร—)
SHE / Leveled HE+ ์™€ ร— ๋ชจ๋‘, ์œ ํ•œํ•œ ๊นŠ์ด๊นŒ์ง€SEAL BFV/CKKS
FHE๋ฌด์ œํ•œ ๊นŠ์ด (bootstrapping ์œผ๋กœ ๋…ธ์ด์ฆˆ ์žฌ์ •๋ฆฌ)SEAL(๋ฏธ์‚ฌ์šฉ), HElib, OpenFHE

๋ณธ ๋ฐ๋ชจ๋Š” SEAL ์˜ leveled HE๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค โ€” bootstrapping ์—†์ด ๋ฏธ๋ฆฌ ์ •ํ•œ ๊นŠ์ด๊นŒ์ง€๋งŒ ์•ˆ์ „.

2. SEAL ์˜ ๋‘ ์Šคํ‚ด: BFV vs CKKS

BFVCKKS
๋ฐ์ดํ„ฐ ํƒ€์ž…์ •์ˆ˜ ๋ฒกํ„ฐ์‹ค์ˆ˜/๋ณต์†Œ์ˆ˜ ๋ฒกํ„ฐ
์ •ํ™•์„ฑ์ •ํ™• (exact)๊ทผ์‚ฌ (approximate)
๋Œ€ํ‘œ ์‚ฌ์šฉ์ฒ˜๋น„๊ตยท๊ฒ€์ƒ‰ยท์นด์šดํŠธยท์ฒดํฌ์„ฌML ์ถ”๋ก ยทํ†ต๊ณ„ยทํ‰๊ท 
ํŠน์ˆ˜ ์—ฐ์‚ฐโ€”rescaleToNext (์Šค์ผ€์ผ ์ •๋ฆฌ)
plain modulusํ•„์š” (์ •์ˆ˜ ๋ชจ๋“ˆ๋Ÿฌ)์—†์Œ
์ด ๋ฐ๋ชจ์—์„œRRN ๊ฒ€์ƒ‰ยทSEAL ์ •์ˆ˜ ์—ฐ์‚ฐSEAL ๋ถ€๋™์†Œ์ˆ˜ ์—ฐ์‚ฐ

3. ํ‚ค 4์ข… โ€” ์—ญํ• ๊ณผ ๋ณดํ˜ธ ๋ ˆ๋ฒจ

๋ณธ ๋ฐ๋ชจ์˜ SEAL ์ปจํ…์ŠคํŠธ๋Š” ๋‹ค์Œ 4๊ฐ€์ง€ ์ง๋ ฌํ™” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ ๋ˆ„๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ  ์–ด๋””๊นŒ์ง€ ๋…ธ์ถœ ๊ฐ€๋Šฅํ•œ์ง€ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด๋ณดํ˜ธ ๋ ˆ๋ฒจ์—ญํ• ๋…ธ์ถœ ์‹œ ์œ„ํ—˜
Encryption Parameters PUBLIC ์Šคํ‚ด/poly_modulus_degree/coefficientยทplain modulus ๋“ฑ ์ปจํ…์ŠคํŠธ ์ •์˜๊ฐ’. ๋‹ค๋ฅธ PC ๊ฐ€ ๊ฐ™์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”ํƒ€ ์ •๋ณด. ์—†์Œ โ€” ํ‰๋ฌธ๋„ ํ‚ค๋„ ๋“ค์–ด์žˆ์ง€ ์•Š์Œ
Public Key PUBLIC ํ‰๋ฌธ โ†’ ์•”ํ˜ธ๋ฌธ. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ๋ฐฐํฌ ๊ฐ€๋Šฅ. ์—†์Œ โ€” ๊ณต๊ฐœํ‚ค๋งŒ์œผ๋กœ ํ‰๋ฌธ ๋ณต์› ๋ถˆ๊ฐ€
Secret Key SECRET ์•”ํ˜ธ๋ฌธ โ†’ ํ‰๋ฌธ. ๊ฐ™์€ ์ปจํ…์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“  ์•”ํ˜ธ๋ฌธ์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ํ‚ค. ์น˜๋ช…์  โ€” ๋…ธ์ถœ ์‹œ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ‰๋ฌธ ๋…ธ์ถœ
Relin Keys EVALUATION ๊ณฑ์…ˆ ์งํ›„ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ ์•”ํ˜ธ๋ฌธ(degree-3 polynomial)์„ ํ‘œ์ค€ ๊ธธ์ด(degree-2)๋กœ ์ค„์ด๋Š” key-switching ํ‚ค. ๋™ํ˜•์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๋ณด์œ . ์ด๋ก ์ƒ ๋งค์šฐ ์ œํ•œ์ ์ธ ๋ถ€๋ถ„ ๋…ธ์ถœ ๊ฐ€๋Šฅ โ€” ํ‰๋ฌธ ๋ณต์›์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ ๋ฌด๊ด€๊ณ„์ž์—๊ฒŒ๋Š” ๋น„๊ณต๊ฐœ ์œ ์ง€๊ฐ€ ๊ถŒ์žฅ๋จ
Galois Keys (์„ ํƒ) EVALUATION ์Šฌ๋กฏ ํšŒ์ „(rotate) ์— ํ•„์š”ํ•œ key-switching ํ‚ค. SIMD ์Šฌ๋กฏ ํ•ฉ์‚ฐยท๋‚ด์  ๋“ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ. ๋ณธ ๋ฐ๋ชจ๋Š” ๋ฏธ์‚ฌ์šฉ. Relin Keys ์™€ ๋™์ผํ•œ ์นดํ…Œ๊ณ ๋ฆฌ โ€” ํ‰๋ฌธ ๋ณต์› ๋ถˆ๊ฐ€์ง€๋งŒ ๋น„๊ณต๊ฐœ ๊ถŒ์žฅ
์‹ค์„œ๋น„์Šค ์›์น™ โ€” Secret Key ๋Š” ์ ˆ๋Œ€ ํ‰๋ฌธ์œผ๋กœ ์™ธ๋ถ€ ์ „์†กยท๋””์Šคํฌ ์ €์žฅํ•˜์ง€ ๋งˆ์„ธ์š”. HSM, ํ‚ค๋งค๋‹ˆ์ €(KMS), TPM ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋””๋ฐ”์ด์Šค ์‹œํ์–ด ์—”ํด๋ ˆ์ด๋ธŒ์— ๋ณด๊ด€ํ•˜๊ณ  ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณดํ˜ธ ๋ ˆ๋ฒจ ์š”์•ฝ

4. ํ‚ค ์ƒ์„ฑยท๋ฐฐํฌ ํ๋ฆ„

โ”Œโ”€โ”€ EncryptionParameters โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  scheme, poly_modulus_degree,    โ”‚
โ”‚  coeff_modulus, plain_modulus    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ†“
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚     Context    โ”‚  ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ (parametersSet())
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ†“
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  KeyGenerator  โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ†“             โ†“              โ†“              โ†“
publicKey   secretKey      relinKeys    galoisKeys (์„ ํƒ)
 [PUBLIC]    [SECRET]      [EVAL]       [EVAL]
   โ†“             โ†“              โ†“
 ์•”ํ˜ธํ™”     ๋ณตํ˜ธํ™”         ์„œ๋ฒ„ ๋™ํ˜•์—ฐ์‚ฐ ํ›„
                          ct ํฌ๊ธฐ ์ •์ƒํ™”

์—ญํ• ๋ณ„ ๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ๊ฐ€์ง€๋‚˜

EncParmspublicKeysecretKeyrelinKeys
๋ฐ์ดํ„ฐ ์†Œ์œ ์ž(ํด๋ผ์ด์–ธํŠธ)โœ“โœ“โœ“โœ“ (์ƒ์„ฑยท๋ฐฐํฌ)
ํ‰๊ฐ€์ž(์„œ๋ฒ„)โœ“โœ“โœ—โœ“ (์ˆ˜์‹ ํ•ด์„œ ์‚ฌ์šฉ)
์ œ3์ž(ํ‰๋ฌธ ๋ฐ์ดํ„ฐ ์†ก์‹ )โœ“โœ“โœ—โœ—

5. ๋™ํ˜•์—ฐ์‚ฐ ์ข…๋ฅ˜์™€ ๊ณฑ์…ˆ ๊นŠ์ด

์—ฐ์‚ฐAPI (node-seal)๊นŠ์ด ์ฆ๊ฐ€๋น„๊ณ 
๋ง์…ˆ (ct + ct)evaluator.add0๋…ธ์ด์ฆˆ ๊ฑฐ์˜ ๋ณ€ํ™” ์—†์Œ
๋ง์…ˆ (ct + plain)addPlain0โ€”
๋บ„์…ˆsub, subPlain0โ€”
๊ณฑ์…ˆ (ct ร— ct)multiply+1ct ํฌ๊ธฐ โ†‘ โ†’ relinearize ํ•„์š”
๊ณฑ์…ˆ (ct ร— plain)multiplyPlain+1relinearize ๋ถˆํ•„์š”
์ œ๊ณฑsquare+1multiply ์˜ ํŠน์ˆ˜ ์ผ€์ด์Šค
๋ถ€ํ˜ธ ๋ฐ˜์ „negate0โ€”
ํšŒ์ „(SIMD)rotateRows0galoisKeys ํ•„์š”
์Šค์ผ€์ผ ์ •๋ฆฌ(CKKS ์ „์šฉ)rescaleToNext๋ ˆ๋ฒจ 1โ†“๊ณฑ์…ˆ ํ›„ ํ˜ธ์ถœ

6. ๋…ธ์ด์ฆˆ ์˜ˆ์‚ฐ (Noise Budget)

BFV ์˜ ๋ชจ๋“  ์•”ํ˜ธ๋ฌธ์€ ์•ฝ๊ฐ„์˜ ๋…ธ์ด์ฆˆ๋ฅผ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณฑ์…ˆ์„ ๊ฑฐ๋“ญํ• ์ˆ˜๋ก ๋…ธ์ด์ฆˆ๊ฐ€ ์ฆํญ๋˜๊ณ , budget ≤ 0 ์ด ๋˜๋ฉด ๋ณตํ˜ธํ™” ๊ฒฐ๊ณผ๊ฐ€ ์ž„์˜์˜ ์ •์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค (= ๋ฐ์ดํ„ฐ๊ฐ€ ๋ง๊ฐ€์ง, ์•„๋‹˜).

๋Œ€๋žต์˜ budget ๋ณ€ํ™”

poly_modulus_degreecoeff modulus ํ•ฉfresh ct budget๊ณฑ์…ˆ 1ํšŒ ํ›„๊ณฑ์…ˆ 2ํšŒ ํ›„
2048~54 bit~12 bit์Œ์ˆ˜ โ†’ ์‹คํŒจโ€”
4096~109 bit~50 bit~20 bit์Œ์ˆ˜ โ†’ ์‹คํŒจ
8192~218 bit~150 bit~110 bit~70-90 bit โœ“
16384~438 bit~370 bit~330 bit~290 bit

์‹ค์ œ budget ์€ plain_modulus ๋น„ํŠธ ํฌ๊ธฐ์™€ ์—ฐ์‚ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ณ€๋™ โ€” ์œ„๋Š” ๋ณธ ๋ฐ๋ชจ์˜ plain_modulus โ‰ˆ 220 ๊ฐ€์ • ์‹œ ๋Œ€๋žต๊ฐ’.

๋ณธ ๋ฐ๋ชจ RRN Pattern ๋ชจ๋“œ ๊ฐ€ ์ž๋™์œผ๋กœ poly_modulus_degree=8192 ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์ด์œ : ๋‹คํ•ญ์‹ (d-1)(d-2)(d-3)(d-4) ํ‰๊ฐ€๊ฐ€ ๊นŠ์ด 2 ๊ณฑ์…ˆ์ด๋ผ 4096 ์˜ budget ์œผ๋กœ๋Š” ๋ถ€์กฑ.

7. ํŒจํ„ด ๋งค์นญ ํŠธ๋ฆญ โ€” ๋‹คํ•ญ์‹ zero-test

HE ๋Š” ๋น„๊ต(==, <) ๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋“ฑ์น˜ ๊ฒ€์‚ฌ๋Š” ์ฐจ์˜ ์ œ๊ณฑ ๋˜๋Š” ๋‹คํ•ญ์‹ zero-test ๋กœ ํ™˜์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ํ•œ ์ง‘ํ•ฉ ๋ฉค๋ฒ„์‹ญ: x โˆˆ {aโ‚, โ€ฆ, aโ‚™}

p(x) = (x โˆ’ aโ‚)(x โˆ’ aโ‚‚) โ€ฆ (x โˆ’ aโ‚™)
   = 0   โ‡”   x โˆˆ {aโ‚, aโ‚‚, โ€ฆ, aโ‚™}

์œ„ ์‹์€ ๋‹คํ•ญ์‹ ๊ณฑ์…ˆ๋งŒ์œผ๋กœ ํ‰๊ฐ€ ๊ฐ€๋Šฅ โ†’ HE ์นœํ™”์ . RRN ์˜ ์„ฑ๋ณ„์ž๋ฆฌ(7๋ฒˆ์งธ ์ˆซ์ž) ๊ฐ€ {1,2,3,4} ์ค‘ ํ•˜๋‚˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์ •ํ™•ํžˆ ์ด ํŠธ๋ฆญ์„ ์”๋‹ˆ๋‹ค.

// ๊ฐ ํ›„๋ณด ct ์— ๋Œ€ํ•ด (depth 2)
d1 = ct โˆ’ Plain([1,1,...])
d2 = ct โˆ’ Plain([2,2,...])
d3 = ct โˆ’ Plain([3,3,...])
d4 = ct โˆ’ Plain([4,4,...])
m12 = d1 ร— d2;  relinearize(m12)
m34 = d3 ร— d4;  relinearize(m34)
p   = m12 ร— m34;  relinearize(p)
// โ†’ ์Šฌ๋กฏ 6 ์˜ ํ‰๋ฌธ ๊ฐ’์ด 0 โ‡” ์„ฑ๋ณ„์ž๋ฆฌ โˆˆ {1,2,3,4}

์™„์ „ ์ผ์น˜ ๊ฒ€์‚ฌ: x == t

diff = ct โˆ’ Plain(t)
sq   = diff ร— diff   // 0 ๋งŒ 0, ๋‹ค๋ฅธ ๊ฐ’์€ ์–‘์ˆ˜
// โ†’ ๋ชจ๋“  ์Šฌ๋กฏ์ด 0 โ‡” ์™„์ „ ์ผ์น˜

8. ํ‚ค์›Œ๋“œ/์™€์ผ๋“œ์นด๋“œ ๊ฒ€์ƒ‰ โ€” ํ† ํฐ ๋‹จ์œ„ HE ๋งค์นญ

ํƒญ 4 ์˜ "Keyword Search (HE)" ๋Š” ์ž„์˜์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋™ํ˜•์•”ํ˜ธ ์œ„์—์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋ฌธ์ž ๋‹จ์œ„ ๋น„๊ต๋ฅผ SIMD ์Šฌ๋กฏ์— ํŽผ์นœ ํ›„ ๋งˆ์Šคํฌ๋ฅผ ๊ณฑํ•ด ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ฒƒ:

ํŒจํ„ด P  = "p?ssword"  (? = '*'  ์™€์ผ๋“œ์นด๋“œ)
target = ['p', 0, 's', 's', 'w', 'o', 'r', 'd']
mask   = [ 1, 0,  1,   1,   1,   1,   1,   1 ]   (์™€์ผ๋“œ์นด๋“œ ์ž๋ฆฌ๋งŒ 0)

token  = "password" (codepoint vector)
ct     = Enc(token)

์„œ๋ฒ„:
  diff = ct โˆ’ Plain(target)            // ์Šฌ๋กฏ๋ณ„ ์ฐจ์ด
  sq   = diff ร— diff                   // ์Œ์ˆ˜ ์˜ํ–ฅ ์ œ๊ฑฐ (depth 1)
  out  = sq ร— Plain(mask)              // ์™€์ผ๋“œ์นด๋“œ ์ž๋ฆฌ๋Š” 0 ์œ ์ง€ (depth 2)

ํด๋ผ์ด์–ธํŠธ:
  out ๋ณตํ˜ธํ™” โ†’ ์Šฌ๋กฏ 0..L-1 ํ•ฉ = 0  โ‡’  MATCH

์™œ ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ํ† ํฐ๋งŒ ํ›„๋ณด๊ฐ€ ๋˜๋Š”๊ฐ€

์Šฌ๋กฏ ๋‹จ์œ„ SIMD ๋น„๊ต๋Š” ๊ฐ™์€ ๊ธธ์ด์˜ ๋ฒกํ„ฐ๋ผ๋ฆฌ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ณต๋ฐฑ ๋‹จ์œ„๋กœ ํ† ํฐํ™”ํ•œ ๋’ค ํŒจํ„ด ๊ธธ์ด์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ํ† ํฐ๋งŒ ๊ณจ๋ผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. '*' ๋Š” ํ•œ ๊ธ€์ž ์™€์ผ๋“œ์นด๋“œ๋ผ๋Š” ์ ์— ์ฃผ์˜ โ€” pa*sword ๋Š” 8์ž ํ† ํฐ๋งŒ, pa**word ๋Š” 8์ž ํ† ํฐ ์ค‘ ์ž๋ฆฌ 2,3 ์ด ์ž„์˜์ธ ๊ฒƒ๋งŒ.

์ผ๋ฐ˜ ์ •๊ทœ์‹์ด HE ์œ„์—์„œ ๊ณค๋ž€ํ•œ ์ด์œ 

์ž๋ฆฟ์ˆ˜๋ณ„ char class (์˜ˆ: \d = [0-9]) ๋Š” ๊ทธ ์ž๋ฆฌ์˜ ์ฝ”๋“œํฌ์ธํŠธ c ๊ฐ€ ์ง‘ํ•ฉ ์•ˆ์— ์žˆ๋Š”์ง€๋ฅผ ๋‹คํ•ญ์‹ zero-test๋กœ ํ’€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ž๋ฆฌ๋งˆ๋‹ค (c โˆ’ vโ‚)(c โˆ’ vโ‚‚)โ€ฆ(c โˆ’ vโ‚™) ๊ณฑ์…ˆ ํŠธ๋ฆฌ๋ฅผ ํ‰๊ฐ€ํ•ด์•ผ ํ•˜๊ณ , ์ž๋ฆฌ๋งˆ๋‹ค ๋‹คํ•ญ์‹ ์ฐจ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ SIMD ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ

๋ณธ ๋ฐ๋ชจ๋Š” ์™€์ผ๋“œ์นด๋“œ(*) ๋งŒ ์ง€์›ํ•ด ๊นŠ์ด 2 ํšŒ๋กœ(8192) ์—์„œ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด ๊ฐ™์€ ํŒจํ„ด ๋งค์นญ ํŠธ๋ฆญ์„ ์—ฌ๋Ÿฌ ์ž๋ฆฌ์— ์ผ๋ฐ˜ํ™”ํ•ด char class ๊นŒ์ง€ ํ™•์žฅ ๊ฐ€๋Šฅ (์œ„ ํ•œ๊ณ„๋ฅผ ๊ฐ์ˆ˜ํ•˜๋ฉด).

9. ๊ฐ€๋ช…ํ™”/์ต๋ช…ํ™” ํ”„๋ ˆ์ž„์›Œํฌ โ€” KRยทJPยทUSยทEU

ํƒญ 5 ์˜ "๊ฐ€๋ช…ํ™”/์ต๋ช…ํ™”" ๋Š” PII Scanner ์˜ ๊ฒ€์ถœ ๊ฒฐ๊ณผ๋ฅผ ISO/IEC 20889(๊ธฐ๋ฒ• ๋ถ„๋ฅ˜) ์— ๋”ฐ๋ผ ๋ณ€ํ™˜ํ•˜๊ณ  ISO/IEC 27559(์ ˆ์ฐจ ํ”„๋ ˆ์ž„์›Œํฌ) ์˜ ํ๋ฆ„์— ๋งž์ถฐ 4๊ฐœ ๊ด€ํ• ์˜ ๋ฒ•๋ น์— ๋Œ€ํ•œ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์šฉ์–ด๋Š” W3C DPV 2.0 ์˜ dpv-pd:* compact IRI ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ ํ๋ฆ„ (์‹œ๊ฐํ™”)

STEP 1์ž…๋ ฅํŒŒ์ผ ยท ํ…์ŠคํŠธ.txt .pdf .docx .hwp STEP 2PII ๊ฒ€์ถœ์ •๊ทœ์‹ ยท ํ‚ค์›Œ๋“œ+ NER STEP 3DPV ๋งคํ•‘W3C DPV 2.0dpv-pd: ์นดํ…Œ๊ณ ๋ฆฌ STEP 4๊ด€ํ•  ๋ถ„๋ฅ˜direct ยท quasisensitive ยท secret STEP 5๊ธฐ๋ฒ• ์„ ํƒISO/IEC 20889ยง7 โ€” ยง8 STEP 6๋ณ€ํ™˜ ์ ์šฉtokenize ยท maskgeneralize ยท suppress STEP 7์ค€์ˆ˜ ํ‰๊ฐ€ISO/IEC 27559KR ยท JP ยท US ยท EU VERDICT & RATIONALEcompliant ยท partial ยท insufficient + ๊ทผ๊ฑฐ + ์ž”์—ฌ ์š”๊ตฌ์‚ฌํ•ญ (๊ด€ํ• ๋ณ„ ์นด๋“œ)

์ฒ˜๋ฆฌ 7๋‹จ๊ณ„ (ISO 27559 ์ •๋ ฌ)

  1. ์ž…๋ ฅ โ€” ํŒŒ์ผ(.txt .csv .json .pdf .docx .hwp) ๋˜๋Š” ์ธ๋ผ์ธ ํ…์ŠคํŠธ
  2. PII ๊ฒ€์ถœ โ€” Presidio (๋˜๋Š” lite) ์˜ ์ •๊ทœ์‹ยทํ‚ค์›Œ๋“œยทNER ๊ฒฐํ•ฉ
  3. DPV ๋งคํ•‘ โ€” ๊ฐ entity_type โ†’ dpv-pd:NationalIdentificationNumber ๋“ฑ
  4. ๊ด€ํ• ๋ณ„ ๋ถ„๋ฅ˜ โ€” direct identifier / quasi-identifier / sensitive / secret
  5. ๊ธฐ๋ฒ• ์„ ํƒ โ€” ISO 20889 ยง7~ยง8 ์นดํƒˆ๋กœ๊ทธ์—์„œ entity ๋ณ„ ๊ธฐ๋ฒ• ์ž๋™ ๋งคํ•‘
  6. ๋ณ€ํ™˜ ์ ์šฉ โ€” ์œ„์น˜ ์—ญ์ˆœ์œผ๋กœ in-place ์น˜ํ™˜ (์ธ๋ฑ์Šค ์œ ์ง€)
  7. ์ค€์ˆ˜ ํ‰๊ฐ€ โ€” ๊ด€ํ• ๋ณ„ verdict (compliant / partial / insufficient) + ๊ทผ๊ฑฐ + ์ž”์—ฌ ์š”๊ตฌ์‚ฌํ•ญ

๊ด€ํ• ๋ณ„ ํ•ต์‹ฌ ๊ธฐ์ค€ (์š”์ง€)

๊ด€ํ• ๋ฒ•๋ น / ํ‘œ์ค€๊ฐ€๋ช…ํ™”ยท์ต๋ช…ํ™” ์ •์˜์˜ ํ•ต์‹ฌ
๐Ÿ‡ฐ๐Ÿ‡ท KR ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ๋ฒ• ยง2ยทยง28-2~7 + PIPC ๊ฐ€๋ช…์ •๋ณด ์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ๋ผ์ธ ๊ฐ€๋ช…: ์ถ”๊ฐ€์ •๋ณด ์—†์ด๋Š” ์‹๋ณ„ ๋ถˆ๊ฐ€ (๋ถ„๋ฆฌ ๋ณด๊ด€ ์˜๋ฌด). ์ต๋ช…: ์–ด๋–ค ์ถ”๊ฐ€์ •๋ณด๋กœ๋„ ๋ณต์› ๋ถˆ๊ฐ€. ์ ์ •์„ฑ ๊ฒ€ํ† ์œ„์›ํšŒ ์ ˆ์ฐจ
๐Ÿ‡ฏ๐Ÿ‡ต JP ๅ€‹ไบบๆƒ…ๅ ฑไฟ่ญทๆณ• (APPI) ยง16-2ยทยง35-2ยทยง43 + PPC ์ž‘์„ฑ๊ธฐ์ค€ ไปฎๅๅŠ ๅทฅ: ์ถ”๊ฐ€์ •๋ณด๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅ / ์•ˆ์ „๊ด€๋ฆฌ์กฐ์น˜. ๅŒฟๅๅŠ ๅทฅ: ๅพฉๅ…ƒไธๅฏ่ƒฝ + ์ž‘์„ฑ๋ฐฉ๋ฒ• ๋“ฑ ๊ณตํ‘œ
๐Ÿ‡บ๐Ÿ‡ธ US HIPAA Safe Harbor (45 CFR ยง164.514(b)(2)) ยท CCPA/CPRA ยท NIST SP 800-188 HIPAA SH: 18๊ฐ€์ง€ ์‹๋ณ„์ž ๋ชจ๋‘ ์ œ๊ฑฐ/์ผ๋ฐ˜ํ™”. CCPA deidentified: cannot reasonably identify + ํ†ต์ œ. Expert Determination ํŠธ๋ž™๋„ ๊ฐ€๋Šฅ
๐Ÿ‡ช๐Ÿ‡บ EU GDPR Art 4(5), Recital 26 ยท EDPB Guidelines 01/2025 ยท WP29 Op 05/2014 Pseudonymisation: ์ถ”๊ฐ€์ •๋ณด ๋ถ„๋ฆฌ + ๊ธฐ์ˆ ยท์กฐ์ง์  ์กฐ์น˜. Anonymisation: singling-out / linkability / inference 3๊ฐœ ์œ„ํ—˜ ๋ชจ๋‘ ์ œ๊ฑฐ

๊ตฌํ˜„๋œ ๊ธฐ๋ฒ• (ISO 20889 ์ธ์šฉ)

๊ธฐ๋ฒ• ID๋ถ„๋ฅ˜์ ์šฉ entity ์˜ˆ
tokenize_randomยง8.4 Tokenization (random)KR_RRN, US_SSN, KR_PASSPORT, INTERNAL_PROJECT
pseudonym_consistentยง8.4 Pseudonymisation (HMAC-BLAKE2b)VIP_PERSON (์ด๋ฆ„)
mask_partialยง7.5 Masking์ „ํ™”ยทํœด๋Œ€ํฐยทIBANยท์‚ฌ์—…์ž๋ฒˆํ˜ธ
mask_panPCI-DSS ์ •ํ•ฉ ๋งˆ์Šคํ‚นCREDIT_CARD
hash_local_keep_domainยง8.4 Cryptographic (HMAC)EMAIL_ADDRESS
generalize_to_cityยง7.2 GeneralizationKR_ADDRESS
generalize_urlยง7.2 GeneralizationURL (ํ˜ธ์ŠคํŠธ๋งŒ ์œ ์ง€)
ip_truncateยง7.2 Generalization (/24)IP_ADDRESS
suppressยง7.4 SuppressionAWS_ACCESS_KEY, GENERIC_API_KEY

์ต๋ช…ํ™” ๋ชจ๋“œ์˜ ๊ฐ•ํ™”์ 

ํƒญ UI ์—์„œ "์ต๋ช…ํ™”" ๋ฅผ ์„ ํƒํ•˜๋ฉด pseudonym_consistent ์™€ tokenize_random ์—์„œ ๋™์ผ์„ฑ ๋งคํ•‘(๊ฐ™์€ ์ž…๋ ฅ์— ๊ฐ™์€ ํ† ํฐ) ์„ ๋•๋‹ˆ๋‹ค. ๊ฐ™์€ ์‚ฌ๋žŒ์ด ๋‘ ๋ฒˆ ๋“ฑ์žฅํ•ด๋„ ๋‹ค๋ฅธ ํ† ํฐ์„ ๋ถ€์—ฌ โ€” ์—ฐ๊ฒฐ์„ฑ(linkability) ์ฐจ๋‹จ. ๋‹จ ์ง„์ •ํ•œ ์ต๋ช…ํ™”๋Š” ํ†ต๊ณ„์  ๊ฒ€์ฆ(k-์ต๋ช…์„ฑยทl-๋‹ค์–‘์„ฑยทt-๊ทผ์ ‘์„ฑ) ๊ณผ ๋งคํ•‘ ํ…Œ์ด๋ธ” ํ๊ธฐ ๊ฐ€ ํ•จ๊ป˜ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ํŒ์ • ์นด๋“œ์˜ "์ž”์—ฌ ์š”๊ตฌ์‚ฌํ•ญ" ์— ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

์šด์˜ ํ™˜๊ฒฝ ์ „ํ™˜ ์‹œ ํ•„์ˆ˜ ์ถ”๊ฐ€ ์‚ฌํ•ญ

10. ๋ณธ ๋ฐ๋ชจ์˜ ํ”„๋ผ์ด๋ฒ„์‹œ ๋ชจ๋ธ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ CLIENT (data owner) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๋ณด์œ : EncParms, publicKey, secretKey,       โ”‚
โ”‚       relinKeys, ํ‰๋ฌธ ๋ฐ์ดํ„ฐ                 โ”‚
โ”‚                                            โ”‚
โ”‚ 1. ๋ฐ์ดํ„ฐ โ†’ publicKey ๋กœ ์•”ํ˜ธํ™”              โ”‚
โ”‚ 2. ๊ฒฐ๊ณผ ct ๋ฅผ ๋น„๋ฐ€ํ‚ค๋กœ ๋ณตํ˜ธํ™”                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚ ct ๋งŒ ์ „์†ก       โ”‚ result ct ๋งŒ ์ˆ˜์‹ 
             โ†“                โ†‘
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ SERVER (evaluator)                         โ”‚
โ”‚ ๋ณด์œ : EncParms, publicKey, relinKeys        โ”‚
โ”‚       (secretKey ์—†์Œ โ†’ ํ‰๋ฌธ ๋ณต์› ์ ˆ๋Œ€ ๋ถˆ๊ฐ€) โ”‚
โ”‚                                            โ”‚
โ”‚ ct ์— ๋Œ€ํ•ด add/multiply/square ๋“ฑ           โ”‚
โ”‚ ๋™ํ˜•์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

11. ์‹ค์ œ ์šด์˜ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

12. ์ฐธ๊ณ  ์ž๋ฃŒ