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 の 2 つのバージョンが FIPS 140-2 で検証されています (証明書 #2425 と証明書 #3389)。 FIPS 140-3 検証が進行中です。詳細については、wolfCrypt FIPS FAQ を参照するか、[email protected] までお問い合わせください。
wolfSSL を選ぶ理由
組み込み、デスクトップ、モバイル、またはエンタープライズ SSL/TLS ソリューションとして wolfSSL を選択する理由はたくさんあります。主な理由としては、サイズ (通常のフットプリント サイズは 20 ~ 100 KB)、最新の規格 (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
wolfSSL 3.6.6 では、デフォルトで SSLv3 が有効になりません。 wolfSSL は、PSK、RSA、または ECDH を使用した静的キー暗号スイートもサポートしなくなりました。つまり、TLS 暗号スイートを使用する場合は、DH を有効にするか (DH はデフォルトでオン)、ECC を有効にするか (ECC はデフォルトでオン)、または次の 1 つ以上の定義を使用して静的キー暗号スイートを有効にする必要があります。
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
--enable-opensslextra
( OPENSSL_EXTRA
) またはマクロNO_OLD_SHA_NAMES
を使用して wolfSSL が構築されている場合、列挙値 SHA、SHA256、SHA384、SHA512 は使用できなくなりました。これらの名前は、単一呼び出しハッシュ関数の 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 はプル リクエストの略で、PR はコード変更が追加された GitHub プル リクエスト番号を参照します。
脆弱性
- [低] OpenSSL 互換性レイヤーが有効になっている場合、X509_STORE_add_cert() および X509_STORE_load_locations() の実装において、wolfSSL と OpenSSL では証明書検証の動作が異なります。以前は、アプリケーションが中間証明書を明示的にロードした場合、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 のバージョンを更新することをお勧めします。レポートを提供してくれたダニエル・コレアに感謝します。 (#8084)
新機能の追加
- RISC-V SHA-256、SHA-512、ChaCha20、Poly1305、SHA-3 用に 64 の新しいアセンブリ最適化が追加されました (PR 7758,7833,7818,7873,7916)
- DTLS 1.2 による接続 ID (CID) のサポートを実装する (PR 7995)
- (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、およびハッシュのサポートの追加 (PR 3166)
- DES ECB で使用するための MMCAU サポートを拡張 (PR 7960)
- 複数の関連データ入力を処理できるように 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 マルチを使用している場合でもサーバー側で 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 を使用して PEM データを解析するための PKCS7 PEM サポートを追加しました (PR 7704)
- 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)
- 新しいオプション WOLFSSL_COPY_CERT を追加して、各 SSL オブジェクトの証明書バッファを常にコピーします (PR 7867)
- デフォルトのセッションチケット enc/dec に HMAC で AES-CBC を使用するオプションを追加します。デフォルトは AES-128-CBC と HMAC-SHA256 (PR 7703)
- wc_PRF、sha256 (多数のレジスタが使用可能な場合の小規模なコード用)、および sp_int オブジェクトのメモリ使用量の改善 (PR 7901)
- コマンドを使用せずに「>>」を回避するように設定スクリプトを変更します。 FreeBSD 9.2 (PR 7876) などの OS で使用されているように、古い /bin/sh では曖昧になる可能性があります。
- 必要でない場合はシステム ヘッダーを含めないでください (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)
- WOLFSSL_ASN_ALLOW_0_SERIAL を導入して、シリアル番号 0 の証明書の解析を許可します (PR 7893)
- すべての wolfSSL GitHub ワークフローに条件付き repository_owner を追加 (PR 7871)
Espressif / Arduino のアップデート
- Espressif ESP-IDF 用の wolfcrypt settings.h の更新、テンプレートの更新 (PR 7953)
- Espressif sha、util、mem、time ヘルパーを更新する (PR 7955)
- Espressif の _thread_local_start および _thread_local_end の修正 (PR 8030)
- Espressif デバイスのベンチマークを改善 (PR 8037)
- Espressif 共通 CONFIG_WOLFSSL_EXAMPLE_NAME、Kconfig の導入 (PR 7866)
- wolfSSL esp-tls と Espressif ESP-IDF の証明書バンドル サポートを追加 (PR 7936)
- Arduino 用の wolfSSL リリースを更新 (PR 7775)
ポスト量子暗号のアップデート
- Dilithium: dilithium_key で固定サイズの配列をサポート (PR 7727)
- ダイリチウム: 小さな符号で事前計算を使用するオプションを追加 (PR 7744)
- Kyber を FIPS で構築できるようにする (PR 7788)
- Linux カーネル モジュールでの Kyber asm の使用を許可 (PR 7872)
- ダイリチウム、Kyber: 最終仕様への更新 (PR 7877)
- ダイリチウム: FIPS 204 ドラフトおよび最終ドラフトをサポート (PR 7909,8016)
ARM アセンブリの最適化
- ChaCha20 および Poly1305 用に ARM32 アセンブリの最適化が追加されました (PR 8020)
- Aarch64 の Poly1305 アセンブリ最適化の改善 (PR 7859)
- Poly1305 アセンブリの最適化が Thumb-2 に追加されました (PR 7939)
- STM32CubePack への ARM ASM ビルド オプションの追加 (PR 7747)
- Visual Studio プロジェクトに ARM64 を追加する (PR 8010)
- ARM32 および Aarch64 向けの Kyber アセンブリの最適化 (PR 8040,7998)
- ARMv7E-M/ARMv7-M 向けの Kyber アセンブリの最適化 (PR 7706)
修正
- ECC キーのロード: サイズがデフォルトではないパラメーターを持つ証明書を修正 (PR 7751)
- Windows 以外の OS の Visual Studio で x86 をビルドするための修正 (PR 7884)
- TLS v1.2 シークレット コールバックを修正し、不正なマスター シークレットを誤って検出しました (PR 7812)
- Darwin および SP math all での PowerPC アセンブリの使用を修正 (PR 7931)
- libdispatch とリンクしようとするときに古いバージョンの Mac OS を検出する問題を修正 (PR 7932)
- サーバーが複数のハンドシェイク パケットを 1 回の送信に結合して送信する場合の DTLS1.3 から DTLS1.2 へのダウングレードを修正しました。 (PR 7840)
- ssl->ctx->certOcspRequest に保存されている場合にリクエストを保存するように OCSP を修正しました (PR 7779)
- ext ではなくキー ハッシュによって CA を検索するための OCSP を修正しました。キー ID (PR 7934)
- 静的メモリおよびシングルスレッド ビルドの修正 (PR 7737)
- Xilinx AFALG で Shake128/256 を許可しないように修正 (PR 7708)
- RSA キー生成なしで PKCS11 をサポートするように修正 (PR 7738)
- PK コールバック + TLS 1.3 を使用するときに署名コールバックが呼び出されない問題を修正しました (PR 7761)
- IAR コンパイラの Cortex-M/Thumb2 ASM 修正ラベル (PR 7753)
- PKCS11 を修正して、slotId を正しく反復するようにしました (PR 7736)
- AltSigAlg 拡張機能のシーケンス ヘッダーの削除を停止する (PR 7710)
- extAuthKeyIdSet 値を設定するように ASN テンプレートを使用して ParseCRL_AuthKeyIdExt を修正しました (PR 7742)
- PSK 暗号化バッファ サイズに最大キー長を使用する (PR 7707)
- DTLS 1.3 のサイズ チェックの修正により、ヘッダーと CID の修正が含まれるようになりました (PR 7912,7951)
- STM32 ハッシュ FIFO を修正し、STM32U5A9xx のサポートを追加しました (PR 7787)
- Curl ビルドの 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-vulnerabilities/) を参照してください。
ビルド手順については、「INSTALL ファイル」を参照してください。詳細については、オンラインで https://wolfssl.com/wolfSSL/Docs.html をご覧ください。
リソース
wolfSSL ウェブサイト
wolfSSL Wiki
FIPS 140-2/140-3 FAQ
wolfSSL ドキュメント
wolfSSL マニュアル
wolfSSL API リファレンス
wolfCrypt API リファレンス
TLS1.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]