الانتقال إلى المحتوى الرئيسي
تقرير الامتثال مفيد لمدقق فقط إذا استطاع الوثوق بأنه لم يُحرَّر منذ أن ولّدته. يحمل كل تقرير ينتجه OrcaRouter شيئين يجعلان ذلك الفحص ممكناً دون أي وصول لحساب: تجزئة محتوى SHA-256 للأدلة القانونية وتوقيع Ed25519 على تلك التجزئة. تعرض هذه الصفحة كيف تتحقق من تقرير امتثال — اجلب المفتاح العام، وأكّد التجزئة، وافحص التوقيع — مستخدماً نقاط نهاية عامة فقط. حالة الاستخدام ملموسة: تسلّم مدققاً تقريراً موقّعاً (أو رابط بوابة مشاركة)، ويحتاج إلى إثبات أنه أصلي وغير معبوث به قبل أن يعتمد عليه. لا يلمس أبداً مساحة عملك، أو مفتاحك، أو وحدة التحكم.

1. ما الذي يسافر مع التقرير

ثلاث قيم تجعل التقرير ذاتي التحقق. تظهر على مُنتَج التقرير وعلى بيانات بوابة المشاركة العامة الوصفية للرابط.
خلاصة SHA-256 بصيغة hex بحروف صغيرة لأدلة JSON القانونية للتقرير. البايتات حتمية لتقرير معطى، فأي شخص يملك نفس الأدلة يعيد حساب التجزئة المطابقة. أي تحرير للأدلة يغيّر هذه القيمة.
توقيع Ed25519 بصيغة base64 محسوب على content_hash بصيغة hex. يثبت أن التجزئة وُقِّعت بمفتاح توقيع OrcaRouter ولم تُزوَّر.
معرّف قصير ثابت للمفتاح العام النشط (مثلاً orca- متبوعاً بشظية hex). يستخدمه المُتحقِّق لتأكيد أن التقرير وُقِّع بالمفتاح المنشور حالياً — تقرير موقّع بمعرّف مفتاح مجهول يفشل مغلقاً.
يغطي التوقيع تجزئة المحتوى، لا بايتات PDF أو CSV أو JSON المُعرَّضة مباشرةً. تُعرَض نفس الأدلة إلى الصيغ الثلاث جميعاً من تجزئة واحدة، فضمان السلامة على الأدلة الأساسية — كل تصدير لتقرير معطى يتشارك content_hash وsignature وsig_key_id واحداً.

2. اجلب المفتاح العام

يُنشَر مفتاح التوقيع العام عند نقطة نهاية مفتوحة — لا استيثاق، ولا سياق مساحة عمل. يستدعيها مدقق مباشرةً.
curl https://api.orcarouter.ai/api/public/compliance/pubkey
{
  "success": true,
  "message": "",
  "data": {
    "algo": "ed25519",
    "key_id": "orca-1a2b3c4d5e6f",
    "public_key": "base64-encoded-ed25519-public-key"
  }
}
public_key هو مفتاح Ed25519 العام بطول 32 بايت مُرمّز بـ base64. يجب أن يطابق key_id هنا sig_key_id على التقرير — إن لم يطابق، فقد وُقِّع التقرير بمفتاح مختلف (مدوَّر أو أقدم على الأرجح) ولن يتحقق مقابل هذا المفتاح المنشور.

3. تحقّق من التوقيع

يمكنك التحقق من التوقيع بطريقتين. إما أن تطلب من OrcaRouter فحص الثلاثية نيابةً عنك، أو تتحقق بالكامل دون اتصال بالمفتاح العام المنشور.

نقطة نهاية التحقق المستضافة

أرسل (POST) القيم الثلاث من التقرير إلى نقطة نهاية التحقق المفتوحة. إنها عامة — يستدعيها مدقق دون أوراق اعتماد.
curl -X POST https://api.orcarouter.ai/api/public/compliance/verify \
  -H "Content-Type: application/json" \
  -d '{
    "content_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
    "signature": "base64-ed25519-signature-from-the-report",
    "sig_key_id": "orca-1a2b3c4d5e6f"
  }'
{
  "success": true,
  "message": "",
  "data": {
    "valid": true,
    "key_id": "orca-1a2b3c4d5e6f"
  }
}
valid: true يعني أن التوقيع صحيح مقابل المفتاح النشط لمعرّف المفتاح ذاك. valid: false يعني إما أن التوقيع لا يطابق التجزئة، أو أن التجزئة فارغة، أو أن sig_key_id لا يطابق المفتاح المنشور حالياً.
تردّ نقطة نهاية التحقق key_id النشط. قارنه بـ sig_key_id الذي أرسلته: إن اختلفا، فقد وُقِّع التقرير بمفتاح لم يعد النشط، وهذا سبب فشل التحقق.

التحقق دون اتصال بالمفتاح العام

المدقق المتشكّك لا يحتاج للوثوق بنقطة نهاية التحقق إطلاقاً. ولأن الخوارزمية هي Ed25519 قياسية على تجزئة المحتوى بصيغة hex، فالتوقيع قابل للفحص بأي مكتبة تشفير:
import base64
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey

# public_key from GET /api/public/compliance/pubkey
pub = Ed25519PublicKey.from_public_bytes(base64.b64decode(PUBLIC_KEY_B64))

# content_hash + signature from the report
message = CONTENT_HASH.encode()            # the hex hash string, as bytes
signature = base64.b64decode(SIGNATURE_B64)

pub.verify(signature, message)             # raises if invalid; returns None if valid
الرسالة الموقّعة هي سلسلة تجزئة hex نفسها، مُرمّزة كبايتات ASCII — لا البايتات الـ 32 الخام التي تُفكَّك إليها التجزئة. مرّر قيمة content_hash كما هي قبل التحقق من التوقيع، وإلا سيفشل الفحص على تقرير صحيح.

4. ما الذي يغطّيه التوقيع

التوقيع يثبت أن content_hash للتقرير وُقِّع بواسطة OrcaRouter، والتجزئة تثبت أن الأدلة غير محرَّرة. دقّة واحدة: تُحسَب التجزئة على صيغة قانونية من الأدلة التي تبنيها البوابة — لا على البايتات الخام لملف JSON أو PDF. لذا إعادة تجزئة المُنتَج المُنزَّل بنفسك لن تعيد إنتاج content_hash. استخدم نقطة نهاية التحقق (§2/§3)، التي تعيد حساب التجزئة القانونية وتفحص توقيع Ed25519 نيابةً عنك:
الفحصالمعنى
signature_valid: trueوُقِّع content_hash بمفتاح OrcaRouter — الأدلة أصلية وغير محرَّرة.
معرّف المفتاح يطابقsig_key_id للتقرير == معرّف المفتاح المنشور ← موقّع بالمفتاح النشط.
نجاح الاثنين يعني أن التقرير أصلي وغير معبوث به. توقيع فاشل يعني أن التجزئة أو الأدلة أو معرّف المفتاح لا ينتمي لمفتاح توقيع OrcaRouter.

5. التحقق من تقرير مُشارَك

عندما ترسل لمدقق رابط بوابة مشاركة بدلاً من الملف، تحمل بيانات البوابة الوصفية بالفعل content_hash و signature وsig_key_id، إضافةً إلى علامة signature_valid محسوبة على الخادم. يستطيع المدقق الوثوق بالعلامة و إعادة تشغيل الفحوص أعلاه مقابل المفتاح العام باستقلالية — لا تحتاج بوابة المشاركة تسجيل دخول، ومسار التحقق متطابق.
لا يُقدَّم مُنتَج مُشارَك إلا بينما لا تزال منطقته المختومة تطابق منطقة إقامة البيانات المُعلَنة لمساحة عملك. إذا غُيِّرت المنطقة، تُحجَب التنزيلات حتى لو بقيت بيانات التوقيع الوصفية قابلة للتحقق. هذا بحسب التصميم — انظر القراءات العابرة للمناطق.

6. إلى أين تذهب بعد ذلك

التقارير الموقّعة

كيف يُولَّد تقرير موقّع، وأي أدلة يلتقط، وكيف تسكك رابط مشاركة مدقق.

تصدير الأدلة

اسحب أدلة التقرير كـ PDF أو CSV أو JSON لأوراق عمل مدققك.

إقامة البيانات

كيف يحكم ختم المنطقة على تقرير أين يُخزَّن ويُقدَّم.

المسؤولية المشتركة

ما الذي يضمنه OrcaRouter على مسار البوابة مقابل ما يبقى لك.
مفتاح التوقيع هو ملك OrcaRouter؛ والتحقق ملك الجميع. ذلك الفصل هو المغزى كله — يثبت مدقق أن تقريراً أصلي دون أن يحتاج أبداً وصولاً لمساحة العمل التي أنتجته.