بروتوكول التصديق
يوفر بروتوكول التصديق AuroraSOC التحقق من سلامة البرامج الثابتة من طرف إلى طرف لجميع أجهزة CPS/IoT. يصف هذا المستند البروتوكول عبر الأنظمة الأساسية الذي تم تنفيذه عبر ثلاث مجموعات من البرامج الثابتة وتم التحقق منه بواسطة المحرك الأساسي Rust.
نظرة عامة على البروتوكول
تنسيق الرسالة
حمولة التصديق (الجهاز → الوسيط)
{
"device_id": "stm32_pac_01",
"firmware_hash": "a3f2b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0",
"boot_count": 42,
"signature_hex": "304402201a2b3c4d...f0e1d2c3",
"nonce": "abc123def456",
"board_family": "stm32",
"firmware_stack": "ada_spark",
"firmware_version": "2.0.0"
}
بناء الرسالة الموقعة
الرسالة الموقعة عبارة عن سلسلة بسيطة (بدون محددات):
message = device_id + firmware_hash + boot_count + nonce
مثال:
stm32_pac_01a3f2b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f042abc123def456
يتم بعد ذلك تجزئة هذه الرسالة إلى SHA-256 وتوقيعها باستخدام ECDSA P-256.
التنفيذ لكل منصة
STM32 (آدا/سبارك)
Hardware: PKA (Public Key Accelerator) + HASH peripheral
Key: Stored in OTP (One-Time Programmable) area
Transport: Ethernet → MQTT (TLS 1.3, mTLS)
Interval: Every main loop iteration (5s)
Extras: SPARK-proven relay safety interlock
nRF52840 (سفارة Rust)
Hardware: CryptoCell CC310
Key: Stored in UICR (User Information Configuration Registers)
Transport: BLE → MQTT-SN → ESP32-S3 gateway → MQTT broker
Interval: 5 minutes
Extras: USB honeypot alerts
ESP32-S3 (زفير سي)
Hardware: Software ECDSA (no hardware crypto accelerator)
Key: Stored in NVS (Non-Volatile Storage) partition
Transport: WiFi → MQTT (TLS)
Interval: 5 minutes
Extras: Edge AI anomaly detection
إدارة المفاتيح
تكوين Vault PKI
# Device certificate role
vault write pki/roles/aurorasoc-devices \
key_type=ec \
key_bits=256 \
allow_any_name=true \
enforce_hostnames=false \
max_ttl=8760h \ # 1 year
client_flag=true \
server_flag=false
خصائص الأمن
ما يثبت الشهادة
| ملكية | كيف |
|---|---|
| أصالة البرامج الثابتة | يتطابق تجزئة SHA-256 مع الثنائي المعروف جيدًا |
| هوية الجهاز | يمكن التحقق من توقيع ECDSA فقط باستخدام مفتاح الجهاز |
| ** نضارة ** | عدد التمهيد الرتيب يمنع إعادة التشغيل |
| الحيوية | تثبت الشهادة المنتظمة أن الجهاز قيد التشغيل |
ما لا يثبت الشهادة
| القيد | التخفيف |
|---|---|
| سلامة الذاكرة في وقت التشغيل | غير مغطى (سيحتاج إلى TrustZone/SGX) |
| استخراج المفتاح المادي | يتم كتابة صمامات OTP/UICR لمرة واحدة |
| هجمات القنوات الجانبية | CC310 لديه تدابير مضادة |
| تسوية سلسلة التوريد | خارج النطاق (عملية منفصلة) |
عدد التمهيد مكافحة إعادة التشغيل
يتم تخزين عدد التمهيد في صمامات الأجهزة التي يمكن أن تزيد فقط:
- STM32: منطقة OTP (بتات قابلة للبرمجة لمرة واحدة)
- nRF52840: سجلات UICR (قابلة للمسح فقط من خلال المسح الكامل للرقاقة)
- ESP32-S3: eFuse (قابل للبرمجة لمرة واحدة)
معالجة الفشل
| فشل | استجابة النظام |
|---|---|
| عدم تطابق التوقيع | تنبيه: severity=critical، تم وضع علامة على الجهاز failed |
| انحدار عدد التمهيد | تنبيه: severity=critical، هجوم إعادة تحميل ملفات محتمل |
| انتهت صلاحية الشهادة | تم وضع علامة على الجهاز expired، ويلزم تجديد الشهادة |
| لا توجد استجابة (> 10 دقائق) | يتم تشغيل تنبيه الجهاز الذي يحمل العلامة offline، Prometheus |
| تمريرة هيكلية فقط | تم قبول الجهاز بثقة أقل، وتم وضع علامة عليه لتسجيل المفتاح |
إلغاء الشهادة
عندما يتم اختراق الجهاز، يمكن إلغاء شهادته عبر API:
# Revoke device certificate
curl -X POST http://localhost:8000/api/v1/cps/devices/stm32_pac_01/revoke \
-H "Authorization: Bearer $TOKEN" \
-d '{"reason": "Compromised - tamper detected"}'
يؤدي هذا إلى:
- تم إبطال الشهادة في Vault CRL
- تم ضبط الجهاز
attestation_statusعلىrevoked - يفتح مرحل STM32 على الفور (قفل أمان مثبت بواسطة SPARK)
- تم إنشاء تنبيه لمحللي SOC
- يقوم اتحاد NATS بإعلام المواقع الأخرى
يراقب
تراقب قواعد التنبيه Prometheus صحة التصديق:
- alert: CPSAttestationFailureRate
expr: rate(aurora_attestation_failures_total[5m]) / rate(aurora_attestation_total[5m]) > 0.1
for: 5m
labels:
severity: critical
annotations:
summary: "CPS attestation failure rate exceeds 10%"
- alert: CPSDeviceOffline
expr: time() - aurora_device_last_seen_timestamp > 300
for: 5m
labels:
severity: warning
annotations:
summary: "CPS device hasn't reported in 5+ minutes"