पाठ 18 / 28

संवेदनशील जानकारी का प्रकटन और Redaction

व्यक्तिगत डेटा मॉडल या 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।
चित्र 5.1 — प्रकटन, retrieval और poisoning।

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

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

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 में अक्सर व्यक्तिगत डेटा होता है।

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

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

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