# संवेदनशील जानकारी का प्रकटन और Redaction — LLM Application Security

Source: https://www.geekswithgeeks.com/hi/llm-security/d-disclosure

> व्यक्तिगत डेटा मॉडल या logs तक पहुँचने से पहले न्यूनतम और redact करें।

## डेटा न्यूनतमीकरण सबसे मज़बूत नियंत्रण है

मॉडल को दी गई संवेदनशील जानकारी वह प्रकट कर सकता है: prompt में व्यक्तिगत डेटा किसी और को उत्तर में आ सकता है (साझा context, caching की ग़लतियों या retrieval से), **logs** और analytics में पहुँच सकता है, या **तृतीय-पक्ष provider** को भेजा जा सकता है। सिद्धांत: **न्यूनतम भेजें** (क्या मॉडल को शिकायत का सार करने के लिए ग्राहक का पूरा पता चाहिए?); कॉल से पहले सीधे पहचानकर्ता (नाम, फ़ोन नंबर, ईमेल, ID और कार्ड नंबर) **redact या pseudonymise** करें और ज़रूरत हो तो बाद में बहाल करें; **secrets और credentials को prompts से पूरी तरह बाहर** रखें; **प्रति-user context** अलग रखें ताकि एक user का डेटा दूसरे की बातचीत में न मिले; prompts, आउटपुट और logs पर **retention सीमाएँ** लगाएँ; और provider की **डेटा-उपयोग शर्तें** जाँचें। Pattern-आधारित redaction कमियों वाला सुरक्षा जाल है (असामान्य formats, शब्दों में लिखे अंक, मुक्त-पाठ पहचानकर्ता, अन्य लिपियाँ), इसलिए इसे न्यूनतमीकरण और access control के साथ मिलाएँ।

## जो अंदर जाता है वह बाहर आ सकता है

संवेदनशील डेटा prompts और logs से बाहर रखें, retrieval में access लागू करें, और जिस ज्ञान से मॉडल सीखता है उसकी रक्षा करें।

![तीन मोर्चे: प्रकटन, retrieval, poisoning।](assets/figures/llm-security/section-5-map.svg) — चित्र 5.1 — प्रकटन, retrieval और poisoning।

## Pattern-आधारित redaction और उसकी कमियाँ, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यहाँ सारे हमले स्थानीय डेटा पर हानिरहित प्रदर्शन हैं, कोई असली system उपयोग नहीं हुआ। ईमेल, भारतीय शैली का मोबाइल नंबर (spaces सहित) और कार्ड नंबर labels से बदल जाते हैं, पर हिंदी नाम अछूता रहता है और शब्दों में लिखा फ़ोन नंबर निकल जाता है। Redaction patterns केवल संरचित पहचानकर्ता कवर करते हैं।

```python
import re

PATTERNS = [
    ("EMAIL", re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+")),
    ("PHONE", re.compile(r"(?<!\d)(?:\+91[- ]?)?[6-9]\d{4}[ -]?\d{5}(?!\d)")),
    ("CARD",  re.compile(r"(?<!\d)(?:\d[ -]?){13,16}(?!\d)")),
]
def redact(text):
    for label, pat in PATTERNS: text = pat.sub(f"[{label}]", text)
    return text

msg = "Reach me at asha.k@example.com or +91 98765 43210; card 4111 1111 1111 1111. Hindi name: आशा"
print(redact(msg))
print(redact("call nine eight seven six five four three two one zero"))     # spelled-out digits slip through

```

Output:

```
Reach me at [EMAIL] or [PHONE]; card [CARD]. Hindi name: आशा
call nine eight seven six five four three two one zero
```

## डिफ़ॉल्ट रूप से पूरे prompts log न करें

Metadata और redacted नमूने log करें; पूरे prompts में अक्सर व्यक्तिगत डेटा होता है।

**Quiz:** LLM app से संवेदनशील डेटा लीक होने के विरुद्ध सबसे मज़बूत नियंत्रण क्या है?

- [x] संवेदनशील डेटा को पहले ही मॉडल या logs तक न भेजना
- [ ] मॉडल से उसे न दोहराने को कहना
- [ ] लंबा system prompt
- [ ] ज़्यादा tokens उपयोग करना

*Answer:* संवेदनशील डेटा को पहले ही मॉडल या logs तक न भेजना. जो डेटा prompt में कभी नहीं आता वह दोहराया नहीं जा सकता।
