ਦਰਸਾਉਂਦੇ ਹੋਏ ਵੀਡੀਓ ਵੇਖੋ: ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਰਸੀਦਾਂ ਨਾਲ ਏਆਈ ਏਜੰਟਾਂ ਦੀ ਸੁਰੱਖਿਆ
(ਲੈਸਨ ਵੀਡੀਓ ਅਤੇ ਥੰਬਨੇਲ ਮਾਇਕ੍ਰੋਸੌਫਟ ਸਮੱਗਰੀ ਟੀਮ ਵੱਲੋਂ ਮਰਜ ਤੋਂ ਬਾਅਦ ਜੋੜੇ ਜਾਣਗੇ, ਲੈਸਨ 14 / 15 ਪੈਟਰਨ ਦੇ ਅਨੁਰੂਪ.)
ਇਹ ਲੈਸਨ ਕਵਰ ਕਰੇਗੀ:
ਇਸ ਲੈਸਨ ਨੂੰ ਪੂਰਾ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਤੁਸੀਂ ਜਾਣੋਗੇ ਕਿ:
कल्पना ਕਰੋ ਕਿ ਤੁਸੀਂ Contoso Travel ਲਈ ਇੱਕ ਏਆਈ ਏਜੰਟ ਤਿਆਰ ਕੀਤਾ ਹੈ। ਇਹ ਏਜੰਟ ਗ੍ਰਾਹਕ ਦੀਆਂ ਮੰਗਾਂ ਪੜ੍ਹਦਾ ਹੈ, ਉਡਾਣਾਂ ਲਈ API ਕਾਲ ਕਰਦਾ ਹੈ ਅਤੇ ਗਾਹਕ ਦੇ ਹਿੱਸੇ ਵਿੱਚ ਸੀਟਾਂ ਬੁੱਕ ਕਰਦਾ ਹੈ। ਪਿਛਲੇ ਕਵਾਰਟਰ ਵਿੱਚ, ਇਹ ਏਜੰਟ 50,000 ਬੁਕਿੰਗ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀਆਂ।
ਅੱਜ ਇਕ ਆਡੀਟਰ ਆਇਆ। ਉਹ ਇੱਕ ਸਧਾਰਣ ਸਵਾਲ ਪੁੱਛਦਾ ਹੈ: “ਮੈਨੂੰ ਦਿਖਾਓ ਤੁਹਾਡਾ ਏਜੰਟ ਕੀ ਕੀਤਾ।”
ਤੁਸੀਂ ਆਪਣੇ ਲੌਗ ਫਾਇਲਾਂ ਦਿੱਤੀਆਂ। ਆਡੀਟਰ ਉਹਨਾਂ ਨੂੰ ਦੇਖਦਿਆਂ ਇੱਕ ਮੁਸ਼ਕਲ ਸਵਾਲ ਕਰਦਾ ਹੈ: “ਮੈਂ ਕਿਵੇਂ ਜਾਣਾ ਕਿ ਇਹ ਲੌਗ ਸੋਧੇ ਨਹੀਂ ਗਏ?”
ਇਹ ਆਡਿਟ-ਟਰੇਲ ਸਮੱਸਿਆ ਹੈ। ਅੱਜ ਦੇ ਵੱਧਤਰ ਏਜੰਟ ਪ੍ਰਯੋਗਹਾਲ:
ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਆਡੀਟਰ ਦੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਨਹੀਂ ਦੇ ਸਕਦਾ ਬਗੈਰ ਵਰਤੇ ਜਾਂਦੇ ਕਿਸੇ ਭਰੋਸੇ (ਤੁਸੀਂ, ਤੁਹਾਡਾ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾ, ਡੇਟਾਬੇਸ ਵਿਕਰੇਤਾ)। ਅੰਦਰੂਨੀ ਵਰਤੋਂ ਲਈ, ਉਹ ਭਰੋਸਾ ਕਈ ਵਾਰੀ ਮਨਜੂਰ ਹੁੰਦਾ ਹੈ। ਕਾਨੂੰਨੀ ਕੰਮਕਾਜ (ਵਿੱਤ, ਸਿਹਤ ਸੇਵਾ, EU AI ਐਕਟ ਵਾਲੇ) ਲਈ ਨਹੀਂ।
ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਰਸੀਦਾਂ ਇਸਨੂੰ ਹੱਲ ਕਰਦੀਆਂ ਹਨ ਜਿਸ ਨਾਲ ਹਰ ਏਜੰਟ ਕਿਰਿਆ ਆਜ਼ਾਦ ਤੌਰ ‘ਤੇ ਵੇਰੀਫਾਈ ਕਰ ਸਕੀਦੀ ਹੈ। ਆਡੀਟਰ ਨੂੰ ਤੁਹਾਡੇ ‘ਤੇ ਭਰੋਸਾ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ। ਉਹ ਸਿਰਫ ਤੁਹਾਡੀ ਪਬਲਿਕ ਕੀ ਅਤੇ ਰਸੀਦ ਦੀ ਲੋੜ ਪਾਉਂਦੇ ਹਨ।
ਰਸੀਦ ਇੱਕ JSON ਵਸਤੂ ਹੈ ਜੋ ਦਰਸਾਉਂਦੀ ਹੈ ਕਿ ਏਜੰਟ ਨੇ ਕੀ ਕੀਤਾ, ਡਿਜਿਟਲ ਸਿਗਨੇਚਰ ਨਾਲ ਸਾਈਂ ਹੁੰਦੀ ਹੈ।
flowchart LR
A[ਏਜੰਟ ਇੱਕ ਸੰਦ ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ] --> B[ਰਸੀਦ ਪੇਲੋਡ ਬਣਾਓ]
B --> C[ਕੈਨੋਨੀਕਲਾਈਜ਼ JSON RFC 8785]
C --> D[SHA-256 ਹੈਸ਼]
D --> E[Ed25519 ਸਾਈਨ]
E --> F[ਦਸਤਖ਼ਤ ਨਾਲ ਰਸੀਦ]
F --> G[ਆਡੀਟਰ ਆਫਲਾਈਨ ਜਾਂਚ ਕਰਦਾ ਹੈ]
G --> H{ਦਸਤਖ਼ਤ ਵੈਧ ਹੈ?}
H -- ਹਾਂ --> I[ਟੈਮਪਰ-ਸਾਬਤ ਸਬੂਤ]
H -- ਨਹੀਂ --> J[ਰਸੀਦ ਰੱਦ ਕੀਤੀ ਗਈ]
ਇੱਕ ਘੱਟੋ-ਘੱਟ ਰਸੀਦ ਇਸ ਤਰ੍ਹਾਂ ਦਿੱਸਦੀ ਹੈ:
{
"type": "agent.tool_call.v1",
"agent_id": "contoso-travel-bot",
"tool_name": "lookup_flights",
"tool_args_hash": "sha256:a3f9c1...",
"result_hash": "sha256:7b2e1d...",
"policy_id": "contoso-travel-policy-v3",
"timestamp": "2026-04-25T14:30:00Z",
"sequence": 47,
"previous_receipt_hash": "sha256:9d4e6a...",
"signature": {
"alg": "EdDSA",
"sig": "c5af83...",
"public_key": "8f3b2c..."
}
}
ਤਿੰਨ ਗੁਣ ਕੰਮ ਕਰ ਰਹੇ ਹਨ:
ਸਿਗਨੇਚਰ। ਰਸੀਦ ਏਜੰਟ ਦੇ ਗੇਟਵੇ ਦੁਆਰਾ Ed25519 ਪ੍ਰਾਈਵੇਟ ਕੀ ਨਾਲ ਸਾਈਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਜਿਸ ਨੂੰ ਮਿਲਦੀ ਸਾਰਥਕ ਪਬਲਿਕ ਕੀ, ਉਹ ਕਿਸੇ ਵੀ ਸਮੇਂ ਸਿਗਨੇਚਰ ਦੀ ਆਫਲਾਈਨ ਤਸਦੀਕ ਕਰ ਸਕਦਾ ਹੈ। ਕਿਸੇ ਖੇਤਰ ਵਿੱਚ ਸੋਧ ਸਿਗਨੇਚਰ ਨੂੰ ਅਣਜਮ੍ਹਾਂ ਕਰ ਦਿੰਦੀ ਹੈ।
ਕੈਨਾਨੀਕਲ ਕੋਡਿੰਗ। ਸਾਈਂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਰਸੀਦ ਨੂੰ JSON Canonicalization Scheme (JCS, RFC 8785) ਨਾਲ ਸੀਰੀਅਲਾਈਜ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਨਾਲ ਇਹ ਯਕੀਨੀ ਬਣਦਾ ਹੈ ਕਿ ਦੋ ਅਮਲ ਉੱਤਰ ਇੱਕੋ ਢੰਗ ਨਾਲ ਲਾਜ਼ਮੀ ਤੌਰ ‘ਤੇ ਬਾਈਟ-ਸਹੀ ਔਟਪੁੱਟ ਦਿੰਦੇ ਹਨ। ਬਿਨਾਂ ਕੁਝ ਐਤਰਾਜ਼ ਦੇ, ਵੱਖ-ਵੱਖ JSON ਸੀਰੀਅਲਾਈਜ਼ਰ ਨੇ ਇੱਕੋ ਸਮੱਗਰੀ ਲਈ ਵੱਖ-ਵੱਖ ਸਿਗਨੇਚਰਾਂ ਦਾ ਨਿਰਮਾਣ ਕੀਤਾ ਹੋ ਸਕਦਾ।
ਹੈਸ਼ ਚੈਨਿੰਗ। previous_receipt_hash ਖੇਤਰ ਹਰ ਰਸੀਦ ਨੂੰ ਪਿਛਲੀ ਰਸੀਦ ਨਾਲ ਜੋੜਦਾ ਹੈ। ਇੱਕ ਰਸੀਦ ਨੂੰ ਹਟਾਉਣਾ ਜਾਂ ਉਸ ਦੀ ਸਸਤੀ ਦੇ ਅਨੁਕੂਲਤਾ ਤੋੜਦਾ ਹੈ। ਟੈਂਪਰਿੰਗ ਚੇਨ ਸਤਰ ‘ਤੇ ਦਿਖਾਈ ਪੈਂਦੀ ਹੈ ਭਾਵੇਂ ਵਿਅਕਤੀਗਤ ਸਿਗਨੇਚਰਾਂ ਨੂੰ ਬਾਈਪਾਸ ਕੀਤਾ ਜਾਵੇ।
ਇਨਾਂ ਗੁਣਾਂ ਨਾਲ ਤਿੰਨ ਗਰੰਟੀ ਮਿਲਦੀਆਂ ਹਨ:
ਰਸੀਦ ਬਣਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਕਿਸੇ ਖਾਸ ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਲੋੜ ਨਹੀਂ। ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਪ੍ਰਿਮਿਟਿਵਸ ਆਮ ਤੌਰ ‘ਤੇ ਉਪਲਬਧ ਹਨ ਅਤੇ ਤਰਕ ਸਿਰਫ ਕੁਝ ਦਹਾਕਾ ਪਾਇਥਨ ਲਾਈਨਾਂ ਦਾ ਹੈ।
code_samples/18-signed-receipts.ipynb ਵਿੱਚ ਹੈਂਡਸ-ਆਨ ਅਭਿਆਸ ਪੂਰੇ ਵੀਹ-ਤੰਦਰੂਸਤ ਪ੍ਰਕਿਰਿਆ ਵਿੱਖਾਉਂਦੇ ਹਨ। ਸੰਖੇਪ ਸੰਕਲਨ:
import json
import hashlib
import base64
from nacl import signing
from jcs import canonicalize # RFC 8785 ਕੈਨੋਨਿਕਲ JSON
def b64url_nopad(data: bytes) -> str:
return base64.urlsafe_b64encode(data).decode("ascii").rstrip("=")
def sha256_canonical(obj) -> str:
"""SHA-256 of a Python object's JCS-canonical JSON form."""
return f"sha256:{hashlib.sha256(canonicalize(obj)).hexdigest()}"
# ਸਾਈਨਿੰਗ ਕੀ ਬਣਾਓ ਜਾਂ ਲੋਡ ਕਰੋ (ਉਤਪਾਦਨ ਵਿੱਚ, ਕੁੰਜੀ ਵਾਲਟ ਵਿੱਚ ਸੰਭਾਲੋ)
signing_key = signing.SigningKey.generate()
verify_key = signing_key.verify_key
# ਰਸੀਦ ਪੇਲੋਡ ਬਣਾਓ (ਹੁਣ ਤੱਕ ਕੋਈ ਦਸਤਖਤ ਨਹੀਂ)
tool_args = {"origin": "SYD", "destination": "LAX"}
tool_result = [{"flight": "QF11", "price": 1850, "stops": 0}]
payload = {
"type": "agent.tool_call.v1",
"agent_id": "contoso-travel-bot",
"tool_name": "lookup_flights",
"tool_args_hash": sha256_canonical(tool_args),
"result_hash": sha256_canonical(tool_result),
"policy_id": "contoso-travel-policy-v3",
"timestamp": "2026-04-25T14:30:00Z",
"sequence": 0,
"previous_receipt_hash": None,
}
# ਕੈਨੋਨਿਕਲ ਬਣਾਓ, ਹੈਸ਼ ਕਰੋ, ਦਸਤਖਤ ਕਰੋ।
canonical_bytes = canonicalize(payload)
message_hash = hashlib.sha256(canonical_bytes).digest()
signature_bytes = signing_key.sign(message_hash).signature
# ਇੱਕ ਸੰਰਚਿਤ ਦਸਤਖ਼ਤ ਵਸਤੂ ਜੋੜੋ।
receipt = {
**payload,
"signature": {
"alg": "EdDSA",
"sig": b64url_nopad(signature_bytes),
"public_key": b64url_nopad(bytes(verify_key)),
},
}
ਇਹ ਸਾਰੀ ਸਾਈਨਿੰਗ ਪ੍ਰਕਿਰਿਆ ਹੈ। ਨੋਟਬੁਕ ਦੇ ਅਭਿਆਸ ਹਰ ਕਦਮ ‘ਤੇ ਚੱਲਦੇ ਹਨ।
ਜਾਂਚ ਉਲਟ ਪ੍ਰਕਿਰਿਆ ਹੈ:
import base64
import hashlib
from nacl import signing
from nacl.exceptions import BadSignatureError
from jcs import canonicalize
def b64url_decode(s: str) -> bytes:
padding = "=" * ((4 - len(s) % 4) % 4)
return base64.urlsafe_b64decode(s + padding)
def verify_receipt(receipt: dict) -> bool:
# ਸਿਗਨੇਚਰ ਇੱਕ ਸੰਰਚਿਤ ਵਸਤੂ ਹੈ: {"alg", "sig", "public_key"}।
sig_obj = receipt.get("signature")
if not sig_obj or sig_obj.get("alg") != "EdDSA":
return False
# payload ਨੂੰ ਮੁੜ ਬਣਾਓ ਜੋ ਅਸਲ ਵਿੱਚ ਸਾਇਨ ਕੀਤਾ ਗਿਆ ਸੀ (ਸਿਗਨੇਚਰ ਨੂੰ ਛੱਡ ਕੇ ਸਾਰਾ ਕੁਝ)।
payload = {k: v for k, v in receipt.items() if k != "signature"}
canonical_bytes = canonicalize(payload)
message_hash = hashlib.sha256(canonical_bytes).digest()
try:
verify_key = signing.VerifyKey(b64url_decode(sig_obj["public_key"]))
verify_key.verify(message_hash, b64url_decode(sig_obj["sig"]))
return True
except BadSignatureError:
return False
ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਰਸੀਦ ਲੈਂਦਾ ਹੈ ਅਤੇ ਸੱਚ (True) ਵਾਪਸ ਕਰਦਾ ਹੈ ਜੇ ਸਿਗਨੇਚਰ ਸਹੀ ਹੋਵੇ, ਨਹੀਂ ਤਾਂ ਝੂਠ (False)। ਕੋਈ ਨੈੱਟਵਰਕ ਕਾਲ ਨਹੀਂ, ਕੋਈ ਸਰਵਿਸ ਨਿਰਭਰਤਾ ਨਹੀਂ, ਕਿਸੇ ਤੀਜੀ ਪਾਰਟੀ ਉੱਤੇ ਭਰੋਸਾ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ।
ਟੈਂਪਰਿੰਗ ਡਿੱਠੀ ਜਾਵੇ ਇਸਦੇ ਲਈ ਨੋਟਬੁੱਕ ਵਿੱਚ ਇਹ ਦਿਖਾਇਆ ਗਿਆ ਹੈ:
tool_args_hash ਖੇਤਰ ਦੀ ਇਕ ਬਾਈਟ ਨੂੰ ਸੋਧਿਆ ਜਾਵੇ।ਇਹ ਪ੍ਰਯੋਗਾਤਮਕ ਪ੍ਰਮਾਣ ਹੈ ਕਿ ਰਸੀਦਾਂ ਟੈਂਪਰ-ਸਾਬਿਤ ਹੁੰਦੀਆਂ ਹਨ: ਛੋਟੀ ਤੋਂ ਛੋਟੀ ਸੋਧ ਵੀ ਸਿਗਨੇਚਰ ਨੂੰ ਤੋੜ ਦਿੰਦੀ ਹੈ।
ਇੱਕ ਸਿੰਗਲ ਸਾਈਂ ਕੀਤੀ ਰਸੀਦ ਇੱਕ ਕਿਰਿਆ ਦੀ ਸੁਰੱਖਿਆ ਕਰਦੀ ਹੈ। ਰਸੀਦਾਂ ਦੀ ਲੜੀ ਕ੍ਰਮ ਦੀ ਸੁਰੱਖਿਆ ਕਰਦੀ ਹੈ।
flowchart LR
R0[ਰਸੀਦ 0<br/>ਉਤਪੱਤੀ] --> R1[ਰਸੀਦ 1]
R1 --> R2[ਰਸੀਦ 2]
R2 --> R3[ਰਸੀਦ 3]
R1 -. previous_receipt_hash .-> R0
R2 -. previous_receipt_hash .-> R1
R3 -. previous_receipt_hash .-> R2
ਹਰ ਰਸੀਦ ਪਿਛਲੀ ਰਸੀਦ ਦੇ ਹੈਸ਼ ਨੂੰ ਦਰਜ ਕਰਦੀ ਹੈ। ਚੇਨ ਵਿੱਚ ਦੂਜੀ ਰਸੀਦ ਨੂੰ ਸ਼ਾਂਤੀ ਨਾਲ ਹਟਾਉਣ ਲਈ ਹਮਲਾਵਰ ਨੂੰ ਜਾਂ:
previous_receipt_hash ਖੇਤਰ ਨੂੰ ਸੋਧਣਾ ਪਵੇਗਾ (ਰਸੀਦ 3 ਦੀ ਸਿਗਨੇਚਰ ਖਰਾਬ ਹੋ ਜਾਏਗੀ), ਜਾਂਜੇ ਪ੍ਰਾਈਵੇਟ ਕੀ ਕਿਸੇ ਹਾਰਡਵੇਅਰ ਕੀ ਵੌਲਟ ਵਿੱਚ ਹੈ ਅਤੇ ਤੁਸੀਂ ਹਰ ਰਸੀਦ ਨਾਲ ਪਬਲਿਕ ਕੀ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰਦੇ ਹੋ ਤਾਂ ਇਹ ਕੋਈ ਹਮਲਾ ਪਤਾ ਲੱਗਣ ਤੋਂ ਬਿਨਾਂ ਸੰਭਵ ਨਹੀਂ।
ਨੋਟਬੁਕ ਚੱਲਦਾ ਹੈ:
previous_receipt_hash ਅਸਲ ਪਿਛਲੀ ਰਸੀਦ ਦੇ ਹੈਸ਼ ਨਾਲ ਮਿਲਦਾ ਹੈ।ਇਸ ਤਰ੍ਹਾਂ ਤੁਸੀਂ ਇਕ ਐਸਾ ਆਡਿਟ ਟਰੇਲ ਬਣਾਉਂਦੇ ਹੋ ਜੋ ਬਾਹਰੀ ਆਡੀਟਰ ਤੁਹਾਡੇ ਉੱਤੇ ਭਰੋਸਾ ਕੀਤੇ ਬਿਨਾਂ ਪ੍ਰਮਾਣਿਤ ਕਰ ਸਕਦਾ ਹੈ।
ਇਹ ਇਸ ਲੈਸਨ ਦਾ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਭਾਗ ਹੈ। ਰਸੀਦ ਤਾਕਤਵਰ ਹਨ ਪਰ ਇਨ੍ਹਾਂ ਦੀ ਪਰਿਧੀ ਸੀਮਤ ਹੈ।
ਰਸੀਦ ਤਿੰਨ ਗੱਲਾਂ ਸਾਬਤ ਕਰਦੀਆਂ ਹਨ:
ਰਸੀਦ ਇਹ ਨਹੀਂ ਸਾਬਤ ਕਰਦੀਆਂ:
policy_id ਵਿੱਚ ਦਰਜ ਨੀਤੀ ਦਰਅਸਲ ਜਾਂਚੀ ਗਈ ਸੀ ਜਾਂ ਜੇਚ ਕੀਤੀ ਗਈ ਤਾਂ ਇਜਾਜ਼ਤ ਦੇਣ ਵਾਲੀ ਹੁੰਦੀ। ਰਸੀਦ ਇਸਦੀ દવા ਕਰਦੀ ਹੈ, ਲਾਗੂ ਕਰਨ ਦੀ ਨਹੀਂ।ਇਹ ਸੀਮਾ ਦੋ ਕਾਰਨਾਂ ਲਈ ਜਰੂਰੀ ਹੈ:
ਆਮ ਗਲਤੀ ਇਹ ਸਮਝਨਾ ਹੈ ਕਿ “ਸਾਡੇ ਕੋਲ ਰਸੀਦਾਂ ਹਨ” ਇਸਦਾ ਮਤਲਬ “ਅਸੀਂ ਸ਼ਾਸਕ ਹਨ”। ایسا نہیں ہے। ਰਸੀਦਾਂ ਇੱਕ ਬੁਨਿਆਦ ਹਨ। ਸ਼ਾਸਤਰੀ ਪ੍ਰਬੰਧਨ ਉਹ ਪ੍ਰਣਾਲੀ ਹੈ ਜੋ ਤੁਸੀਂ ਉਸ ਦੇ ਉੱਪਰ ਬਣਾਉਂਦੇ ਹੋ।
ਇਸ ਲੈਸਨ ਦਾ ਪਾਇਥਨ ਕੋਡ ਇਰਾਦਤਨ ਘੱਟ ਤੋਂ ਘੱਟ ਹੈ ਤਾਂ ਜੋ ਤੁਸੀਂ ਹਰ ਲਾਈਨ ਪੜ੍ਹ ਕੇ ਸਮਝ ਸਕੋ ਕਿ ਕੀ ਹੋ ਰਿਹਾ ਹੈ। ਉਤਪਾਦਨ ਵਿੱਚ, ਤੁਹਾਡੇ ਕੋਲ ਦੋ ਵਿਕਲਪ ਹਨ:
jcs ਪੈਕੇਜ (ਕੈਨਾਨੀਕਲ JSON) ਚੰਗੀ ਤਰ੍ਹਾਂ ਤਿਆਰ ਅਤੇ ਆਡੀਟ ਕੀਤੀਆਂ ਗਈਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਹਨ।draft-farley-acta-signed-receipts) ਦੇ ਤਹਿਤ ਹੈ ਜੋ ਮਿਆਰੀਕਰਨ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਹੈ।protect-mcp (npm) ਅਤੇ @veritasacta/verify (npm) ਪੈਕੇਜ Node-ਆਧਾਰਤ ਰਸੀਦ ਸਾਈਨਿੰਗ ਅਤੇ ਆਫਲਾਈਨ ਵੇਰੀਫਿਕੇਸ਼ਨ ਲਾਗੂ ਕਰਦੇ ਹਨ, ਜਿਹੜਾ ਕਿਸੇ ਵੀ MCP ਸਰਵਰ ਨੂੰ ਟੈਂਪਰ-ਸਾਬਿਤ ਆਡਿਟ ਟਰੇਲ ਨਾਲ ਘੇਰਣ ਲਈ ਹੈ।pip install nobulex) Ed25519 + JCS ਸਾਈਨਿੰਗ ਪੈਟਰਨ ਨੂੰ ਪਾਇਥਨ ਵਿੱਚ ਲੰਚੇਨ ਅਤੇ CrewAI ਇੰਟਿਗ੍ਰੇਸ਼ਨਾਂ ਨਾਲ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਪਬਲਿਸ਼ਡ ਕ੍ਰਾਸ-ਵੈਰੀਫਿਕੇਸ਼ਨ ਟੈਸਟ ਵੇਕਟਰ ਅਤੇ ਇੱਕ ਕਮਪਲਾਇੰਸ ਮੈਪਿੰਗ ਜੋ OWASP PR #2210 ਰਾਹੀਂ ਯੋਗਦਾਨ ਕੀਤੀ ਗਈ ਹੈ।ਆਪਣੀ ਲਾਇਬ੍ਰੇਰੀ ਲਿਖਣ ਅਤੇ ਇੱਕ ਪ੍ਰਮਾਣਿਤ JWT ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੇ ਵਿਚਕਾਰ ਫੈਸਲਾ ਕਿਰਤੇ ਸਮਾਨ ਹੈ: ਦੋਹਾਂ ਉਚਿਤ ਹਨ; ਲਾਇਬ੍ਰੇਰੀ ਸਮਾਂ ਬਚਾਉਂਦੀ ਅਤੇ ਆਡੀਟ ਸਤਹ ਘਟਾਉਂਦੀ ਹੈ; ਨਵਾਂ ਤਰੀਕਾ ਤੁਹਾਨੂੰ ਹਰ ਪ੍ਰਿਮਿਟਿਵ ਨੂੰ ਸਮਝਣ ਤੇ ਮਜ਼ਬੂਰ ਕਰਦਾ ਹੈ। ਇਹ ਲੈਸਨ ਤੁਹਾਨੂੰ ਇਹ ਯਥਾਰਥ ਸਿਖਾਉਂਦੀ ਹੈ ਤਾਂ ਜੋ ਤੁਸੀਂ ਦੋਹਾਂ ਚੋਣਾਂ ਲਈ ਬੁਨਿਆਦ ਰੱਖ ਸਕੋ।
ਪ੍ਰਯੋਗ ਅਭਿਆਸ ਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣੀ ਸਮਝ ਨੂੰ ਟੈਸਟ ਕਰੋ।
1. ਰਸੀਦ ਏਜੰਟ ਦੀ ਪ੍ਰਾਈਵੇਟ Ed25519 ਕੀ ਨਾਲ ਸਾਈਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਆਡੀਟਰ ਕੋਲ ਸਿਰਫ ਪਬਲਿਕ ਕੀ ਹੁੰਦੀ ਹੈ। ਕੀ ਆਡੀਟਰ ਰਸੀਦ ਦੀ ਆਫਲਾਈਨ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ?
2. ਇੱਕ ਹਮਲਾਵਰ ਰਸੀਦ ਦੇ policy_id ਖੇਤਰ ਨੂੰ ਸੋਧ ਕੇ ਦਾਅਵਾ ਕਰਦਾ ਹੈ ਕਿ ਇਹ ਕਿਸੇ ਢਿੱਲੇ ਨੀਤੀ ਦੇ ਅਧੀਨ ਸੀ। ਸਿਗਨੇਚਰ ਅਸਲ ਪੇਲੋਡ ਉੱਤੇ ਬਣੀ ਸੀ। ਜਾਂਚ ਦੌਰਾਨ ਕੀ ਹੁੰਦਾ ਹੈ?
3. ਰਸੀਦ ਵਿੱਚ ਕੁਸ਼ ਦਲੀਲਾਂ ਅਤੇ ਨਤੀਜਾ ਦੀ ਥਾਂ tool_args_hash ਅਤੇ result_hash ਹਨ, ਇਸਦਾ ਕਾਰਣ ਕੀ ਹੈ?
4. previous_receipt_hash ਖੇਤਰ ਹਰ ਰਸੀਦ ਨੂੰ ਉਸਦੇ ਪੂਰਵਜ ਨਾਲ ਜੋੜਦਾ ਹੈ। ਜੇ ਕੋਈ ਹਮਲਾਵਰ ਚੇਨ ਵਿਚੋਂ ਕਿਸੇ ਰਸੀਦ ਨੂੰ ਬੇਅਵਾਜ਼ੀ ਨਾਲ ਹਟਾ ਦਿੰਦਾ ਹੈ, ਤਾਂ ਕਿ ਕੀ ਗਲਤ ਹੋਆਂਗਾ?
5. ਇੱਕ ਰਸੀਦ ਸਫਲਤਾਪੂर्वਕ ਜਾਂਚ ਲੰਘ ਜਾਂਦੀ ਹੈ। ਕੀ ਇਹ ਸਾਬਤ ਕਰਦਾ ਹੈ ਕਿ ਏਜੰਟ ਦੀ ਕਿਰਿਆ ਸਹੀ, ਤਰਕਸ਼ੀਲ ਜਾਂ ਨੀਤੀ ਅਨੁਕੂਲ ਸੀ?
code_samples/18-signed-receipts.ipynb ਖੋਲ੍ਹੋ ਅਤੇ ਸਾਰੇ ਚਾਰ ਭਾਗ ਪੂਰੇ ਕਰੋ:
ਸਟ੍ਰੈਚ ਚੈਲੈਂਜ 2: ਆਪਣੇ ਦੋ ਰਸੀਦਾਂ ਨੂੰ SHA-256-ਹੈਸ਼ ਕਰੋ (ਉਹਨਾਂ ਦੇ ਕੈਨਾਨਿਕਲ ਬਾਈਟਜ਼ ਨੂੰ ਨਿਯਤ ਹੁਕਮ ਵਿੱਚ ਜੁੜ ਕੇ) ਅਤੇ ਤੀਜੇ ਰਸੀਦ ਵਿੱਚ ਇੱਕ ਨਵੇਂ ਫੀਲਡ ਵਜੋਂ ਨਤੀਜੇ ਦੇ ਡਾਈਜੈਸਟ ਨੂੰ ਸੰਮਿਲਤ ਕਰੋ ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਇਸ ਨੂੰ ਸਾਈਨ ਕੀਤਾ ਜਾਵੇ। ਪੱਕਾ ਕਰੋ ਕਿ ਤੇਨੋਂ ਰਸੀਦਾਂ ਅਜੇ ਵੀ ਰਾਊਂਡ-ਟ੍ਰਿਪ ਹੁੰਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਹੁਣੇ ਇੱਕ ਇੱਕ-ਕਦਮੀ ਸਮਾਵੇਸ਼ ਸਬੂਤ ਬਣਾਇਆ ਹੈ: ਜੋ ਕੋਈ ਵੀ ਤੀਜੇ ਰਸੀਦ ਨੂੰ ਰੱਖਦਾ ਹੈ ਉਹ ਪਹਿਲੀ ਦੋ ਰਸੀਦਾਂ ਦੇ ਹੋਣ ਦਾ ਸਬੂਤ ਦੇ ਸਕਦਾ ਹੈ ਜਦੋਂ ਇਹ ਸਾਈਨ ਕੀਤਾ ਗਿਆ ਸੀ, ਬਿਨਾ ਉਨ੍ਹਾਂ ਦੀਆਂ ਸਮੱਗਰੀ ਪਰਦਾ ਕਰਨ ਦੀ ਲੋੜ। ਇਹ ਉਨ੍ਹਾਂ ਪੈਟਰਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ ਜੋ ਚੋਣ-ਵਿਕਾਸ ਰਸੀਦਾਂ ਨੂੰ ਵੱਡੇ ਪੱਧਰ ‘ਤੇ ਵਰਤਦੀਆਂ ਹਨ (Merkle ਕੰਮਿਟਮੈਂਟ, RFC 6962)।
ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਰਸੀਦਾਂ AI ਏਜੰਟਾਂ ਨੂੰ ਇੱਕ ਆਡਿਟ ਟ੍ਰੇਲ ਦਿੰਦੇ ਹਨ ਜੋ:
ਇਹ ਇਨਪੁੱਟ ਵੈਰੀਫਿਕੇਸ਼ਨ, ਨੀਤੀ ਲਾਗੂ ਕਰਨ, ਜਾਂ ਪਛਾਣ ਇੰਫ੍ਰਾਸਟਰੱਕਚਰ ਦਾ ਬਦਲ ਨਹੀਂ ਹਨ। ਇਹ ਹਰ ਲੇਅਰਾਂ ਲਈ ਇੱਕ ਬੁਨਿਆਦ ਹਨ। ਜਦੋਂ ਤੁਸੀਂ ਏਜੰਟਾਂ ਨੂੰ ਨਿਯੰਤਰਿਤ ਵਰਕਲੋਡ, ਬਹੁ-ਸੰਗਠਨ ਵਜ਼ੀਫੇ, ਜਾਂ ਕਿਸੇ ਵੀ ਐਸੇ ਸੈਟਿੰਗ ਵਿੱਚ ਡਿਪਲੋਇ ਕਰ ਰਹੇ ਹੋ ਜਿੱਥੇ ਭਵਿੱਖ ਦਾ ਆডਿਟਰ ਤੁਹਾਡੇ ‘ਤੇ ਭਰੋਸਾ ਨਹੀਂ ਕਰ ਸਕਦਾ, ਰਸੀਦਾਂ ਹੀ ਉਹ ਤਰੀਕਾ ਹਨ ਜਿਨ੍ਹਾਂ ਰਾਹੀਂ ਤੁਸੀਂ ਆਡਿਟ ਟ੍ਰੇਲ ਸੱਚਾ ਰੱਖਦੇ ਹੋ।
ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਣ ਨਤੀਜਾ: ਰਸੀਦ ਸਾਬਤ ਕਰਦੀਆਂ ਹਨ ਕਿ ਕਿਸ ਨੇ ਕੀ ਕਿਹਾ, ਕਦੋਂ ਕਿਹਾ। ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰਦੀਆਂ ਕਿ ਜੋ ਕਿਹਾ ਗਿਆ ਉਹ ਸੱਚ ਜਾਂ ਸਹੀ ਸੀ। ਇਸ ਫਰਕ ਨੂੰ ਕਸਕੇ ਫੜੋ। ਇਹ ਇੱਕ ਇਮਾਨਦਾਰ ਪ੍ਰੋਵੇਨੈਂਸ ਸਿਸਟਮ ਅਤੇ ਇੱਕ ਗਲਤਫਹਮੀ ਵਾਲੇ ਵਿਚਕਾਰ ਫਰਕ ਹੈ।
ਜਦੋਂ ਤੁਸੀਂ ਇਸ ਪਾਠ ਤੋਂ ਗ੍ਰੈਜੂਏਟ ਹੋ ਕੇ ਸਤਿਆਪਿਤ ਰਸੀਦ-ਦਸਤਖ਼ਤ ਏਜੰਟ ਡਿਪਲੋਇ ਕਰਨ ਲਈ ਤਿਆਰ ਹੋ:
https://your-org.example.com/.well-known/agent-keys.json।Microsoft Foundry Discord ਵਿੱਚ ਸ਼ਾਮਿਲ ਹੋਵੋ ਹੋਰ ਸਿੱਖਣ ਵਾਲਿਆਂ ਨਾਲ ਮਿਲਣ ਲਈ, ਦਫ਼ਤਰ ਘੰਟਿਆਂ ਵਿੱਚ ਹਾਜ਼ਰ ਹੋਣ ਲਈ, ਅਤੇ ਆਪਣੇ AI ਏਜੰਟਾਂ ਦੇ ਸਵਾਲ ਸਮਝਣ ਲਈ।
ਇਹ ਪਾਠ ਇੱਕ-ਰਸੀਦ ਸਾਈਨਿੰਗ ਅਤੇ ਹੈਸ਼ ਚੇਨ ਵਾਲੇ ਕ੍ਰਮ ਬਾਰੇ ਹੈ। ਉਹੀ ਪ੍ਰਿਥਮਿਕਤਾਵਾਂ ਤੁਹਾਡੇ ਸਰਕਾਰੀ ਧੋਖੇ ਵਿਕਾਸ ਦੇ ਪੱਧਰ ਨੂੰ ਬਲ ਮਿਲਕੇ ਹੋਰ ਜਟਿਲ ਪੈਟਰਨਾਂ ਵਿੱਚ ਬਣ ਸਕਦੀਆਂ ਹਨ:
authorization_*) ਅਤੇ ਪੋਸਟ-ਐਕਸਿਕਿਊਸ਼ਨ (result_*) ਅਧੇਰੇ ਵੰਡ ਦਿੰਦੀਆਂ ਹਨ ਬਿਨਾਂ ਦਸਤਖ਼ਤਾਂ ਦੇ, ਜਦੋਂ ਅਧਿਕਾਰ ਫੈਸਲਾ ਅਤੇ ਨਤੀਜਾ ਦੇਖਿਆ ਗਿਆ ਵੱਖ-ਵੱਖ ਪਾਸਿਆਂ ਦੁਆਰਾ ਜਾਂ ਵੱਖ-ਵੱਖ ਸਮਿਆਂ ‘ਤੇ ਬਣਿਆ ਹੋਵੇ। ਇਹ ਪਾਠ ਵਿੱਚ ਸਿਖਾਈ ਗਈ ਰਸੀਦ ਫਾਰਮੈਟ ‘ਤੇ ਝੋੜ ਕੇ ਬਣਾਉਂਦਾ ਹੈ।result_hash ਵਿੱਚ ਰੱਖਦੇ ਹੋ। ਅਸਲੀ ਦੁਨੀਆ ਦੇ ਪੇਲੋਡ ਅਕਸਰ ਇੱਕ ਸਿੰਘੇ ਟੂਲ ਕਾਲ ਨਤੀਜੇ ਨਾਲੋਂ ਜ਼ਿਆਦਾ ਧਨ ਹਨ: ਪ੍ਰੀ-ਫੈਸਲਾ ਬਿਚਾਰ (ਮਾਡਲ ਅਨੁਮਾਨ, ਵਿਚਾਰ ਕੀਤੇ ਵਿਕਲਪ, ਸਬੂਤ ਅਤੇ ਉਸਦੀ ਪੂਰਨਤਾ, ਖਤਰਾ ਦਰਜਾ, ਜ਼ਿੰਮੇਵਾਰੀ ਲੜੀ, ਗੇਟ ਨਤੀਜਾ) ਸਾਰੇ ਪੇਲੋਡ ਵਿੱਚ ਰਹਿ ਸਕਦੇ ਹਨ, ਇੱਕ ਰਸੀਦ ਨਾਲ ਸੀਲ ਕੀਤੇ। ਇਹ ਰਸੀਦ ਫਾਰਮੈਟ ਨੂੰ ਨਿਊਨਤਮ ਬਣਾਈ ਰੱਖਦਾ ਹੈ ਜਦੋਂ ਪੇਲੋਡ ਸਕੀਮਾਂ ਖੇਤਰ-ਖੇਤਰ ਬਦਲ ਰਹੀਆਂ ਹੁੰਦੀਆਂ ਹਨ।signature.alg ਫੀਲਡ ML-DSA-65 (NIST ਪੋਸਟ-ਕੁਆਂਟਮ ਦਸਤਖ਼ਤ ਮਿਆਰ) ਲਿਆ ਸਕਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਨੂੰ ਮਾਈਗ੍ਰੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇ। ਇੱਕ ਅਦਲਾ-ਬਦਲੀ ਸਮਾਂਸਾ ਦੇ ਲਈ ਯੋਜਨਾ ਬਣਾਓ ਜਿਸ ਵਿਚ ਰਸੀਦਾਂ ਦੁਹਰਾਈ ਦਸਤਖ਼ਤ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।ਕੰਪਿūਟਰ ਉਪਯੋਗ ਏਜੰਟ ਬਣਾਉਣਾ (CUA)
(ਕਰਿਕੁਲਮ ਸੰਭਾਲਣ ਵਾਲਿਆਂ ਦੁਆਰਾ ਫੈਸਲਾ ਕੀਤਾ ਜਾਵੇਗਾ)
ਅਸਵੀਕਾਰੋਪਣ: ਇਸ ਦਸਤਾਵੇਜ਼ ਦਾ ਅਨੁਵਾਦ ਏਆਈ ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾਵਾਂ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਰੱਖੋ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸਮੱਤਿਆਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਆਪਣੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਕ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਜਰੂਰੀ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅਸੀਂ ਇਸ ਅਨੁਵਾਦ ਦੇ ਉਪਯੋਗ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੀਆਂ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀਆਂ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆਵਾਂ ਲਈ ਜਵਾਬਦੇਹ ਨਹੀਂ ਹਾਂ।