تشرح هذه الصفحة كيفية تمكين MACsec لميزات Ethernet.
استخدام MACsec لمصادقة شبكة إيثرنت وتشفيرها الاتصالات المستخدمة من قبل نظام الترفيه والمعلومات داخل المركبة (IVI) لوحدات وحدة ECU المختلفة لحماية البيانات الناتجة عن التلاعب أو إعادة التشغيل أو الإفصاح عن المعلومات. هل تؤدي عملية الشراء هذه إلى التفعيل MACsec IEEE 802.11AE لشبكة ethernet.
نظرة عامة
لتفعيل MACsec، يتم استخدام wpa_supplicant
كبرنامج خفي للتعامل مع
تأكيد اتصال اتفاقية مفتاح MACsec (MKA) يتم تحديد HAL MACsec لتخزين رمز MACsec.
الذي يُطلق عليه اسم مفتاح ربط الاتصال (CAK) بأمان. إطار MACsec
ويدعم CAK فقط. يقوم هذا الجزء الخاص بالمورّد (MACsec HAL) بتخزين CAK بأمان في أي عملية تحايل
مساحة تخزين مقاومة. يعتمد توفير المفتاح على تنفيذ المورِّد.
تدفق MACsec
يوضح الشكل 1 تدفق MACsec على الوحدة الرئيسية.
تفعيل MACsec
لتقديم دعم للوظائف باستخدام مفتاح MACsec CAK، يجب أن يكون MACsec لـ ethernet تفعيلها بشكل صريح باستخدام طبقة تجريد الأجهزة (HAL) MACsec الخاصة بالمورِّد.
لتفعيل هذه الميزة، يجب تفعيل wpa_supplicant_macsec
وميزة
macsec-service
إلى PRODUCT_PACKAGES
وملف الإعداد
في wpa_supplicant_macsec
، init rc
نص برمجي
PRODUCT_COPY_FILES
على سبيل المثال، ملف [device-product].mk
هذا:
# MACSEC HAL # This is a mock MACsec HAL implementation with keys embedded in it. Replace with vendor specific HAL PRODUCT_PACKAGES += android.hardware.automotive.macsec-service # wpa_supplicant build with MACsec support PRODUCT_PACKAGES += wpa_supplicant_macsec # configuration file for wpa_supplicant with MACsec PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/wpa_supplicant_macsec.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wpa_supplicant_macsec.conf \ $(LOCAL_PATH)/wpa_supplicant_macsec.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/wpa_supplicant_macsec.rc
مثلاً: wpa_supplicant_macsec.conf
# wpa_supplicant_macsec.conf eapol_version=3 ap_scan=0 fast_reauth=1 # Example configuration for MACsec with preshared key # mka_cak is not actual key but index for MACsec HAL to specify which key to use # and make_cak must be either 16 digits or 32 digits depends the actually CAK key length. network={ key_mgmt=NONE eapol_flags=0 macsec_policy=1 macsec_replay_protect=1 macsec_replay_window=0 mka_cak=00000000000000000000000000000001 mka_ckn=31323334 mka_priority=128 }
نموذج wpa_supplicant_macsec.conf
في eth0
عندما تعمل شبكات متعددة
يجب حماية الواجهات باستخدام MACsec، يمكنك بدء خدمات متعددة.
# wpa_supplicant_macsec.rc service wpa_supplicant_macsec /vendor/bin/hw/wpa_supplicant_macsec \ -dd -i eth0 -Dmacsec_linux -c /vendor/etc/wpa_supplicant_macsec.conf oneshot
ابدأ تشغيل wpa_supplicant_macsec
بعد أن تصبح واجهة ethernet جاهزة. إذا كانت
نظام ethernet غير جاهز، سيعرض wpa_supplicant
رسالة خطأ على الفور.
لتجنب ظروف السباق، يجب الانتظار (المهلة الافتراضية هي خمس (5) ثوانٍ)
قد تحتاج إلى /sys//class/net/${eth_interface}
.
# init.target.rc on late-fs … wait /sys/class/net/eth0 start wpa_supplicant_macsec …
إعداد عنوان IP لواجهة MACsec
يمكن إجراء ضبط عنوان IP لواجهة MACsec من خلال اتصال النظام مدير المشروعات بمجرد بدء الزيجة. في ما يلي مثال على ملف XML متراكب للاتصال. إذا كانت يجب أن يكون عنوان IP لواجهة MACsec جاهزًا قبل بدء الزيجوت، وهو جدول زمني محدد على البرنامج الخفي الاستماع إلى واجهة macsec0 وإعدادها بدلاً من ذلك، لا يبدأ مدير اتصال النظام إلا بعد بدء الدالة الزائفة.
# Example of com.google.android.connectivity.resources overlay config <?xml version="1.0" encoding="utf-8"?> <!-- Resources to configure the connectivity module based on each OEM's preference. --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Whether the internal vehicle network should remain active even when no apps requested it. --> <bool name="config_vehicleInternalNetworkAlwaysRequested">true</bool> <string-array translatable="false" name="config_ethernet_interfaces"> <!-- Not metered, trusted, not vpn, vehicle, not vcn managed, restricted --> <item>macsec0;11,14,15,27,28;ip=10.10.10.2/24 gateway=10.10.10.1 dns=4.4.4.4,8.8.8.8</item> </string-array> <string translatable="false" name="config_ethernet_iface_regex">macsec\\d</string> </resources>
طبقة تجريد الأجهزة (MACsec) HAL
يجب أن ينفّذ HAL الخاص بمورّد MACsec الدوال التالية لحماية CAK
المفتاح. تتم كل عمليات التشفير وفك التشفير باستخدام المفتاح مباشرةً بدون الكشف عن المفتاح
wpa_supplicant
/** * MACSEC pre-shared key plugin for wpa_applicant * * The goal of this service is to provide function for using the MACSEC CAK * */ @VintfStability interface IMacsecPSKPlugin { /** * For xTS test only, not called in production * * @param keyId is key id to add * @param CAK, CAK key to set * @param CKN, CKN to set * * @return ICV. */ void addTestKey(in byte[] keyId, in byte[] CAK, in byte[] CKN);
/** * Use ICV key do AES CMAC same as ieee802_1x_icv_aes_cmac in wpa_supplicant * * @param keyId is key id to be used for AES CMAC * @param data * * @return ICV. */ byte[] calcICV(in byte[] keyId, in byte[] data);
/** * KDF with CAK key to generate SAK key same as ieee802_1x_sak_aes_cmac in wpa_supplicant * * @param keyId is key id to be used for KDF * @param seed is key seed (random number) * @param sakLength generated SAK length (16 or 32) * * @return SAK key. */ byte[] generateSAK(in byte[] keyId, in byte[] data, in int sakLength);
/** * Encrypt using KEK key, this is same as aes_wrap with kek.key in wpa_supplicant * which used to wrap a SAK key * * @param keyId is key id to be used for encryption * @param sak is SAK key (16 or 32 bytes) to be wrapped. * * @return wrapped data using KEK key. */ byte[] wrapSAK(in byte[] keyId, in byte[] sak);
/** * Decrypt using KEK key, this is same as aes_unwrap with kek.key in wpa_supplicant * which used to unwrap a SAK key * * @param keyId is key id to be used for decryption * @param sak is wrapped SAK key. * * @return unwrapped data using KEK key. */ byte[] unwrapSAK(in byte[] keyId, in byte[] sak); }
تطبيق المرجع
يتوفر عنصر تنفيذ مرجعي في
hardware/interfaces/macsec/aidl/default
، الذي يوفر برامج
وتنفيذ HAL مع تضمين المفاتيح بداخله. توفّر طريقة التنفيذ هذه فقط
مرجع عملي إلى طبقة تجريد الأجهزة (HAL) لأن المفاتيح لا تدعمها وحدة تخزين مقاوم للتلاعب.
اختبار طبقة تجريد الأجهزة (HAL) MACsec
يتم توفير اختبار HAL MACsec في
hardware/interfaces/automotive/macsec/aidl/vts/functional
لإجراء الاختبار:
$ atest VtsHalMacsecPskPluginV1Test
وهذا يستدعي addTestKey
-- لإدخال مفتاح اختبار في HAL وللتحقق مقابل
القيم المتوقعة لـ calcIcv
وgenerateSak
وwrapSak
unwrapSak
للتأكد من عمل MACsec، بالنسبة إلى اختبارات التكامل، يجب إجراء اختبار الاتصال بين جهازين في واجهة MACsec:
# ping -I macsec0 10.10.10.1
لاختبار حبَّار مع المضيف،
قيمة echo 8 > /sys/devices/virtual/net/cvd-ebr/bridge/group_fwd_mask
في المضيف هي
اللازمة للسماح بالمرور في إطارات LLDP المطلوبة لـ MACsec.