wolfIP ΠΈ passt — лСгковСсныС стСки TCP/IP, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π±Π΅Π· динамичСского выдСлСния памяти

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ криптографичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ wolfSSL Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ TCP/IP стСк wolfIP, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для использования Π½Π° встраиваСмых устройствах, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ рСсурсы, Π° Ρ‚Π°ΠΊΠΆΠ΅ для систСм, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ надёТности (Safety-Critical). Для прСдсказуСмого потрСблСния рСсурсов Π² wolfIP Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти β€” всС Π±ΡƒΡ„Π΅Ρ€Ρ‹ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сокСтов ΠΈΠΌΠ΅ΡŽΡ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° этапС компиляции. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv3.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ пространствС TCP/IP-стСка, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π³ΠΎ сСтСвой стСк Linux, FreeBSD ΠΈ macOS, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ для примСнСния Π²ΠΎ встраиваСмых систСмах Π½Π° Π±Π°Π·Π΅ FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks ΠΈ QNX. Помимо этого Π½Π° Π±Π°Π·Π΅ wolfIP ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ самодостаточныС сСтСвыС прилоТСния, запускаСмыС ΠΏΠΎΠ²Π΅Ρ€Ρ… оборудования (bare-metal). Π’ сочСтании с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ wolfSSL прСдоставляСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TLS 1.3, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ встраиваСмыС систСмы, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ HTTPS.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности wolfIP:

  • ИспользованиС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сСтСвых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² статичСской памяти Π±ΡƒΡ„Π΅Ρ€ΠΎΠ². Π’Ρ‹Π·ΠΎΠ²Ρ‹ malloc ΠΈ free Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования вмСсто ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… систСмных сСтСвых стСков Π½Π° POSIX-систСмах.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° BSD-сокСтов Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.
  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (4200 строк ΠΊΠΎΠ΄Π°, Π² 4 Ρ€Π°Π·Π° мСньшС TCP/IP стСка lwIP).
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСтСвых интСрфСйсов STM32 Ethernet.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования сСтСвого интСрфСйса TAP для тСстирования Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Π· оборудования.
  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с оглядкой Π½Π° систСмы с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ трСбованиями ΠΊ бСзопасности: дСтСрминированная ΠΈ воспроизводимая конфигурация; модСль развёртывания, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (Secure-by-default); изоляция ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° бСзопасного обновлСния вСрсий; Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сопровоТдСниС.
  • Π£Ρ‡Ρ‘Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ высоконадёТным систСмам: отсутствиС динамичСского выдСлСния рСсурсов; фиксированныС ΠΏΡƒΠ»Ρ‹ памяти; ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ использованиС рСсурсов; прСдсказуСмоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅; упрощённая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°; ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² для Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • РСализация IPv4, UDP, TCP, IPSEC, ARP, ICMP, DHCP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, DNS-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ HTTP/HTTPS-сСрвСра. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ TCP RFC 7323 (TCP Timestamps, RTT measurement, PAWS, Window Scaling), MSS (Maximum Segment Size), RTO (Retransmission timeout) ΠΈ SACK (Selective Acknowledgment). НСсколько Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² контроля ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ (congestion control).

Из ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ wolfIP отмСчаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования wolfIP Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, способного ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ соСдинСния, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ сСтСвыми интСрфСйсами.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ сотрудником Red Hat ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ TCP/IP стСка passt, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ пространствС ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ passt развиваСтся для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π° связи ΠΌΠ΅ΠΆΠ΄Ρƒ хост-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ гостСвыми систСмами Π² QEMU Π² качСствС Π±ΠΎΠ»Π΅Π΅ бСзопасной Π·Π°ΠΌΠ΅Π½Ρ‹ libslirp. Код passt написан Π½Π° языкС Π‘ΠΈ, насчитываСт ΠΎΠΊΠΎΠ»ΠΎ 5000 строк ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2+.

Из особСнностСй passt ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° IPv6 ΠΏΠΎΠΌΠΈΠΌΠΎ IPv4, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ инструкций AVX2, Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ synflood, встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° QEMU, libvirt ΠΈ Podman, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для всСх популярных дистрибутивов, сСрвис ARP proxy, минималистичныС сСрвСры DHCPD, DHCPv6 ΠΈ NDP, seccomp-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для блокирования всСх Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° NAT, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² качСствС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ slirp4netns.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ