פרויקט: zer0pii.ai - Enterprise AI Security Gateway & DLP
גרסה: 1.0.0-CATALOG
סיווג: מפרט טכני ומדריך הגדרות אכיפה (Detection Specification & Configuration Reference)
יעד: מהנדסי אבטחת מידע, ארכיטקטי DLP, צוותי SOC ומהנדסי פיתוח Gateway
1. ארכיטקטורת מנוע הזיהוי התלת-שכבתי (Three-Tier Detection Pipeline)
שער zer0pii.ai אינו מסתמך על מודל בודד או על רג'קסים עיוורים. כל פיסת טקסט מעובדת דרך שלוש שכבות סריקה מקבילות וטוריות המותאמות לתקציב שיהוי כולל של פחות מ-15ms:
[ Incoming Text Stream / Prompt ]
│
▼
┌─────────────────────────────────────────────────┐
│ Layer 0: AST & Code Syntax Boundary Protection │
│ (Exempts variables, imports, schemas, backticks)│
└────────────────────────┬────────────────────────┘
│
┌────────────────────┴────────────────────┐
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ Layer 1: Deterministic │ │ Layer 2: Structural & │
│ Algorithmic Engine │ │ High-Entropy Scanner │
│ • Regex + Checksums │ │ • Shannon Entropy (>4.3) │
│ • Luhn, ISO stdnum │ │ • Connection Strings URIs │
│ • Runtime: 0.2ms - 1.2ms │ │ • Cloud Provider Patterns │
│ • Confidence: 0.95 - 1.00 │ │ • Runtime: 0.3ms - 0.8ms │
└─────────────┬─────────────┘ └─────────────┬─────────────┘
│ │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Layer 3: Semantic NER Engine (GLiNER ONNX FP16) │
│ • Multilingual: Hebrew, English, Arabic, EU │
│ • Contextual: Names, Locations, Organizations │
│ • Runtime Budget: 8.0ms - 12.0ms (Timeout: 20ms)│
│ • Confidence: 0.60 - 0.95 │
└─────────────────────────────────────────────────┘
אלגוריתם חישוב מדד הסיכון (Composite Risk Index)
כל מופע שזוהה מקבל ניקוד המשקלל את רמת הוודאות של המנוע עם חומרת הנזק לארגון:
$$\text{Risk Score} = \text{Confidence} \times \text{Severity}$$
- Confidence (0.00 - 1.00): רמת הוודאות האלגוריתמית (1.00 = Checksum מתמטי מאומת; 0.70 = זיהוי שמי מבוסס הקשר מודל).
- Severity (1 - 100): מוגדרת מראש בספר החוקים (סודות תשתית = 100, מספרי זהות = 90, שמות פרטיים = 30).
- מדיניות אכיפה:
- Risk Score >= 80: מיסוך קשיח או חסימה אקטיבית מיידית.
- 50 <= Risk Score < 80: מיסוך שקט ורישום א-סינכרוני ל-Review Queue בדשבורד.
- Risk Score < 50: מעבר ללא שינוי (Pass-Through) למניעת שבירת פרומפטים.
2. מזהים ממשלתיים ואזרחיים (National & Government IDs)
זיהוי מזהים ממשלתיים נשען תמיד על אימות מתמטי (Checksum Validation) באמצעות מודולי python-stdnum. אם מספר מתאים לתבנית אך נכשל בספרת הביקורת, הוא מסווג כסתם רצף ספרות ואינו ממוסך.
| קוד ישות (Entity Code) | מדינה / אזור | שיטת זיהוי ואימות אלגוריתמי | רמת חומרה (Severity) | פורמט מיסוך (Masking Token) |
|---|---|---|---|---|
IL_NATIONAL_ID |
ישראל | Luhn Checksum מותאם: 9 ספרות, ריפוד באפסים משמאל, שקלול כפולות 1 ו-2 ומודולו 10. | 90 | [IL_ID_01_{nonce}] |
US_SSN |
ארה"ב | Regex + מבנה חוקי של SSA: תבנית \d{3}-\d{2}-\d{4}. שלילת אזורים לא קיימים (000, 666, 900-999), קבוצות 00, וסדרות 0000. |
95 | [US_SSN_01_{nonce}] |
UK_NINO |
בריטניה | מבנה תקני HMRC: 2 אותיות (ללא D, F, I, Q, U, V; אות שנייה ללא O), 6 ספרות, אות סופית (A-D). | 90 | [UK_NINO_01_{nonce}] |
EU_PASSPORT |
בינלאומי | תקן ICAO Doc 9303 (MRZ): סריקת תבניות של 9 תווים אלפא-נומריים בשילוב חישוב ספרת ביקורת במשקולות 7-3-1. | 95 | [PASSPORT_01_{nonce}] |
DE_STEUER_ID |
גרמניה | 11 ספרות: אימות ספרת ביקורת לפי אלגוריתם ISO/IEC 7064 Mod 11, 10. | 85 | [DE_STEUER_01_{nonce}] |
FR_NIR_INSEE |
צרפת | מספר ביטוח לאומי צרפתי: 13 ספרות + 2 ספרות מפתח (Mod 97 Checksum). | 85 | [FR_INSEE_01_{nonce}] |
ES_DNI_NIE |
ספרד | DNI/NIE ספרדי: 8 ספרות ואות ביקורת הנגזרת מחישוב מודולו 23 מול טבלת אותיות רשמית. | 85 | [ES_DNI_01_{nonce}] |
IT_CODICE_FISCALE |
איטליה | 16 תווים אלפא-נומריים: אימות מבנה קונסוננטים לשם, תאריך לידה, קוד עירייה ואות ביקורת ייעודית. | 85 | [IT_CF_01_{nonce}] |
3. נתונים פיננסיים, כרטיסי אשראי ובנקאות (Financial & Payments)
| קוד ישות | תיאור | אלגוריתם זיהוי ואימות מתמטי | חומרה | אסטרטגיית החלפה |
|---|---|---|---|---|
CREDIT_CARD |
כרטיסי אשראי בינלאומיים (Visa, Mastercard, Amex, Diners, Discover) | 1. BIN/IIN Routing Check: זיהוי תחילית כרטיס תקינה. 2. Luhn Algorithm: הכפלת ספרות לסירוגין ב-2 וחישוב מודולו 10. 3. אורך תקין (13-19 ספרות). | 100 | מוחלף בטוקן מחרוזתי [CC_01_{nonce}] או במספר כרטיס סינתטי תקין העובר Luhn (בפלט מובנה של JSON). |
IBAN_CODE |
מספר חשבון בנק בינלאומי (ISO 13616) | 1. קידומת מדינה בת 2 אותיות. 2. העברת 4 תווים ראשונים לסוף המחרוזת, המרת אותיות למספרים (A=10 ... Z=35). 3. MOD 97-10 Checksum (ISO 7064): השארית חייבת להיות בדיוק 1. | 90 | [IBAN_01_{nonce}] |
SWIFT_BIC |
קוד זיהוי בנקאי בינלאומי (ISO 9362) | תבנית בת 8 או 11 תווים: 4 אותיות בנק, 2 אותיות מדינה (ISO 3166-1), 2 תווים למיקום, ו-3 תווים אופציונליים לסניף. | 70 | [SWIFT_01_{nonce}] |
IL_BANK_ACCOUNT |
חשבונות בנק בישראל | זיהוי מבנה משולב של קוד בנק (2 ספרות), קוד סניף (3 ספרות) ומספר חשבון (6-9 ספרות) בהתאם למבני החשבון המוכרים של בנק ישראל. | 85 | [IL_BANK_01_{nonce}] |
VAT_ID |
מספרי עוסק מורשה / ח.פ. / מע"מ אירופי | • ישראל: 9 ספרות עם בדיקת ספרת ביקורת זהה לת"ז. • אירופה (VIES): תבניות ייעודיות לכל מדינה עם בדיקות מודולו מקומיות. | 75 | [VAT_01_{nonce}] |
4. תשתיות ענן, מפתחות סודיים וקובצי תצורה (Secrets & Credentials)
קטגוריה זו מוגדרת ברמת חומרה 100. ברירת המחדל בשער היא חסימה מוחלטת של הבקשה (HTTP 403) או מיסוך ללא תלות בספים סטטיסטיים.
4.1 מפתחות ספקים מובנים (High-Confidence Heuristics)
| קוד ישות | ספק / תשתית | תבנית זיהוי (Regex / Prefix) | בדיקה משלימה |
|---|---|---|---|
AWS_ACCESS_KEY |
Amazon Web Services | קידומות AKIA / A3T[A-Z0-9] / ASIA + 16 תווים |
סמיכות ל-Secret Key. |
AWS_SECRET_KEY |
Amazon Web Services | מחרוזת של 40 תווים Base64 בסמיכות ל-Access Key | חישוב Shannon Entropy >= 4.5. |
OPENAI_API_KEY |
OpenAI Platform | sk-(proj-)?[a-zA-Z0-9_-]{48,128} |
אורך וטווח תווים מוגדר. |
ANTHROPIC_KEY |
Anthropic Claude | `sk-ant-(api | admin)[0-9]{2}-[a-zA-Z0-9_-]{80,120}` |
GITHUB_TOKEN |
GitHub | קידומות ghp_ / gho_ / ghu_ / ghs_ / ghr_ + 36 תווים |
מבנה טוקן אישי/OAuth. |
SLACK_TOKEN |
Slack Technologies | xox[baprs]-[0-9]{10,13}-[0-9]{10,13}[a-zA-Z0-9-]* |
מבנה טוקנים ארגוניים/בוטים. |
PRIVATE_KEY |
תעודות קריפטוגרפיות | `-----BEGIN (RSA | EC |
4.2 מחרוזות חיבור (Connection Strings & Database URIs)
השער מפעיל מפענח URI ייעודי שמחלץ את הסיסמה בלבד וממסך אותה, מבלי לפגוע במבנה הכתובת כדי לא לשבור בדיקות קוד:
- תבנית קלט:
postgresql://db_admin:P@ssw0rd123!@postgres.internal.corp:5432/finance_db
- פלט ממוסך המועבר ל-LLM:
postgresql://db_admin:[PASSWORD_01_7c2b]@postgres.internal.corp:5432/finance_db
- נתמך עבור פרוטוקולים:
postgres://,mysql://,mongodb://,mongodb+srv://,redis://,rediss://,amqp://,mssql://.
4.3 מנוע אנטרופיה לאיתור סודות חופשיים (Shannon Entropy Engine)
מחרוזות שאינן מתאימות לתבנית של ספק ספציפי נסרקות באמצעות חישוב אנטרופיית המידע של שאנון:
$$H(X) = -\sum_{i=1}^{n} P(x_i) \log_2 P(x_i)$$
- תנאי סף לסיווג כ-
GENERIC_HIGH_ENTROPY_SECRET:
- המחרוזת מורכבת מתווים רציפים ללא רווחים באורך של 20 תווים ומעלה.
- ציון האנטרופיה H(X) >= 4.30 (עבור ערכת תווים אלפא-נומרית) או >= 4.75 (עבור ערכת Base64 מורחבת).
- המחרוזת אינה מילה מוכרת במילון אנגלי/עברי ואינה כתובת Hash של Git Commit (40 תווים הקסדצימליים ללא תווים מיוחדים מקבלים החרגה ייעודית).
5. מידע בריאותי מוגן (HIPAA / Protected Health Information - PHI)
התאמה מלאה לתקן Safe Harbor של חוק ה-HIPAA האמריקאי, הדורש סילוק של 18 מזהים ספציפיים:
| קוד ישות | סוג מזהה HIPAA | שיטת זיהוי ב-zer0pii | חומרה | אופן החלפה |
|---|---|---|---|---|
HEALTH_MRN |
מספר תיק רפואי (Medical Record Number) | סריקה בהקשר של מונחים רפואיים ("תיק רפואי", "MRN", "גיליון") + רצף של 6-10 תווים. | 95 | [MRN_01_{nonce}] |
HEALTH_DATE |
תאריכי טיפול, אשפוז ופטירה | זיהוי תאריכים מלאים בהקשר קליני (למעט שנת הלידה עבור מטופלים מעל גיל 89, הממוסכת אוטומטית). | 80 | החלפה בתאריך סינתטי בעל סטייה קבועה (+14 יום עקבי). |
HEALTH_DEVICE_ID |
מזהי מכשור רפואי ושתלים (UDI) | תבניות ברקוד FDA UDI (תקן GS1 או HIBCC). | 85 | [DEVICE_ID_01_{nonce}] |
HEALTH_BIOMETRIC |
הפניות למידע ביומטרי | זיהוי תיאורי תביעות אצבע, סריקות רשתית, ודפוסי קול בהקשר אישי. | 90 | [BIOMETRIC_DATA] |
6. פרטי התקשרות ומידע אישי רב-לשוני (General PII & Contact Data)
| קוד ישות | קטגוריה | אלגוריתם ומנגנון זיהוי | חומרה | שפות נתמכות |
|---|---|---|---|---|
EMAIL_ADDRESS |
כתובות דוא"ל | תקן RFC 5322 Regex מוקשח + שלילת TLDs לא חוקיים והחרגת ספריות קוד (כגון user@example.com או כתובות בתוך תיעוד). |
75 | בינלאומי |
PHONE_NUMBER |
מספרי טלפון | תקן ITU E.164: זיהוי קידומות מדינה בינלאומיות (+972, +1, +44) וסריקת מספרי טלפון מקומיים וניידים בעברית ואנגלית (עם או בלי מקפים). |
75 | בינלאומי |
PERSON_NAME |
שמות פרטיים ומשפחה | GLiNER Multi-PII ONNX Engine: מודל סמנטי מקומי הפועל בזמן אמת, מנתח חלקי דיבר (POS) ומזהה שמות ישויות מורכבים בטקסט חופשי. | 60 | עברית, אנגלית, ערבית, גרמנית, צרפתית, ספרדית |
PHYSICAL_ADDRESS |
כתובות מגורים ורחובות | שילוב של GLiNER (תגיות LOC / GPE) עם מילוני שמות ערים ורחובות בישראל ובעולם + זיהוי מיקודים (ZIP / Postal Codes). |
65 | עברית, אנגלית, אירופית |
IP_ADDRESS |
כתובות רשת | IPv4 ו-IPv6. החרגה אוטומטית: כתובות לולאה חוזרת (127.0.0.1), כתובות תיעוד (192.0.2.0/24) וכתובות שידור (0.0.0.0). |
70 | בינלאומי |
7. מטריצת אסטרטגיות מיסוך ושימור טיפוסי נתונים (Masking & Type-Preservation Matrix)
שער zer0pii תומך בשלוש אסטרטגיות מיסוך שונות הנבחרות אוטומטית בהתאם להקשר הבקשה:
| טיפוס נתונים מקורי | אסטרטגיה 1: טוקן מחרוזתי רגיל (Standard Token) | אסטרטגיה 2: שימור סכמה ב-JSON (Type-Preserving Synthetic) | אסטרטגיה 3: וקטורים סמנטיים (Surrogate for Embeddings) |
|---|---|---|---|
תעודת זהות ישראלית (012345672) |
[IL_ID_01_a8f9] |
804928174 (מספר חוקי בעל Checksum תקין באותו אורך וטיפוס int) |
"309812456" (מספר אזרחי פיקטיבי עקבי) |
כרטיס אשראי (4580...) |
[CREDIT_CARD_01_7c2b] |
4580123456789010 (כרטיס תקן Luhn עם אותו BIN ראשוני) |
"כרטיס חיוב לקוח" |
שם פרטי ("ישראל ישראלי") |
[PERSON_01_b4e1] |
"דוד כהן" (שם סינתטי מחרוזתי מאותו מגדר ותרבות) |
"דוד לוי" (מבטיח שימור מרחק וקטורי ב-RAG) |
כתובת דוא"ל (john@acme.com) |
[EMAIL_01_9d2a] |
"user_8829f@acme-corp.synthetic" |
"contact@enterprise.domain" |
סיסמת DB ("P@ss123") |
[PASSWORD_01_c1a4] |
"[PASSWORD_FILTERED]" |
החרגה מוחלטת מאינדוקס וקטורי |
8. מטריצת חריגות תחביריות והגנת מפתחים (AST & Code Block Exceptions)
כדי להבטיח מהימנות של 100% עבור מפתחים ולמנוע שבירת קוד, מחרוזות הנמצאות בתוך ההקשרים הבאים אינן ממוסכות לעולם, אלא אם הן מציגות אנטרופיה קיצונית (H >= 4.8) המעידה על מפתח ענן קשיח:
┌─────────────────────────────────────────────────────────────────────────────┐
│ EXEMPTION CONTEXT RULES │
├─────────────────────────────────────────────────────────────────────────────┤
│ 1. Markdown Fenced Code Blocks (```python ... ```, ```json ... ```) │
│ • שמות משתנים (user_id, client_name, email) אינם נסרקים כ-PII. │
│ • שמות פונקציות ומחלקות (def get_customer_records) מוגנים לחלוטין. │
│ │
│ 2. Inline Code Spans (`import pandas as pd`, `const id = 123`) │
│ • כל טקסט התחום בגרש בודד (Backtick) מוגן ממיסוך שמי או מספרי. │
│ │
│ 3. Package Imports & System Dependencies │
│ • שורות המתחילות ב-import, from, require, #include לעולם אינן נסרקות. │
│ • שמות ספריות מוכרות (כגון "requests", "numpy") מוחרגים אוטומטית. │
│ │
│ 4. JSON Schema Keys & Field Identifiers │
│ • במבני JSON, רק הערך (Value) נסרק. המפתח (Key) מוגן באופן מוחלט. │
└─────────────────────────────────────────────────────────────────────────────┘
דוגמת אימות מעשית: קוד מפתח לפני ואחרי המיסוך
- פרומפט מפתח מקורי שנשלח לשער:
import os
import requests
# User complaint from David Cohen, ID: 012345672
user_name = "David Cohen"
user_email = "david@corp.com"
AWS_KEY = "AKIAIOSFODNN7EXAMPLE"
def fetch_data():
return requests.get(f"https://api.corp.com/users/{user_name}")
- הטקסט שמגיע בפועל לספק ה-LLM החיצוני:
import os
import requests
# User complaint from [PERSON_01_a8f9], ID: [IL_ID_01_7c2b]
user_name = "[PERSON_01_a8f9]"
user_email = "[EMAIL_01_3d1e]"
AWS_KEY = "[AWS_KEY_BLOCKED]"
def fetch_data():
return requests.get(f"https://api.corp.com/users/{user_name}")
הערה: מבנה הקוד, שמות המשתנים (user_name, user_email), שמות הפונקציות ופקודות ה-import נותרו ללא שינוי. רק הנתונים הרגישים מוסכו באופן שקוף.
הערה מקומית (build): בטבלת 4.1 המקורית, מספר תאי Regex הגיעו קטועים בשל שבירת טבלת Markdown על תווי | בתוך הביטויים - הושלמו כאן לפי התבניות המקובלות של הספקים מבלי לשנות את הכוונה.