WolfSSL

wolfSSL (原名 CyaSSL 或 yet another SSL)，是一個提供傳輸層安全協議（SSL/TLS）功能的軟體庫，主要針對嵌入式系系統發展。以開放原始碼及商用許可兩種方式釋出，提供SSL/TLS功能(SSL 3.0、TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3以及DTLS 1.0、DTLS 1.2)，以C語言寫成。提供了與OpenSSL兼容的API界面，讓原有使用OpenSSL的軟體可以容易的移植過來。

wolfSSL的早期版本, yaSSL，基於C++，為嵌入式環境和資源限制的實時作業系統提供SSL功能庫。

## 平台

wolfSSL 現在支持 Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, WinCE, Haiku, OpenWrt, 蘋果iPhone, 安卓Android, Nintendo Wii 和 Gamecube系統。通過 DevKitPro 的支持, QNX, MontaVista, Tron variants, NonStop, OpenCL, Micrium's MicroC/OS-II, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, TI-RTOS, HP-UX, uTasker, 和 embOS.

## 版本歷史

yaSSL, 或 yet another SSL, 始建於2004. OpenSSL 當時可用, 並且根據OpenSSL許可證和SSLeay許可證獲得雙重許可。然而，yaSSL是在商業和GPL許可下開發的。yaSSL提供了更現代的API和商業風格的開發人員支持，並含有OpenSSL兼容層。wolfSSL / CyaSSL / yaSSL的第一個主要使用者是MySQL. 通過捆綁MySQL，yaSSL已經實現了數百萬的極高分發量。

## 協議

wolfSSL 輕量級SSL庫實現以下協議:

- SSL 3.0、TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3
- DTLS 1.0、DTLS 1.2

協議說明:

- SSL 2.0 - SSL 2.0 在2011年被 RFC 6176棄用（禁止）。wolfSSL 不再支持。
- SSL 3.0 - SSL 3.0 已於2015年被RFC 7568為回應POODLE 攻擊而棄用（禁止）。SSL 3.0被wolfSSL 3.6.6 之後的版本默認禁用，但仍可通過編譯時選項啟用。

## 演算法

wolfSSL 使用以下加密庫:

### wolfCrypt

默認情況下，wolfSSL使用wolfCrypt提供的加密服務。wolfCrypt 提供 RSA, ECC, 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, BLAKE2, RIPEMD-160, Poly1305, 隨機數生成，大整數支持和基本16/64編碼/解碼。還包含一個來自歐盟eSTREAM項目的公共領域軟體流密碼（public domain software）的實驗密碼，Rabbit。Rabbit對於那些在高性能，高需求環境中對流媒體進行加密的潛在使用者非常有用。

wolfCrypt 還支持最近的 Curve25519 和 Ed25519 演算法。

wolfCrypt 充當幾個流行軟體包和庫的後端加密實現，包括MIT Kerberos（可使用構建選項啟用）。

### NTRU

CyaSSL+ 包含 NTRU 公鑰加密。在CyaSSL + 中增加NTRU是yaSSL和Security Innovation之間合作的結果。NTRU在行動電話和嵌入式環境中運行良好，這是因為與其他公鑰系統相比，提供相同安全性所需的位數大小減少了。另外，還不知道它易受到量子攻擊。CyaSSL + 中含有包括AES-256，RC4和HC-128在內的幾種使用NTRU的密碼套件。

## 軟體防護擴展(SGX)

wolfSSL 支持使用英特爾SGX (軟體防護擴展). 英特爾SGX Intel SGX 允許更小的攻擊表面積，並且已被證明為執行代碼提供更高級別的安全性，而對性能沒有顯著的負面影響。

## 硬體加速平台支持

英特爾 AES-NI (至強和酷睿處理器系列)

AES-GCM｜128, 192, 256 bit

AES-CCM｜128, 192, 256 bit

AES-CBC｜128, 192, 256 bit

AES-ECB｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

AVX1/AVX2 (英特爾 和 AMD x86)

SHA-256 SHA-384 SHA-512

RDRAND (英特爾 64, IA-32 架構)

SHA-256 SHA-512

RDSEED (英特爾 Broadwell, AMD Zen)

SHA-256 SHA-512

Freescale Coldfire SEC (NXP MCF547X 和 MCF548X)

DES-CBC｜64 bit

3DES-CBC｜192 bit

AES-CBC｜128, 192, 256 bit

Freescale Kinetis MMCAU K50, K60, K70 和 K80 (ARM Cortex-M4 核)

MD5｜128 bit 摘要

SHA1｜160 bit 摘要

SHA256

DES-CBC｜64 bit

3DES-CBC｜192 bit

AES-CBC｜128, 192, 256 bit

AES-CCM｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

AES-ECB｜128, 192, 256 bit

STMicroelectronics STM32 F1, F2, F4, L1, W 系列 (ARM Cortex - M3/M4)

RNG

DES-CBC｜64 bit

DES-ECB｜64 bit 加密

3DES-CBC｜192 bit

MD5｜128 bit

SHA1｜160 bit

AES-CBC｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

CubeMX and Std Per Lib

Cavium NITROX (III/V PX 處理器)

RNG

AES-CBC｜128, 192, 256 bit

3DES-CBC｜192 bit

RC4｜2048 bit 上限

HMAC｜MD5, SHA1, SHA256, SHA3

RSA｜512 - 4096 bit

ECC｜NIST Prime 192, 224, 256, 384 and 521

Microchip PIC32 MX/MZ (嵌入式連接)

MD5｜128 bit 摘要

SHA1｜160 bit 摘要

SHA256

HMAC｜MD5, SHA1, SHA256

DES-CBC｜64 bit

3DES-CBC｜192 bit

AES-CBC｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

德州儀器 TM4C1294 (ARM Cortex-M4F)

DES-CBC｜64 bit

3DES-CBC｜192 bit

AES-CCM｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

AES-ECB｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

AES-CBC｜128, 192, 256 bit

Nordic NRF51 (Series SoC family, 32-bit ARM Cortex M0 核心處理器)

AES-ECB｜128 bit

RNG

Microchip / Atmel ATECC508A (兼容於MPU or MCU)

ECC｜256 bit (NIST-P256)

ARMv8

AES-CBC｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

SHA256

英特爾QuickAssist技術

RSA｜512 - 4096 bit

SHA1｜160 bit 摘要

SHA2｜224, 256, 384 和 512 bit

AES-CBC｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

ECC｜任意位數

HMAC｜SHA1, SHA2

MD5

Freescale NXP LTC

Curve25519｜256 bit

Ed25519｜256 bit

AES-CCM｜128, 192, 256 bit

AES-ECB｜128, 192, 256 bit

AES-CBC｜128, 192, 256 bit

AES-CTR｜128, 192, 256 bit

AES-GCM｜128, 192, 256 bit

SHA1｜160 bit 摘要

SHA256

ECC｜128, 256 bit

ECC-DHE｜128, 256 bit

RSA｜512 - 4096 bit

## 許可

wolfSSL 開放原始碼, 根據GNU通用公共許可證GPLv2獲得許可.

## 外部連結

- wolfSSL/CyaSSL Homepage
- wolfSSL Now With ChaCha20 and Poly1305

## 基本資料

- 日語原文：wolfSSL
- 開發者：Todd Ouska
- 發行日期：2006年2月19日
- 作業系統：多平台
- 程式語言：C語言
- 類型：安全性加密函式庫
- 許可協議：GNU通用公共許可證或商業分銷許可證