WolfSSL

wolfSSL （） は組込みシステム開発者の使用に向けた小型で移植性の高い組み込みSSL/TLSライブラリである。TLS (SSL 3.0, TLS 1.0, 1.1, 1.2, 1.3, DTLS 1.0, 1.2, 1.3)のオープンソース実装でC言語で書かれている。SSL/TLSクライアントライブラリとサーバライブラリが含まれ、SSLとTLSで定義される各種APIほかをサポートする。またOpenSSLで主に利用されている関数と互換のインタフェースを実現している。

wolfSSL/CyaSSLの前身であるyaSSLは、組み込み環境やリソースの限られたリアルタイムOS向けのC++で書かれたSSLライブラリである。

プラットフォーム
wolfSSLは、Win32/64、Linux、macOS、Solaris、Threadx、VxWorks、FreeBSD、NetBSD、OpenBSD、組み込みLinux、Yocto Project、OpenEmbedded、Microsoft Windows Embedded CE、Haiku、OpenWrt、iPhone、Android、Nintendo Wii およびDevKitProを通じてGamecube、QNX、MontaVista、TRON、ITRON、µITRON、NonStop、OpenCL、 MicriumのMicroC/OS-II、FreeRTOS、SafeRTOS、フリースケールMQX、Nucleus、TinyOS、TI-RTOS、HP-UX、uTasker、uT-kernel、INtime、mbed、RIOT、CMSIS-RTOS、FROSTED、Green Hills INTEGRITY、Keil RTX、TOPPERS、PetaLinux、Apache Mynewt、PikeOS、およびembOSにおいて利用可能である。

歴史
CyaSSLの始まりは2004年に遡る。2004年当時、OpenSSLがSSLライブラリとして利用可能であったが、そのライセンスはOpenSSL License および SSLeay licenseでのデュアルライセンスという独特のものであった。yaSSLは、商用ライセンスとGPLでのデュアルライセンスにおいて利用可能なOpenSSLの代替として開発された。yaSSLはより洗練されたAPI、商用開発におけるサポート、OpenSSLとの完全な互換性を提供した。yaSSLは始めMySQLで利用された。この結果、yaSSLはMySQLへの組込みを通して数百万単位の極めて広い普及を実現した。

現在、wolfSSLはオープンソース、商用プロジェクトの双方で利用されている。wolfSSLは車載スマートデバイス、IP電話、携帯電話、ルータ、プリンタやクレジットカード・スキャナのようなさまざまな種類のネットワーク・デバイスに組み込まれている。

2019年2月にcURLの作成者であるDaniel StenbergがwolfSSLへ加わった

プロトコル

wolfSSLは以下の各種プロトコルを実現している:
 SSL 3.0、TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3
 DTLS 1.0、DTLS 1.2、DTLS 1.3
ただし、SSL 2.0は安全性の問題から含まれていない。また、SSL 3.0は既定では無効とされている。

アルゴリズム
wolfSSLは以下の暗号化ライブラリーを使用している:

wolfCrypt
wolfSSLは標準ではwolfCryptを使用する。wolfCryptは、SSLのようなものに向けて必要な機能に特化する一方で、最大限のポータビリティーが得られるように配慮されている。wolfCryptはRSA、楕円曲線暗号、DSS、Diffie Hellman、EDH、NTRU、DES、Triple DES、AES (CBC、CTR、CCM、GCM)、Camellia、IDEA、ARC4、HC-128、ChaCha20、MD2、MD4、MD5、SHA-1、SHA-2、SHA-3、BLAKE2、RIPEMD-160、Poly1305、乱数生成、大規模整数演算、ベース16/64エンコーディング/デコーディングに対応する。欧州のeSTREAMのパブリックドメインのストリーム暗号Rabbitも含まれている。Rabbitは高性能、高負荷環境での暗号化のために有効であると考えられる。

wolfCryptはCurve25519とEd25519をサポートする。

wolfCryptは、例えば ケルベロス認証のようないくつかのソフトウェア・パッケージやライブラリーのバックエンド暗号化インプリメンテーションとして活躍している。

NTRU
CyaSSL+にはNTRUによる公開鍵暗号化が含まれている。 CyaSSL+へのNTRUの追加はwolfSSLとSecurity Innovation. のパートナーシップによって実現した。NTRUは、他の公開鍵暗号と同レベルのセキュリティをより小さなビット数で実現できるため、モバイルや組込み環境でうまく機能する。NTRUはまた、公開鍵暗号化へのquantum attackに対しても脆弱性が知られていない。CyaSSL+ではAES-256、RC4、または HC-128など、NTRUを使用したいくつかの暗号スイートが利用可能である。

SGX
wolfSSLはインテル SGX(ソフトウェア保護拡張)をサポートする。インテル SGXは攻撃対象領域を減らし、既存のコードで目立った性能の低下なくより高いレベルの安全性を確保している。

暗号化ハードウェアアクセラレーションのサポート対象

 セキュアエレメント 

 STSAFE
 ATECC508A

 ハードウェア暗号 
サポート対象のハードウェア暗号とアルゴリズムの組み合わせ
+AES 暗号モードデバイスAES-GCMAES-CCMAES-CBCAES-ECBAES-CTRIntel AES-NI
(Xeon and Core processor families)AllAllAllAllAllFreescale
Cryptographic Accelerator and Assurance Module (CAAM)AllAllAllAllFreescale Coldfire SEC
(NXP MCF547X and MCF548X)AllFreescale Kinetis MMCAU
K50, K60, K70, and K80 (ARM Cortex-M4 core)AllAllAllAllSTMicroelectronics STM32
F1, F2, F4, L1, W Series (ARM Cortex - M3/M4)AllAllCavium NITROX
(III/V PX processors)AllMicrochip PIC32 MX/MZ
(Embedded Connectivity)AllAllAllTexas Instruments TM4C1294
(ARM Cortex-M4F)AllAllAllAllAllNordic NRF51 
(Series SoC family, 32-bit ARM Cortex M0 processor core)128-bitARMv8AllAllAllIntel QuickAssist TechnologyAllAllFreescale NXP LTCAllAllAllAllAllXilinx Zynq UltraScale+256-bitRenesas RX65N (R5F565NEHDFB)AllAllRenesas RX72N (RTK5RX72N0C00000BJ)AllAllRenesas RX MPU (R5F571MLDDFC)AllAllRenesas Synergy DK-S7G2128-bit

- "All" は、128、192、および 256 ビットのサポートされているブロックサイズ。
+DES/3DES 暗号モードデバイスDES-CBCDES-ECB3DES-CBCFreescale Coldfire SEC
(NXP MCF547X and MCF548X)64 bit192 bitFreescale Kinetis MMCAU
K50, K60, K70, and K80 (ARM Cortex-M4 core)64 bit192 bitSTMicroelectronics STM32
F1, F2, F4, L1, W Series (ARM Cortex - M3/M4)64 bit64 bit (encrypt)192 bitCavium NITROX
(III/V PX processors)192 bitMicrochip PIC32 MX/MZ
(Embedded Connectivity)64 bit192 bitTexas Instruments TM4C1294
(ARM Cortex-M4F)64 bit192 bit
+ストリーム暗号デバイスRC4ChaCha20AVX1/AVX2
(Intel and AMD x86)SupportedCavium NITROX
(III/V PX processors)2048 bit max.
+ハッシュアルゴリズム サポートデバイスMD5SHA1SHA2SHA-256SHA-384SHA-512AVX1/AVX2
(Intel and AMD x86)SupportedSupportedSupportedFreescale Kinetis MMCAU
K50, K60, K70, and K80 (ARM Cortex-M4 core)SupportedSupportedSupportedSTMicroelectronics STM32
F1, F2, F4, L1, W Series (ARM Cortex - M3/M4)SupportedSupportedMicrochip PIC32 MX/MZ
(Embedded Connectivity)SupportedSupportedSupportedARMv8SupportedIntel QuickAssist TechnologySupportedSupportedSupportedFreescale NXP LTCSupportedSupportedXilinx Zynq UltraScale+SupportedRenesas Synergy DK-S7G2SupportedSupportedRenesas RX65N (R5F565NEHDFB)SupportedSupportedRenesas RX72N (RTK5RX72N0C00000BJ)SupportedSupportedSupportedRenesas RX MPU (R5F571MLDDFC)SupportedSupportedSupported
+鍵演算: 生成と交換、楕円曲線暗号デバイスRSAECCECC-DHECurve25519Ed25519Cavium NITROX
(III/V PX processors)512–4096 bitNIST Prime
192, 224, 256, 384, 521Microchip/Atmel
ATECC508A (compatible with any MPU or MCU including: Atmel SMART and AVR MCUs)256 bit
(NIST-P256)Intel QuickAssist Technology512–4096 bit128, 256 bitFreescale NXP LTC512 - 4096 bit128, 256 bit128, 256 bit256 bit256 bitXilinx Zynq UltraScale+2048–4096 bit
+MAC アルゴリズムデバイスHMAC-MD5HMAC-SHA1HMAC-SHA2HMAC-SHA256SHA-3Poly1305AVX1/AVX2
(Intel and AMD x86)SupportedCavium NITROX
(III/V PX processors)SupportedSupportedSupportedSupportedMicrochip PIC32 MX/MZ
(Embedded Connectivity)SupportedSupportedSupportedIntel QuickAssist TechnologySupportedSupportedRenesas RX65N (R5F565NEHDFB)SupportedSupportedRenesas RX72N (RTK5RX72N0C00000BJ)Renesas RX MPU (R5F571MLDDFC)SupportedSupportedRenesas Synergy DK-S7G2Supported
+乱数生成デバイスRNGSTMicroelectronics STM32
F1, F2, F4, L1, W Series (ARM Cortex - M3/M4)SupportedCavium NITROX
(III/V PX processors)SupportedNordic NRF51 
(Series SoC family, 32-bit ARM Cortex M0 processor core)Supported

 ライセンス 
wolfSSLはGNU General Public License GPLv2またはGPLv3によるオープンソースと商用ライセンスの双方で利用可能である。