wolfSSL is a small, portable, embedded SSL/TLS library targeted for use by embedded systems developers. It is an open source implementation of TLS (SSL 3.0, TLS 1.0, 1.1, 1.2, 1.3, and DTLS 1.0, 1.2, and 1.3) written in the C programming language. It includes SSL/TLS client libraries and an SSL/TLS server implementation as well as support for multiple APIs, including those defined by SSL and TLS. wolfSSL also includes an OpenSSL compatibility interface with the most commonly used OpenSSL functions.

A predecessor of wolfSSL, yaSSL is a C++ based SSL library for embedded environments and real time operating systems with constrained resources.

Platforms
wolfSSL is currently available for Microsoft Windows, Linux, macOS, Solaris, ESP32, ESP8266, Threadx, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, Yocto Project, OpenEmbedded, WinCE, Haiku, OpenWrt, iPhone, Android, Wii, and GameCube through DevKitPro support, QNX, MontaVista, Tron variants, NonStop OS, OpenCL, Micrium's MicroC/OS-II, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, TI-RTOS, HP-UX, uTasker, uT-kernel, embOS, INtime, mbed, RIOT, CMSIS-RTOS, FROSTED, Green Hills INTEGRITY, Keil RTX, TOPPERS, PetaLinux, Apache Mynewt, and PikeOS.

History
The genesis of yaSSL, or yet another SSL, dates to 2004. OpenSSL was available at the time, and was dual licensed under the OpenSSL License and the SSLeay license.  yaSSL, alternatively, was developed and dual-licensed under both a commercial license and the GPL.  yaSSL offered a more modern API, commercial style developer support and was complete with an OpenSSL compatibility layer.  The first major user of wolfSSL/CyaSSL/yaSSL was MySQL. Through bundling with MySQL, yaSSL has achieved extremely high distribution volumes in the millions.

In February 2019, Daniel Stenberg, the creator of cURL, joined the wolfSSL project.

Protocols

The wolfSSL lightweight SSL library implements the following protocols:
 SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3
 DTLS 1.0, DTLS 1.2, DTLS 1.3
 Extensions: Server Name Indication (SNI), Maximum Fragment Length, Truncated HMAC, Application Layer Protocol Negotiation (ALPN), Extended Master Secret
 Ciphersuites: TLS Secure Remote Password, TLS Pre-Shared Key
 Post-quantum cryptography: QSH (quantum-safe handshake) 
 Public Key Cryptography Standards: 
 PKCS #1 - RSA Cryptography
 PKCS #3 - Diffie-Hellman Key Agreement
 PKCS #5 - Password-Based Encryption
 PKCS #7 - Cryptographic Message Syntax (CMS)
 PKCS #8 - Private-Key Information Syntax
 PKCS #9 - Selected Attribute Types
 PKCS #10 - Certificate signing request (CSR)
 PKCS #11 - Cryptographic Token Interface
 PKCS #12 - Certificate/Personal Information Exchange Syntax Standard

Protocol Notes:
 SSL 2.0 – SSL 2.0 was deprecated (prohibited) in 2011 by RFC 6176. wolfSSL does not support it.
 SSL 3.0 – SSL 3.0 was deprecated (prohibited) in 2015 by RFC 7568. In response to the POODLE attack, SSL 3.0 has been disabled by default since wolfSSL 3.6.6, but can be enabled with a compile-time option.

Algorithms
wolfSSL uses the following cryptography libraries:

wolfCrypt
By default, wolfSSL uses the cryptographic services provided by wolfCrypt.  wolfCrypt Provides 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, SHA-3, BLAKE2, RIPEMD-160, Poly1305, Random Number Generation, Large Integer support, and base 16/64 encoding/decoding. An experimental cipher called Rabbit, a public domain software stream cipher from the EU's eSTREAM project, is also included. Rabbit is potentially useful to those encrypting streaming media in high performance, high demand environments.

wolfCrypt also includes support for the recent Curve25519 and Ed25519 algorithms.

wolfCrypt acts as a back-end crypto implementation for several popular software packages and libraries, including MIT Kerberos (where it can be enabled using a build option).

NTRU
CyaSSL+ includes NTRU public key encryption. The addition of NTRU in CyaSSL+ was a result of the partnership between yaSSL and Security Innovation. NTRU works well in mobile and embedded environments due to the reduced bit size needed to provide the same security as other public key systems. In addition, it's not known to be vulnerable to quantum attacks. Several cipher suites utilizing NTRU are available with CyaSSL+ including AES-256, RC4, and HC-128.

Hardware Integration

Secure Element Support 
wolfSSL supports the following Secure Elements:

 STMicroelectronics STSAFE
 Microchip CryptoAuthentication ATECC508A
 NXP EdgeLock SE050 Secure Element

Technology Support 
wolfSSL supports the following hardware technologies:
 Intel SGX (Software Guard Extensions)  - Intel SGX allows a smaller attack surface and has been shown to provide a higher level of security for executing code without a significant impact on performance.

Hardware Encryption Support 
The following tables list wolfSSL's support for using various devices' hardware encryption with various algorithms. 

- "All" denotes 128, 192, and 256-bit supported block sizes

Certifications
wolfSSL supports the following certifications:
 Federal Information Processing Standards (FIPS 140)
 FIPS 140-2
 wolfCrypt FIPS Module: 3.6.0 (NIST certificate #2425) - Historical
 wolfCrypt FIPS Module: 4.0 (NIST certificate #3389)
 Radio Technical Commission for Aeronautics (RTCA)
 DO-178C
 wolfCrypt COTS DO-178C certification kit (DAL A)

Licensing
wolfSSL is dual licensed: 
 Licensed under the GPL-2.0-or-later license. This is good for GPL open source projects and evaluation.
 Licensed under a commercial non-GPL license. This comes with additional support and maintenance packages and is priced at 6,000 USD per product or SKU as of 2022.

See also

Transport Layer Security
Comparison of TLS implementations
Comparison of cryptography libraries
GnuTLS
Network Security Services
OpenSSL

References

External links
 wolfSSL/CyaSSL Homepage
 wolfSSL Now With ChaCha20 and Poly1305

C (programming language) libraries
Cryptographic software
Transport Layer Security implementation
wolfSSL (이전 이름 CyaSSL)는 임베디드 시스템 개발자의 사용을 타겟으로 한 소형의 휴대성 좋은 내장 SSL / TLS 라이브러리이다. C 언어 로 작성된 TLS (SSL 3.0 TLS 1.0, 1.1, 1.2, 1.3, DTLS 1.0, 1.2)의 오픈 소스를 구현한다. SSL / TLS 클라이언트 라이브러리 및 서버 라이브러리를 포함, SSL 및 TLS에서 정의 된 다양한 API 외에 지원한다. 또한 OpenSSL에서 주로 사용되는 함수와 호환의 인터페이스를 제공하고있다.

wolfSSL / CyaSSL의 전신 인 yaSSL는 임베디드 환경과 자원의 한정된 리얼 타임 OS를 위한 C ++ 로 작성된 SSL 라이브러리이다.

플랫폼 
wolfSSL는 Win32 / 64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, 임베디드 Linux, Haiku, OpenWrt, iPhone, Android, Nintendo Wii 및 Gamecube는 DevKitPro 통하며 QNX,  MontaVista, Tron variants, NonStop, OpenCL, Micrium의 MicroC / OS-II, FreeRTOS, SafeRTOS, 프리 스케일 MQX, Nucleus, TinyOS, TI-RTOS, HP-UX, uTasker 및 embOS에서 이용 가능하다.

역사 
yaSSL의 시작은 2004년으로 거슬러 올라간다. 2004년 당시 OpenSSL 가 가능했고, 그 라이센스는 OpenSSL License 및 SSLeay license의 듀얼 라이센스라는 것이 독특한 것이었다. yaSSL은 상용 라이선스와 GPL로 듀얼 라이센스에서 사용할 수 있는 OpenSSL의 대안으로 개발되었다 . yaSSL는 더 정교한 API 상용 개발의 지원, OpenSSL과의 완벽한 호환성을 제공했다. wolfSSL/CyaSSL/yaSSL의 첫 시작은 MySQL에서 이용되었다. 이 결과, yaSSL은 MySQL과의 번들링을 통해 수백만 단위의 매우 높은 보급을 실현했다.

프로토콜 
자세한 내용은 Transport Layer Security를 참조

wolfSSL는 다음의 다양한 프로토콜을 실현하고있다 :

·        SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3

·        DTLS 1.0, DTLS 1.2

프로토콜 Notes:

·        SSL 2.0은 RFC 6176 에 의해 2011년 폐지되었다. WolfSSL은 이를 서포트하지 않는다.

·        SSL 3.0은 RFC 7568 에 의해 2015년 폐지되었다. POODLE 공격에 대응하여, SSL 3.0은 wolfSSL 3.3.6 이후 기본적으로 비활성화되었으나, 컴파일 시간 옵션으로 사용될 수 있다.

알고리즘  
wolfSSL는 다음의 암호화 라이브러리를 사용하고있다 :

wolfCrypt 
기본적으로 wolfSSL 표준에서는 wolfCrypt에서 제공되는 암호화 서비스를 사용한다. 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, BLAKE2, RIPEMD-160, Poly1305, 난수 생성 , 대규모 정수 연산베이스 16/64 인코딩 / 디코딩을 지원한다. 유럽의 eSTREAM 공용 도메인 스트림 암호 Rabbit 도 포함되어있다. Rabbit은 고성능, 높은 부하 환경에서의 암호화 스트리밍 미디어에 잠재적으로 유용성이 있다. wolfCrypt는 SSL의 일종을 위해 필요한 기능에 특화하는 한편, 최대한의 이식성을 얻을 수 있도록 배려되어있다.

wolfCrypt는 또한 Curve25519과 Ed25519을 지원한다.

wolfCrypt는 MIT Kerberos(빌드 옵션 사용)를 포함하여 몇 가지 소프트웨어 패키지와 라이브러리의 백엔드 암호화 구현으로 활약하고있다.

NTRU 
CyaSSL +에는 NTRU 공개 키 암호화가 포함되어 있다. CyaSSL +에의 NTRU의 추가는 yaSSL과 Security Innovation의 파트너십의 결과였다. NTRU는 다른 공개 키 암호화와 같은 수준의 보안을 작은 비트 수로 제공하므로 모바일 및 임베디드 환경에서 잘 작동한다. 게다가 TRU 또는quantum attack에 대해서도 취약점이 알려져 있지 않다. TRU를 사용하하는 암호화 세트는 CyaSSL + 을 비롯하여 AES-256, RC4 또는 HC-128 등에서 사용 가능하다.

SGX 
wolfSSL는 인텔 SGX (소프트웨어 보호 확장)을 지원한다. 인텔 SGX는 공격 대상 영역을 줄이고 기존의 코드에서 눈에 띄는 성능 저하 없이 높은 수준의 안전성을 확보하고있다.

암호화 하드웨어 가속 지원 
Intel AES-NI (Xeon 및 Core 프로세서 제품군)

AVX1 / AVX2 (Intel 및 AMD x86)

RDRAND (Intel 64 IA-32 아키텍처)

RDSEED (Intel Broadwell, AMD Zen)

Freescale Coldfire SEC  (NXP MCF547X 및 MCF548X)

Freescale Kinetis MMCAU  K50, K60, K70 및 K80 (ARM Cortex-M4 core)

ST 마이크로 일렉트로닉스 STM32 F1, F2, F4, L1, W 시리즈 (ARM Cortex - M3 / M4)

CubeMX 및 Std Per LibCavium NITROX (III / V PX 프로세서)

Microchip PIC32 MX / MZ (Embedded Connectivity)

Texas Instruments TM4C1294 (ARM Cortex-M4F)

Nordic NRF51 (Series SoC family 32-bit ARM Cortex M0 processor core)

Microchip / Atmel ATECC508A (MPU 또는 MCU 호환)

ARMv8 

Intel QuickAssist 기술

Freescale NXP LTC

라이센스 
wolfSSL는 오픈 소스로, GNU General Public License GPLv2에 상용 라이센스를 받아 이용 가능하다.

각주 

C 라이브러리
암호 소프트웨어
전송 계층 보안 구현