پیاده سازی ویژگی های پیشرفته

مشاهده منبع در GitHub

برخی از ویژگی های پیشرفته، بسته به اینکه در پلتفرم سخت افزاری مورد نظر پشتیبانی می شوند یا نه، اختیاری هستند.

قاب خودکار در انتظار

IEEE 802.15.4 دو نوع روش انتقال داده را بین والدین و فرزند تعریف می کند: انتقال مستقیم و انتقال غیر مستقیم. دومی عمدتاً برای دستگاه‌های انتهایی خواب‌آلود (SED) طراحی شده است که بیشتر اوقات می‌خوابند و به طور دوره‌ای بیدار می‌شوند تا از والدین برای داده‌های در صف نظرسنجی کنند.

  • انتقال مستقیم - والدین یک قاب داده را مستقیماً به دستگاه نهایی ارسال می کند انتقال مستقیم

  • انتقال غیرمستقیم - والد داده ها را تا زمانی که دستگاه نهایی مورد نظر خود درخواست کند نگه می دارد انتقال مستقیم

در مورد غیرمستقیم، یک دستگاه پایانی فرزند ابتدا باید از والدین نظرسنجی کند تا مشخص کند که آیا داده‌ای برای آن موجود است یا خیر. برای انجام این کار، کودک یک درخواست داده ارسال می کند که والدین آن را تأیید می کند. سپس والد تعیین می کند که آیا داده ای برای دستگاه فرزند دارد یا خیر. اگر چنین است، یک بسته داده به دستگاه فرزند ارسال می کند، که دریافت داده ها را تأیید می کند.

اگر رادیو از تنظیم پویا بیت قاب در انتظار در تأییدهای خروجی به SED پشتیبانی می کند، درایورها باید API مطابق آدرس منبع را برای فعال کردن این قابلیت پیاده سازی کنند. OpenThread از این API استفاده می کند تا به رادیو بگوید که بیت در انتظار فریم را برای کدام SED تنظیم کند.

اگر رادیو از تنظیم پویا بیت قاب در انتظار پشتیبانی نمی کند، رادیو ممکن است آدرس منبع منطبق API را حذف کند تا OT_ERROR_NOT_IMPLEMENTED برگرداند.

اسکن انرژی/تشخیص با رادیو

ویژگی اسکن/تشخیص انرژی به تراشه رادیویی نیاز دارد تا انرژی ارائه شده در کانال های انتخابی را نمونه برداری کند و مقدار انرژی شناسایی شده را به لایه بالایی برگرداند.

اگر این ویژگی اجرا نشود، لایه MAC IEEE 802.15.4 یک بسته Beacon Request/Response را برای ارزیابی مقدار انرژی فعلی در کانال ارسال/دریافت می کند.

اگر چیپ رادیویی از اسکن/تشخیص انرژی پشتیبانی می‌کند، مطمئن شوید که منطق اسکن انرژی نرم‌افزار را با تنظیم ماکرو OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0 غیرفعال کنید.

شتاب سخت افزاری برای mbedTLS

mbedTLS چندین ماکرو را در فایل هدر پیکربندی اصلی، mbedtls-config.h تعریف می‌کند تا به کاربران اجازه دهد پیاده‌سازی‌های جایگزین AES، SHA1، SHA2، و ماژول‌های دیگر و همچنین توابع جداگانه برای رمزنگاری منحنی بیضوی (ECC) را روی GF فعال کنند. (p) ماژول. برای اطلاعات بیشتر به شتاب سخت افزاری mbedTLS مراجعه کنید.

OpenThread آن ماکروها را فعال نمی کند، بنابراین الگوریتم های رمزنگاری متقارن، الگوریتم های هش و توابع ECC همگی به طور پیش فرض از پیاده سازی نرم افزار استفاده می کنند. این پیاده سازی ها به حافظه و منابع محاسباتی قابل توجهی نیاز دارند. برای عملکرد بهینه و تجربه کاربری بهتر، توصیه می کنیم برای اجرای عملیات فوق، شتاب سخت افزاری را به جای نرم افزار فعال کنید.

برای فعال کردن شتاب سخت‌افزاری در OpenThread، فایل‌های هدر پیکربندی mbedTLS زیر باید به تعاریف کامپایل ot-config در فایل‌های CMake پلتفرم اضافه شوند:

  • پیکربندی اصلی، که تمام ماکروهای لازم مورد استفاده در OpenThread را تعریف می کند: /openthread/third-party/mbedtls/mbedtls-config.h
  • پیکربندی خاص کاربر، که پیاده سازی های جایگزین ماژول ها و توابع را تعریف می کند: src/ platform-name -mbedtls-config.h

مثال از nrf52811.cmake :

target_compile_definitions(ot-config INTERFACE
    "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\""
)

ماکروهای کامنت‌شده در mbedtls-config.h اجباری نیستند و می‌توانند در فایل هدر پیکربندی خاص کاربر برای شتاب سخت‌افزاری فعال شوند.

برای مثال کامل پیکربندی خاص کاربر، فایل mbedtls_config_autogen.h را در ot-efr32 ببینید.

ماژول AES

OpenThread Security از رمزنگاری AES CCM (Counter with CBC-MAC) برای رمزگذاری/رمزگشایی پیام های IEEE 802.15.4 یا MLE استفاده می کند و کد یکپارچه سازی پیام را تأیید می کند. شتاب سخت‌افزاری حداقل باید از حالت پایه AES ECB (کتاب کتاب الکترونیکی) برای تماس عملکردی پایه AES CCM پشتیبانی کند.

برای استفاده از پیاده سازی جایگزین AES ماژول:

  1. ماکرو MBEDTLS_AES_ALT را در فایل هدر پیکربندی mbedTLS مخصوص کاربر تعریف کنید
  2. با استفاده از متغیر MBEDTLS_CPPFLAGS مسیر فایل aes_alt.h را مشخص کنید.

ماژول SHA256

OpenThread Security از الگوریتم های هش HMAC و SHA256 برای محاسبه مقدار هش برای مدیریت کلید شبکه و تولید PSKc طبق مشخصات موضوع استفاده می کند.

برای استفاده از پیاده سازی ماژول اصلی SHA256 جایگزین:

  1. ماکرو MBEDTLS_SHA256_ALT را در فایل هدر پیکربندی mbedTLS مخصوص کاربر تعریف کنید
  2. با استفاده از متغیر MBEDTLS_CPPFLAGS مسیر فایل sha256_alt.h را مشخص کنید.

توابع ECC

از آنجایی که mbedTLS در حال حاضر تنها از شتاب سخت افزاری برای بخش هایی از توابع ECC پشتیبانی می کند، نه کل ماژول، می توانید برخی از توابع تعریف شده در path-to-mbedtls /library/ecp.c برای تسریع ضرب نقطه ECC پیاده سازی کنید.

منحنی secp256r1 در الگوریتم تبادل کلید پیش نویس ECJPAKE استفاده می شود. از این رو، شتاب سخت افزاری حداقل باید از عملیات منحنی وایرشتراس کوتاه secp256r1 پشتیبانی کند. برای مثال به SiLabs CRYPTO Hardware Acceleration برای mbedTLS مراجعه کنید.

،

مشاهده منبع در GitHub

برخی از ویژگی های پیشرفته، بسته به اینکه در پلتفرم سخت افزاری مورد نظر پشتیبانی می شوند یا نه، اختیاری هستند.

قاب خودکار در انتظار

IEEE 802.15.4 دو نوع روش انتقال داده را بین والدین و فرزند تعریف می کند: انتقال مستقیم و انتقال غیر مستقیم. دومی عمدتاً برای دستگاه‌های انتهایی خواب‌آلود (SED) طراحی شده است که بیشتر اوقات می‌خوابند و به طور دوره‌ای بیدار می‌شوند تا از والدین برای داده‌های در صف نظرسنجی کنند.

  • انتقال مستقیم - والدین یک قاب داده را مستقیماً به دستگاه نهایی ارسال می کند انتقال مستقیم

  • انتقال غیرمستقیم - والد داده ها را تا زمانی که دستگاه نهایی مورد نظر خود درخواست کند نگه می دارد انتقال مستقیم

در مورد غیرمستقیم، یک دستگاه پایانی فرزند ابتدا باید از والدین نظرسنجی کند تا مشخص کند که آیا داده‌ای برای آن موجود است یا خیر. برای انجام این کار، کودک یک درخواست داده ارسال می کند که والدین آن را تأیید می کند. سپس والد تعیین می کند که آیا داده ای برای دستگاه فرزند دارد یا خیر. اگر چنین است، یک بسته داده به دستگاه فرزند ارسال می کند، که دریافت داده ها را تأیید می کند.

اگر رادیو از تنظیم پویا بیت قاب در انتظار در تأییدهای خروجی به SED پشتیبانی می کند، درایورها باید API مطابق آدرس منبع را برای فعال کردن این قابلیت پیاده سازی کنند. OpenThread از این API استفاده می کند تا به رادیو بگوید که بیت در انتظار فریم را برای کدام SED تنظیم کند.

اگر رادیو از تنظیم پویا بیت قاب در انتظار پشتیبانی نمی کند، رادیو ممکن است آدرس منبع منطبق API را حذف کند تا OT_ERROR_NOT_IMPLEMENTED برگرداند.

اسکن انرژی/تشخیص با رادیو

ویژگی اسکن/تشخیص انرژی به تراشه رادیویی نیاز دارد تا انرژی ارائه شده در کانال های انتخابی را نمونه برداری کند و مقدار انرژی شناسایی شده را به لایه بالایی برگرداند.

اگر این ویژگی اجرا نشود، لایه MAC IEEE 802.15.4 یک بسته Beacon Request/Response را برای ارزیابی مقدار انرژی فعلی در کانال ارسال/دریافت می کند.

اگر چیپ رادیویی از اسکن/تشخیص انرژی پشتیبانی می‌کند، مطمئن شوید که منطق اسکن انرژی نرم‌افزار را با تنظیم ماکرو OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0 غیرفعال کنید.

شتاب سخت افزاری برای mbedTLS

mbedTLS چندین ماکرو را در فایل هدر پیکربندی اصلی، mbedtls-config.h تعریف می‌کند تا به کاربران اجازه دهد پیاده‌سازی‌های جایگزین AES، SHA1، SHA2، و ماژول‌های دیگر و همچنین توابع جداگانه برای رمزنگاری منحنی بیضوی (ECC) را روی GF فعال کنند. (p) ماژول. برای اطلاعات بیشتر به شتاب سخت افزاری mbedTLS مراجعه کنید.

OpenThread آن ماکروها را فعال نمی کند، بنابراین الگوریتم های رمزنگاری متقارن، الگوریتم های هش و توابع ECC همگی به طور پیش فرض از پیاده سازی نرم افزار استفاده می کنند. این پیاده سازی ها به حافظه و منابع محاسباتی قابل توجهی نیاز دارند. برای عملکرد بهینه و تجربه کاربری بهتر، توصیه می کنیم برای اجرای عملیات فوق، شتاب سخت افزاری را به جای نرم افزار فعال کنید.

برای فعال کردن شتاب سخت‌افزاری در OpenThread، فایل‌های هدر پیکربندی mbedTLS زیر باید به تعاریف کامپایل ot-config در فایل‌های CMake پلتفرم اضافه شوند:

  • پیکربندی اصلی، که تمام ماکروهای لازم مورد استفاده در OpenThread را تعریف می کند: /openthread/third-party/mbedtls/mbedtls-config.h
  • پیکربندی خاص کاربر، که پیاده سازی های جایگزین ماژول ها و توابع را تعریف می کند: src/ platform-name -mbedtls-config.h

مثال از nrf52811.cmake :

target_compile_definitions(ot-config INTERFACE
    "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\""
)

ماکروهای کامنت‌شده در mbedtls-config.h اجباری نیستند و می‌توانند در فایل هدر پیکربندی خاص کاربر برای شتاب سخت‌افزاری فعال شوند.

برای مثال کامل پیکربندی خاص کاربر، فایل mbedtls_config_autogen.h را در ot-efr32 ببینید.

ماژول AES

OpenThread Security از رمزنگاری AES CCM (Counter with CBC-MAC) برای رمزگذاری/رمزگشایی پیام های IEEE 802.15.4 یا MLE استفاده می کند و کد یکپارچه سازی پیام را تأیید می کند. شتاب سخت‌افزاری حداقل باید از حالت پایه AES ECB (کتاب کتاب الکترونیکی) برای تماس عملکردی پایه AES CCM پشتیبانی کند.

برای استفاده از پیاده سازی جایگزین AES ماژول:

  1. ماکرو MBEDTLS_AES_ALT را در فایل هدر پیکربندی mbedTLS مخصوص کاربر تعریف کنید
  2. با استفاده از متغیر MBEDTLS_CPPFLAGS مسیر فایل aes_alt.h را مشخص کنید.

ماژول SHA256

OpenThread Security از الگوریتم های هش HMAC و SHA256 برای محاسبه مقدار هش برای مدیریت کلید شبکه و تولید PSKc طبق مشخصات موضوع استفاده می کند.

برای استفاده از پیاده سازی ماژول اصلی SHA256 جایگزین:

  1. ماکرو MBEDTLS_SHA256_ALT را در فایل هدر پیکربندی mbedTLS مخصوص کاربر تعریف کنید
  2. با استفاده از متغیر MBEDTLS_CPPFLAGS مسیر فایل sha256_alt.h را مشخص کنید.

توابع ECC

از آنجایی که mbedTLS در حال حاضر تنها از شتاب سخت افزاری برای بخش هایی از توابع ECC پشتیبانی می کند، نه کل ماژول، می توانید برخی از توابع تعریف شده در path-to-mbedtls /library/ecp.c برای تسریع ضرب نقطه ECC پیاده سازی کنید.

منحنی secp256r1 در الگوریتم تبادل کلید پیش نویس ECJPAKE استفاده می شود. از این رو، شتاب سخت افزاری حداقل باید از عملیات منحنی وایرشتراس کوتاه secp256r1 پشتیبانی کند. برای مثال به SiLabs CRYPTO Hardware Acceleration برای mbedTLS مراجعه کنید.