पाठ 16 / 28
छेड़छाड़-रहित मानव अनुमोदन
अनुमोदन को ठीक उस कार्रवाई से बाँधें जो मनुष्य ने देखी।
कार्रवाई अनुमोदित करें, सार नहीं
पुष्टि-संवाद तभी बचाता है जब वह असली कार्रवाई दिखाए और अनुमोदन उससे बँधा हो। ठीक दिखाएँ क्या होगा ("order 481516 पर 300 रुपये मूल कार्ड में refund करें"), मॉडल का पुनर्कथन नहीं, जिसे हमलावर ने आकार दिया हो सकता है। मनुष्य के अनुमोदन के बाद system को ठीक वही कार्रवाई करनी चाहिए, और कुछ नहीं: अनुमोदित कार्रवाई पर हस्ताक्षर करें (जैसे server-side key से उसके fields पर HMAC) या उसे ID से server-side रखें, और चलाने से पहले verify करें, ताकि अनुमोदन के बाद मॉडल राशि न बदल सके। अनुमोदन थकान से सावधान रहें: बहुत ज़्यादा prompts लोगों को हाँ दबाना सिखाते हैं; सिर्फ़ मायने रखने वाली चीज़ें पूछें, संबंधित चरण समूहित करें, और जोखिम भरे ब्योरे प्रमुख बनाएँ। सबसे उच्च-जोखिम कार्रवाइयों के लिए दूसरे व्यक्ति की माँग करें।
अनुमोदित कार्रवाई पर हस्ताक्षर, चलाकर
मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यहाँ सारे हमले स्थानीय डेटा पर हानिरहित प्रदर्शन हैं, कोई असली system उपयोग नहीं हुआ। Token ठीक अनुमोदित कार्रवाई पर HMAC है। मूल कार्रवाई verify होती है; राशि 300 से 30000 बदली वही कार्रवाई verification में विफल होती है, इसलिए मॉडल अनुमोदन के बाद उसे बदल नहीं सकता। यहाँ secret placeholder है; असली कोड उसे secrets manager से लोड करता है।
import hmac, hashlib, json
SECRET = b"server-side-secret" # in real code: from a secrets manager, never in the repo
def sign(action):
msg = json.dumps(action, sort_keys=True).encode()
return hmac.new(SECRET, msg, hashlib.sha256).hexdigest()
def verify(action, token): return hmac.compare_digest(sign(action), token)
proposed = {"tool": "refund", "order": "481516", "amount": 300}
token = sign(proposed) # issued when the HUMAN approves exactly this action
print("approved action executes:", verify(proposed, token))
tampered = {**proposed, "amount": 30000} # the model (or an attacker) tries to change it after approval
print("tampered action executes:", verify(tampered, token))
Output:
approved action executes: True tampered action executes: False
अनुमोदन थकान से बचें
सिर्फ़ सार्थक कार्रवाइयों के लिए अनुमोदन माँगें और मुख्य ब्योरे प्रमुखता से दिखाएँ।
त्वरित जाँच: अनुमोदन को ठीक कार्रवाई से क्यों बाँधें?
- Logging से बचने के लिए
- अनुमोदन धीमे करने के लिए
- ताकि मनुष्य के हाँ कहने के बाद राशि या लक्ष्य न बदले जा सकें
- अनुमोदन को बाँधने की ज़रूरत नहीं
Answer
ताकि मनुष्य के हाँ कहने के बाद राशि या लक्ष्य न बदले जा सकें — बिना-बँधा "हाँ" दूसरी, हानिकारक कार्रवाई के लिए पुनः उपयोग हो सकता है।