این صفحه نحوه فعال کردن MACsec را برای ویژگیهای اترنت توضیح میدهد.
از MACsec برای احراز هویت و رمزگذاری ارتباطات اترنت مورد استفاده توسط سیستم اطلاعات سرگرمی داخل خودرو (IVI) برای واحدهای ECU مختلف استفاده کنید و از داده ها در برابر دستکاری، پخش مجدد یا افشای اطلاعات محافظت کنید. این کار را با فعال کردن MACsec IEEE 802.11AE برای شبکه اترنت انجام دهید.
برای فعال کردن MACsec، wpa_supplicant
به عنوان شبح برای مدیریت توافق نامه کلید MACsec (MKA) استفاده می شود. یک MACsec HAL برای ذخیره کردن کلید پیش اشتراکگذاری شده MACsec تعریف شده است که به آن کلید ارتباط اتصال (CAK) میگویند. MACsec HAL فقط از CAK پشتیبانی می کند. این MACsec HAL مخصوص فروشنده، CAK را به طور ایمن در یک ذخیره سازی مقاوم در برابر دستکاری ذخیره می کند. تهیه کلید به پیاده سازی فروشنده بستگی دارد.
شکل 1 جریان MACsec روی یونیت سر را نشان می دهد. برای ارائه پشتیبانی از عملکردها با کلید MACsec CAK، MACsec برای اترنت باید به صراحت با یک MACsec HAL خاص فروشنده فعال شود. برای فعال کردن این ویژگی، برای مثال، این فایل به عنوان مثال، نمونه پس از آماده شدن رابط اترنت، پیکربندی آدرس IP رابط MACsec می تواند توسط مدیر اتصال سیستم پس از راه اندازی zygote انجام شود. در اینجا یک نمونه فایل XML همپوشانی برای اتصال است. اگر آدرس IP رابط MACsec باید قبل از شروع zygote آماده باشد، یک دیمون خاص فروشنده باید به رابط macsec0 گوش دهد و در عوض آن را پیکربندی کند زیرا مدیر اتصال سیستم فقط پس از شروع zygote شروع به کار می کند. HAL مخصوص فروشنده MACsec باید توابع زیر را برای محافظت از کلید CAK اجرا کند. تمام رمزگذاری و رمزگشایی با کلید مستقیماً بدون قرار گرفتن کلید در معرض یک پیادهسازی مرجع در تست HAL MACsec در برای اجرای تست: این برای تایید کارکرد MACsec، برای تست های یکپارچه سازی، بین دو ماشین در رابط MACsec پینگ کنید: برای آزمایش Cuttlefish با میزبان، 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
راه اندازی کنید. اگر اترنت سیستم آماده نباشد، wpa_supplicant
بلافاصله یک خطا را برمیگرداند. برای اجتناب از شرایط مسابقه، ممکن است به یک انتظار (تایم وقفه پیشفرض پنج (5) ثانیه است) برای /sys//class/net/${eth_interface}
نیاز باشد.
# init.target.rc
on late-fs
…
wait /sys/class/net/eth0
start wpa_supplicant_macsec
…
# 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>
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 ارائه می دهد زیرا کلیدها توسط ذخیره سازی مقاوم در برابر دستکاری پشتیبانی نمی شوند.hardware/interfaces/automotive/macsec/aidl/vts/functional
ارائه شده است.
$ atest VtsHalMacsecPskPluginV1Test
addTestKey
فراخوانی می کند -- برای درج یک کلید تست در HAL و بررسی مقادیر مورد انتظار برای calcIcv
, generateSak
, wrapSak
و unwrapSak
.
# ping -I macsec0 10.10.10.1
echo 8 > /sys/devices/virtual/net/cvd-ebr/bridge/group_fwd_mask
در میزبان مورد نیاز است تا اجازه عبور از فریمهای LLDP مورد نیاز برای MACsec را بدهد.