WolfSSL 임베디드 SSL/TLS 라이브러리
WolfSSL 임베디드 SSL 라이브러리(이전의 CyaSSL)는 ANSI C로 작성된 경량 SSL/TLS 라이브러리이며, 주로 작은 크기, 속도 및 기능 세트로 인해 임베디드, RTOS 및 리소스가 제한된 환경을 대상으로 합니다. 로열티가 없는 가격과 뛰어난 크로스 플랫폼 지원으로 인해 표준 운영 환경에서도 일반적으로 사용됩니다. WolfSSL은 현재 TLS 1.3 및 DTLS 1.3까지 업계 표준을 지원하고 OpenSSL보다 최대 20배 작으며 ChaCha20, Curve25519, Blake2b 및 Post-Quantum TLS 1.3 그룹과 같은 진보적인 암호를 제공합니다. 사용자 벤치마킹 및 피드백에 따르면 OpenSSL보다 WolfSSL을 사용할 때 성능이 크게 향상되었습니다.
WolfSSL은 WolfCrypt 암호화 라이브러리에 의해 구동됩니다. WolfCrypt의 두 가지 버전은 FIPS 140-2 인증을 받았습니다(인증서 #2425 및 인증서 #3389). FIPS 140-3 검증이 진행 중입니다. 자세한 내용은 WolfCrypt FIPS FAQ를 방문하거나 [email protected]으로 문의하세요.
WolfSSL을 선택하는 이유는 무엇입니까?
임베디드, 데스크톱, 모바일 또는 엔터프라이즈 SSL/TLS 솔루션으로 WolfSSL을 선택하는 데에는 여러 가지 이유가 있습니다. 가장 큰 이유에는 크기(일반적인 설치 공간 크기 범위 20-100kB), 최신 표준 지원(SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 및 DTLS 1.3)이 포함됩니다. , 현재 및 진보적인 암호화 지원(스트림 암호화 포함), 다중 플랫폼, 로열티 프리 및 OpenSSL 호환성 API를 통해 이전에 OpenSSL 패키지를 사용했던 기존 애플리케이션으로 쉽게 포팅할 수 있습니다. 전체 기능 목록은 WolfSSL 매뉴얼의 4장을 참조하세요.
주의사항, 꼭 읽어주세요
참고 1
3.6.6부터 WolfSSL은 더 이상 기본적으로 SSLv3을 활성화하지 않습니다. 또한 WolfSSL은 더 이상 PSK, RSA 또는 ECDH가 포함된 정적 키 암호화 제품군을 지원하지 않습니다. 즉, TLS 암호화 제품군을 사용하려는 경우 DH(DH는 기본적으로 켜져 있음) 또는 ECC(ECC는 기본적으로 켜져 있음)를 활성화해야 합니다. 또는 다음 정의 중 하나 이상을 사용하여 정적 키 암호화 제품군을 활성화해야 합니다.
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
정적 키 암호화 제품군은 더 이상 사용되지 않으며 향후 TLS 버전에서는 제거될 예정입니다. 또한 PFS를 제거하여 보안을 낮춥니다.
ssl.c
컴파일할 때, WolfSSL은 이제 사용 가능한 암호화 제품군이 없으면 컴파일러 오류를 발생시킵니다. 원하는 경우, 즉 TLS 암호화 제품군을 사용하지 않는 경우 WOLFSSL_ALLOW_NO_SUITES
정의하여 이 오류를 제거할 수 있습니다.
참고 2
WolfSSL은 OpenSSL과 다른 인증서 확인 접근 방식을 취합니다. 클라이언트의 기본 정책은 서버를 확인하는 것입니다. 즉, 서버를 확인하기 위해 CA를 로드하지 않으면 연결 오류가 발생하고 실패를 확인하는 서명자 오류가 발생하지 않습니다(-188).
서버 확인이 실패하고 보안이 저하되더라도 SSL_connect
가 성공하는 OpenSSL 동작을 모방하려면 다음을 호출하면 됩니다.
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
wolfSSL_new();
. 권장되지는 않지만.
참고 3
열거형 값 SHA, SHA256, SHA384, SHA512는 WolfSSL이 --enable-opensslextra
( OPENSSL_EXTRA
) 또는 NO_OLD_SHA_NAMES
매크로를 사용하여 빌드된 경우 더 이상 사용할 수 없습니다. 이러한 이름은 단일 호출 해시 함수에 대한 OpenSSL API에 매핑됩니다. 대신 WC_SHA
, WC_SHA256
, WC_SHA384
및 WC_SHA512
이름을 열거형 이름으로 사용해야 합니다.
WolfSSL 릴리스 5.7.4(2024년 10월 24일)
릴리스 5.7.4는 WolfSSL의 개발 및 QA 프로세스(아래 링크 참조)에 따라 개발되었으며 품질 기준을 성공적으로 통과했습니다. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
참고: * --enable-heapmath는 더 이상 사용되지 않으며 2024년 말까지 제거될 예정입니다.
PR은 Pull Request의 약자이며 PR은 코드 변경이 추가된 GitHub Pull Request 번호를 참조합니다.
취약점
- [낮음] OpenSSL 호환성 레이어가 활성화되면 X509_STORE_add_cert() 및 X509_STORE_load_locations() 구현에서 인증서 확인이 OpenSSL과 WolfSSL에서 다르게 작동했습니다. 이전에는 애플리케이션이 중간 인증서를 명시적으로 로드한 경우 WolfSSL은 루트 CA까지 확인하는 대신 해당 중간 인증서까지만 확인했습니다. 이는 API가 직접 호출되는 사용 사례에만 영향을 미치며 TLS 연결에는 영향을 미치지 않습니다. 애플리케이션에서 API X509_STORE_add_cert() 또는 X509_STORE_load_locations()를 직접 호출하는 사용자는 사용되는 WolfSSL 버전을 업데이트하거나 인증서를 확인할 때 X509_STORE에 로드된 인증서에 대한 추가 온전성 검사를 받는 것이 좋습니다. (#8087)
PQC TLS 실험 빌드 수정
- 포스트 양자 알고리즘이 활성화된 TLS를 사용하면 연결은 합의된 것보다 더 작은 EC 곡선을 사용합니다. --enable-experimental을 사용하여 구축하고 TLS 연결을 통해 PQC 암호화 제품군을 활성화하는 사용자는 사용되는 WolfSSL 버전을 업데이트하는 것이 좋습니다. 보고서를 작성해주신 Daniel Correa에게 감사드립니다. (#8084)
새로운 기능 추가
- RISC-V 64 SHA-256, SHA-512, ChaCha20, Poly1305 및 SHA-3에 대한 새로운 어셈블리 최적화가 추가되었습니다(PR 7758,7833,7818,7873,7916).
- DTLS 1.2(PR 7995)를 사용하여 연결 ID(CID)에 대한 지원 구현
- (DevkitPro)libnds에 대한 지원 추가(PR 7990)
- Mosquitto OSP(오픈 소스 프로젝트)용 포트 추가(PR 6460)
- init sssd용 포트 추가(PR 7781)
- eXosip2용 포트 추가(PR 7648)
- STM32G4(PR 7997)에 대한 지원 추가
- MAX32665 및 MAX32666 TPU HW 및 ARM ASM 암호화 콜백 지원에 대한 지원 추가(PR 7777)
- libspdm에서 사용할 WolfSSL 구축에 대한 지원 추가(PR 7869)
- Nucleus Plus 2.3(PR 7732)과 함께 사용할 포트 추가
- RFC5755 x509 특성 인증서(acerts)에 대한 초기 지원입니다. --enable-acert로 활성화됨(PR 7926)
- PKCS#11 RSA 패딩 오프로드를 사용하면 토큰이 CKM_RSA_PKCS(서명/암호화), CKM_RSA_PKCS_PSS(서명) 및 CKM_RSA_PKCS_OAEP(암호화)를 수행할 수 있습니다. (PR 7750)
- 힙/풀 할당 및 낮은 수준 암호화 구조 해제를 위한 "신규" 및 "삭제" 스타일 기능을 추가했습니다(PR 3166 및 8089).
개선 사항 및 최적화
- 기본 최대 Alt를 늘립니다. 128부터 1024까지의 이름(PR 7762)
- 새로운 상수 시간 DH 동의 기능 wc_DhAgree_ct 추가(PR 7802)
- API EVP_PKEY_is_a(PR 7804)를 통한 확장된 호환성 레이어
- --disable-cryptocb-sw-test를 사용하여 cryptocb 테스트 소프트웨어 테스트를 비활성화하는 옵션 추가(PR 7862)
- 인증서 날짜를 확인하기 전에 인증서 확인 콜백 호출 추가(PR 7895)
- WolfCrypt CSharp 래퍼로 지원되는 확장된 알고리즘입니다. RNG, ECC(ECIES 및 ECDHE), RSA, ED25519/Curve25519, AES-GCM 및 Hashing(PR 3166)에 대한 지원 추가
- DES ECB(PR 7960)와 함께 사용하기 위해 MMCAU 지원 확장
- 여러 관련 데이터 입력을 처리하도록 AES SIV 업데이트(PR 7911)
- --enable-openssh에서 HAVE_NULL_CIPHER 제거(PR 7811)
- XFREE를 호출할 때 중복된 if(NULL) 검사를 제거했습니다(매크로는 수행함)(PR 7839)
- RSA_MIN_SIZE 기본값을 2048비트로 설정(PR 7923)
- zephyr 커널에서 기본 TLS로 사용될 WolfSSL에 대한 지원이 추가되었습니다(PR 7731).
- autotools와 함께 --enable-wolfprovider를 사용하여 공급자 빌드 활성화 추가(PR 7550)
- Renesas RX TSIP ECDSA 지원(PR 7685)
- 서버가 CID를 지원할 때 DTLS1.3 다운그레이드 지원(PR 7841)
- v2 multi를 사용하더라도 서버측에서는 OCSP를 확인합니다(PR 7828).
- PKCS7 번들 구문 분석 및 생성 시 부재 해시 매개변수 처리 추가(PR 7845)
- Poly1305에 w64wrapper 사용을 추가하여 word64 유형이 없는 환경에서 Poly1305를 사용할 수 있습니다(PR 7759)
- maxq10xx 지원 업데이트(PR 7824)
- 선택적 PKCS8 속성에 대한 구문 분석 지원 추가(PR 7944)
- DTLS 1.3(PR 8012)을 사용하여 양측 방법에 대한 지원 추가
- BEGIN/END PKCS7(PR 7704)을 사용하여 PEM 데이터를 구문 분석하기 위한 PKCS7 PEM 지원을 추가했습니다.
- WOLFSSL_CUSTOM_CURVES에 대한 CMake 지원 추가(PR 7962)
- X509_check_host()에 맨 왼쪽 와일드카드 일치 지원 추가(PR 7966)
- PKCS7 번들 생성으로 사용자 정의 SKID를 설정하는 옵션 추가(PR 7954)
- Ada를 사용하여 WolfSSL을 라이브러리로 구축하고 Alire 매니페스트를 수정했습니다(PR 7303,7940).
- Renesas RX72N 지원 업데이트됨(PR 7849)
- 키를 항상 SSL 객체에 복사하기 위해 새로운 옵션 WOLFSSL_COPY_KEY가 추가되었습니다(PR 8005).
- 각 SSL 개체에 대한 인증서 버퍼를 항상 복사하려면 새 옵션 WOLFSSL_COPY_CERT를 추가하세요(PR 7867).
- 기본 세션 티켓 enc/dec에 대해 HMAC와 함께 AES-CBC를 사용하는 옵션을 추가합니다. 기본값은 HMAC-SHA256(PR 7703)을 사용하는 AES-128-CBC입니다.
- wc_PRF, sha256(많은 레지스터를 사용할 수 있는 작은 코드용) 및 sp_int 개체(PR 7901)의 메모리 사용량 개선
- 명령 없이 ">>"를 해결하려면 구성 스크립트를 변경하세요. 이전 /bin/sh에서는 FreeBSD 9.2(PR 7876)와 같은 OS에서 사용되는 것처럼 모호할 수 있습니다.
- 필요하지 않은 경우 시스템 헤더를 포함하려고 시도하지 마세요(PR 7813).
- 인증서: ECC 서명 알고리즘 매개변수의 DER 인코딩은 이제 정의를 통해 NULL이 될 수 있습니다(PR 7903).
- SP x86_64 asm: VM에 대한 AVX2 지원 확인(PR 7979)
- gr-rose에서 rx64n 지원 업데이트(PR 7889)
- RA6M4용 FSP 버전을 v5.4.0으로 업데이트(PR 7994)
- RX65N RSK용 TSIP 드라이버 버전을 v1.21로 업데이트(PR 7993)
- 패딩이 포함된 RSA에 대한 새로운 암호화 콜백 추가(PR 7907)
- pqm4 사용을 Kyber/MLDSA의 WolfSSL 구현으로 대체했습니다(PR 7924).
- C11 및 clang에 대한 현대화된 메모리 펜스 지원(PR 7938)
- CRL 오류 재정의 콜백 추가(PR 7986)
- 사용자 컨텍스트와 함께 사용하기 위해 X509 알 수 없는 확장 콜백 확장(PR 7730)
- TLS로 추가된 추가 디버그 오류 추적(PR 7917)
- libbacktrace를 사용하여 –enable-debug-trace-errcodes=backtrace를 사용하여 라이브러리 호출 스택 추적에 대한 런타임 지원을 추가했습니다(PR 7846).
- 확장된 C89 적합성(PR 8077)
- WOLFSSL_NO_MALLOC(PR 8065)에 대한 지원 확장
- Linux 커널 모듈의 크로스 컴파일에 대한 지원이 추가되었습니다(PR 7746).
- 커널 6.11 및 6.12를 지원하도록 업데이트된 Linux 커널 모듈(PR 7826)
- 일련 번호가 0인 인증서를 구문 분석할 수 있도록 WOLFSSL_ASN_ALLOW_0_SERIAL을 도입합니다(PR 7893).
- 모든 WolfSSL GitHub 워크플로에 조건부 저장소_소유자 추가(PR 7871)
에스프레소/아두이노 업데이트
- Espressif ESP-IDF용 Wolfcrypt settings.h 업데이트, 템플릿 업데이트(PR 7953)
- Espressif sha, util, mem, 시간 도우미 업데이트(PR 7955)
- Espressif _thread_local_start 및 _thread_local_end 수정(PR 8030)
- Espressif 장치에 대한 벤치마크 개선(PR 8037)
- Espressif 공통 CONFIG_WOLFSSL_EXAMPLE_NAME, Kconfig(PR 7866) 소개
- Espressif ESP-IDF에 대한 WolfSSL esp-tls 및 인증서 번들 지원 추가(PR 7936)
- Arduino용 Wolfssl 릴리스 업데이트(PR 7775)
포스트 퀀텀 암호화 업데이트
- Dilithium: dilithium_key에서 고정 크기 배열 지원(PR 7727)
- Dilithium: 작은 부호로 사전 계산을 사용하는 옵션 추가(PR 7744)
- Kyber가 FIPS로 구축되도록 허용(PR 7788)
- Linux 커널 모듈에서 Kyber asm을 사용할 수 있도록 허용합니다(PR 7872).
- Dilithium, Kyber: 최종 사양 업데이트(PR 7877)
- Dilithium: FIPS 204 초안 및 최종 초안 지원(PR 7909,8016)
ARM 어셈블리 최적화
- ChaCha20 및 Poly1305(PR 8020)에 ARM32 어셈블리 최적화가 추가되었습니다.
- Aarch64에 대한 Poly1305 어셈블리 최적화 개선(PR 7859)
- Thumb-2(PR 7939)에 대해 Poly1305 어셈블리 최적화가 추가되었습니다.
- STM32CubePack에 ARM ASM 빌드 옵션 추가(PR 7747)
- Visual Studio 프로젝트에 ARM64 추가(PR 8010)
- ARM32 및 Aarch64를 위한 Kyber 어셈블리 최적화(PR 8040,7998)
- ARMv7E-M/ARMv7-M(PR 7706)에 대한 Kyber 어셈블리 최적화
수정
- ECC 키 로드: 크기에 대한 기본값이 아닌 매개변수가 있는 인증서에 대한 수정 사항(PR 7751)
- Windows가 아닌 OS용 Visual Studio에서 x86 빌드에 대한 수정 사항(PR 7884)
- TLS v1.2 비밀 콜백 수정, 잘못된 마스터 비밀 감지(PR 7812)
- Darwin 및 SP Math와 함께 PowerPC 어셈블리 사용에 대한 수정 사항(PR 7931)
- libdispatch와 연결을 시도할 때 이전 버전의 Mac OS를 감지하는 문제 수정(PR 7932)
- 서버가 단일 전송으로 결합된 여러 핸드셰이크 패킷을 보낼 때 DTLS1.3이 DTLS1.2로 다운그레이드되는 문제를 수정했습니다. (PR 7840)
- 요청이 ssl->ctx->certOcspRequest에 저장된 경우 요청을 저장하도록 OCSP에 대한 수정(PR 7779)
- 확장 대신 키 해시로 CA를 검색하도록 OCSP를 수정했습니다. 키 ID(PR 7934)
- 정적 메모리 및 단일 스레드 빌드 수정(PR 7737)
- Xilinx AFALG(PR 7708)에서 Shake128/256을 허용하지 않도록 수정했습니다.
- RSA 키 생성 없이 PKCS11을 지원하도록 수정되었습니다(PR 7738).
- PK 콜백 + TLS 1.3을 사용할 때 서명 콜백을 호출하지 않는 문제 수정(PR 7761)
- IAR 컴파일러용 Cortex-M/Thumb2 ASM 수정 라벨(PR 7753)
- SlotId를 올바르게 반복하도록 PKCS11을 수정했습니다(PR 7736).
- AltSigAlg 확장에서 시퀀스 헤더 제거 중지(PR 7710)
- extAuthKeyIdSet 값을 설정하기 위해 ASN 템플릿을 사용하여 ParseCRL_AuthKeyIdExt를 수정했습니다(PR 7742).
- PSK 암호화 버퍼 크기에 최대 키 길이 사용(PR 7707)
- 헤더 및 CID 수정 사항을 포함하도록 크기 확인을 위한 DTLS 1.3 수정 사항(PR 7912,7951)
- STM32 해시 FIFO 수정 및 STM32U5A9xx 지원 추가(PR 7787)
- 컬 빌드에 대한 CMake 빌드 오류 수정(PR 8021)
- SP 수학: LI 대신 XOR을 사용하도록 PowerPC ASM 수정(PR 8038)
- 키/인증서의 SSL 로딩: 테스트 및 수정(PR 7789)
- 기타 Dilithium 및 Kyber에 대한 수정 사항(PR 7721,7765,7803,8027,7904)
- PQ LMS/XMSS용 WolfBoot 소스 구축 수정 사항(PR 7868)
- CMake 및 zephyr 포트를 사용하여 Kyber를 활성화한 빌드에 대한 수정 사항(PR 7773)
- TLS 1.2(PR 8097)를 사용한 세션 재개로 인한 극단적인 경우 수정
- AES CFB/OFB가 "왼쪽" 멤버를 초기화하지 않는 ARM ASM 문제 해결(PR 8099)
추가 취약성 정보를 보려면 다음 취약성 페이지를 방문하십시오: https://www.wolfssl.com/docs/security-vulnerability/
빌드 지침은 INSTALL 파일을 참조하세요. 자세한 내용은 https://wolfssl.com/wolfSSL/Docs.html에서 온라인으로 확인할 수 있습니다.
자원
WolfSSL 웹사이트
늑대SSL 위키
FIPS 140-2/140-3 FAQ
WolfSSL 문서
WolfSSL 매뉴얼
WolfSSL API 참조
WolfCrypt API 참조
TLS 1.3
WolfSSL 취약점
추가 WolfSSL 예제
디렉토리 구조
├── certs [Certificates used in tests and examples]
├── cmake [Cmake build utilities]
├── debian [Debian packaging files]
├── doc [Documentation for wolfSSL (Doxygen)]
├── Docker [Prebuilt Docker environments]
├── examples [wolfSSL examples]
│ ├── asn1 [ASN.1 printing example]
│ ├── async [Asynchronous Cryptography example]
│ ├── benchmark [TLS benchmark example]
│ ├── client [Client example]
│ ├── configs [Example build configurations]
│ ├── echoclient [Echoclient example]
│ ├── echoserver [Echoserver example]
│ ├── pem [Example for convert between PEM and DER]
│ ├── sctp [Servers and clients that demonstrate wolfSSL's DTLS-SCTP support]
│ └── server [Server example]
├── IDE [Contains example projects for various development environments]
├── linuxkm [Linux Kernel Module implementation]
├── m4 [Autotools utilities]
├── mcapi [wolfSSL MPLAB X Project Files]
├── mplabx [wolfSSL MPLAB X Project Files]
├── mqx [wolfSSL Freescale CodeWarrior Project Files]
├── rpm [RPM packaging metadata]
├── RTOS
│ └── nuttx [Port of wolfSSL for NuttX]
├── scripts [Testing scripts]
├── src [wolfSSL source code]
├── sslSniffer [wolfSSL sniffer can be used to passively sniff SSL traffic]
├── support [Contains the pkg-config file]
├── tests [Unit and configuration testing]
├── testsuite [Test application that orchestrates tests]
├── tirtos [Port of wolfSSL for TI RTOS]
├── wolfcrypt [The wolfCrypt component]
│ ├── benchmark [Cryptography benchmarking application]
│ ├── src [wolfCrypt source code]
│ │ └── port [Supported hardware acceleration ports]
│ └── test [Cryptography testing application]
├── wolfssl [Header files]
│ ├── openssl [Compatibility layer headers]
│ └── wolfcrypt [Header files]
├── wrapper [wolfSSL language wrappers]
└── zephyr [Port of wolfSSL for Zephyr RTOS]