wolfProviderのビルド
wolfProviderのダウンロード
wolfProviderの最新バージョンは、wolfSSL Inc. から直接入手できます。 詳細については、info@wolfssl.jpまでお問い合わせください。
パッケージ構成
wolfProviderパッケージは、以下のように構成しています。
certs/ (ユニットテストで使用されるテスト用証明書、鍵)
docs/ (インテグレーションガイドおよびFIPSインテグレーションガイド)
examples/ (実装例)
include/
wolfprovider/ (wolfProviderヘッダーファイル)
IDE/ (Windows Visual Studioソリューションを含むインテグレーション例)
scripts/ (wolfProvider テスト/ビルドスクリプト)
src/ (wolfProvider ソースファイル)
test/ (wolfProvider テストファイル)
provider.conf (wolfProviderを使用する場合のOpenSSLコンフィギュレーションファイルサンプル)
provider-fips.conf (wolfProvider FIPS版を使用する場合のOpenSSLコンフィギュレーションファイルサンプル)
*nix上でのビルド
最も簡単な方法は、以下のように scripts/build-wolfprovider.sh スクリプトを使用することです。
./scripts/build-wolfprovider.sh
このスクリプトはOpenSSLとwolfSSLをデフォルトのオプションセットでクローン、構成、コンパイル、インストールします。
これらの構成オプションを変更するには、以下の2つの方法があります。
スクリプトを呼び出す前に、各種環境変数を設定する方法:
OPENSSL_TAG=openssl-3.5.4 WOLFSSL_TAG=v5.9.2-stable WOLFPROV_DEBUG=1 ./scripts/build-wolfprovider.sh
スクリプトの引数として指定する方法:
./scripts/build-wolfprovider.sh --openssl-ver=openssl-3.5.4 --wolfssl-ver=v5.9.2-stable --debug
これらの方法を組み合わせて、目的のビルドの組み合わせを実現することもできます。
環境変数とスクリプト引数の完全なリストについては、./scripts/build-wolfprovider.sh --help を実行してください。
必要に応じて、以下のガイドを使用して各コンポーネントを手動でコンパイルすることもできます。
OpenSSLをビルド
すでにインストールされたOpenSSLを使用することも、新しく1からOpenSSLをコンパイルして使用することもできます。 以下に、*nix(Linux, Unix)上でOpenSSLをコンパイルする一般的な手法を示します。 より詳しいビルド手順をお求めでしたら、OpenSSLのINSTALLファイルやドキュメントをご参照ください。
# サポート対象のOpenSSL 3.x系列から最新のパッチリリースをチェックアウトします。
git clone https://github.com/openssl/openssl.git
cd openssl
git checkout "$(git tag -l 'openssl-3.*' | grep -Ev 'alpha|beta' | sort -V | tail -1)"
./config no-fips shared
make
sudo make install
選択したOpenSSL 3.x系列の最新パッチリリースを必ず使用してください(OpenSSLバージョン互換性の章を参照)。古いポイントリリースには、セキュリティ修正が含まれていない可能性があります。
wolfSSLをビルド
wolfProviderでwolfSSL FIPS版を使用するには、特定のFIPS検証済みソースバンドルやセキュリティポリシーで指定されたビルド手順に従う必要があります。
まずコンフィギュレーションオプションとして--enable-fipsが必要で、かつ WOLFSSL_PUBLIC_MP が定義された状態でwolfSSLをコンパイルします。
以下に、Linuxで「wolfCrypt Linux FIPSv5バンドル」をビルドする例を示します。
cd wolfssl-X.X.X-commercial-fips-linuxv5
./configure --enable-fips=v5 CFLAGS="-DWOLFSSL_PUBLIC_MP"
make
./wolfcrypt/test/testwolfcrypt
# testwolfcryptが出力したverifyCoreハッシュ値を使用してfips_test.cを更新します
make
./wolfcrypt/test/testwolfcrypt
# すべてのアルゴリズムがPASSすることを確認します
sudo make install
可能であれば、make を実行してから ./fips-hash.sh ユーティリティを実行し、もう一度 make を実行する方が簡単かもしれません。
このユーティリティは、testwolfcrypt のハッシュ出力を使用して fips_test.c を更新するプロセスを自動化します。
非FIPS版のwolfSSLを使用する場合は、以下のようになります。
cd wolfssl-X.X.X
./configure --enable-opensslcoexist --enable-cmac --enable-keygen --enable-sha --enable-des3 --enable-aesctr --enable-aesccm --enable-x963kdf --enable-compkey CPPFLAGS="-DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DHAVE_PUBLIC_FFDHE -DWOLFSSL_DH_EXTRA -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER -DRSA_MIN_SIZE=1024" --enable-certgen --enable-aeskeywrap --enable-enckeys --enable-base16 --with-eccminsz=192
make
sudo make install
より良いAES-GCMサポートのために、利用可能であれば --enable-aesgcm-stream を追加してください。
X25519鍵交換のサポートを含めるために --enable-curve25519 を追加してください。
X448鍵交換のサポートを含めるために --enable-curve448 を追加してください。
Ed25519署名と証明書のサポートを含めるために --enable-ed25519 を追加してください。
Ed448署名と証明書のサポートを含めるために --enable-ed448 を追加してください。
SHA-3およびSHAKE-256のサポートを含めるために --enable-sha3 と --enable-shake256 を追加してください。
OpenSSLでPKCS#12を使用する場合は、 --enable-pwdbased を追加してください。
事前定義された6144ビットおよび8192ビットDHパラメータを有効にするために、CPPFLAGSに -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DFP_MAX_BITS=16384 を追加してください。
同じ鍵でHMACを繰り返し実行してパフォーマンスを向上させる場合は --enable-hmac-copy を追加してください。
(wolfSSL 5.7.8以降で利用可能です。)
SP整数演算を使用するために --enable-sp=yes,asm --enable-sp-math-all を追加してください。
使用する際は -DFP_MAX_BITS=16384 を -DSP_INT_BITS=8192 に置き換えてください。
FIPS v2バンドルからビルドしており、gitリポジトリからではない場合は、-DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER を削除し、上記のconfigureコマンドに --enable-fips=v2 を追加してください。
FIPS Readyバンドルを使用している場合は、--enable-fips=v2 を --enable-fips=ready に変更してください。
--with-eccminsz=192 がwolfSSLでサポートされていない場合は、CPPFLAGSに -DECC_MIN_KEY_SZ=192 を追加してください。
wolfSSLをGitHubリポジトリから取得された場合は、./configureを実行する前にautogen.shスクリプトを実行する必要があります。
これにより、configureスクリプトが生成されます。
./autogen.sh
wolfProviderをビルド
Linuxなどの*nixライクな環境でwolfProviderをビルドする場合は、autoconfをご利用ください。 wolfProviderをビルドするには、wolfProviderのルートディレクトリ上で次のコマンドを実行します。
./configure
make
wolfProviderをGitHubリポジトリから取得された場合は、./configureを実行する前にautogen.shスクリプトを実行する必要があります。
./autogen.sh
任意の数のビルドオプションを ./configure に追加できます。
利用可能なビルドオプションの一覧については、後の「ビルドオプション」セクションに掲載しているほか、
次のコマンドを実行することで表示できます。
./configure --help
wolfProviderは通常、システムにインストールされたデフォルトのOpenSSLライブラリを使用します。
--with-opensslオプションにより、特定のディレクトリに存在するOpenSSLを使用することもできます。
./configure --with-openssl=/usr/local/ssl
デフォルト以外のOpenSSLを使用する場合、ライブラリ検索パスに追加しなければならないケースがあります。
Linuxシステムでは、次のようにLD_LIBRARY_PATHを編集します。
export LD_LIBRARY_PATH=/usr/local/ssl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
wolfProviderをビルドしインストールするには、以下のコマンドを実行します。
make
make install
インストール時にはroot権限を求められる場合があります。
その際は、コマンドの前にsudoを付加します。
sudo make install
ビルド結果をテストするには、wolfProviderのルートディレクトリで以下のコマンドを実行します。
./test/unit.test
次のように、autoconfを使用して実行することもできます。
make check
ライブラリが見つからない場合、
error while loading shared libraries: libssl.so.3
のようなエラーが発生します。
環境変数LD_LIBRARY_PATHを編集することで解決しないかお試しください。
Windows上でのビルド (Visual Studio)
wolfProviderには、IDE/WINVS/wolfprovider.sln にVisual Studio 2022ソリューションが含まれており、wolfSSLをバックエンドとするOpenSSL 3.xプロバイダーである libwolfprov.dll をビルドします。
DLL名は重要です。-provider libwolfprov は libwolfprov.dll に解決されます。
Windows上ではconfigureステップはなく、wolfSSLはuser_settings.hを介して構成します。
前提条件:
- C++ツールセット (v143) およびMASM (
ml64.exe) を含むVisual Studio 2022 - OpenSSLをビルドするためのPerl(例えばStrawberry Perl)、NASM、git。NASMはPerlとは別にインストールする必要があります
このソリューションは4つのx64構成を提供します。
DLL Release と DLL Debug は、実際に配布されるプロバイダー (libwolfprov.dll) をビルドします。
Static Release と Static Debug は、wolfProviderを静的リンクして単体テストを実行するunit-test.exeをビルドします。
配布されるプロバイダーはDLLです。静的リンクしたwolfProviderは、代わりにOSSL_PROVIDER_add_builtin()を使用してOpenSSLの組み込みプロバイダーとして登録します(wolfProviderのロードの章を参照)。
wolfProvider、wolfSSL、OpenSSLは同じ階層に並べて配置されていることを前提としています。
パスはwolfprovider.propsで設定されており、コマンドラインから上書きできます(例: /p:wolfCryptDir=D:\wolfssl)。
非FIPS版・FIPS版いずれのwolfSSLビルドもサポートしています。
ビルドオプション (./configure に指定するオプション)
ライブラリの構築方法をカスタマイズするために./configureスクリプトに追加できるオプションを以下に示します。
デフォルトでは、ビルド時間を半分にするために共有ライブラリのみをビルドします。 必要に応じて、静的ライブラリをビルドしたり共有ライブラリのビルドを無効化したりできます。
| オプション | デフォルト値 | 説明 |
|---|---|---|
| --disable-option-checking | 無効 | |
| --enable-silent-rules | 無効 | ビルド出力の詳細度を低くする (元に戻す: "make V=1") |
| --disable-silent-rules | 無効 | ビルド出力の詳細度を高くする (元に戻す: "make V=0") |
| --enable-static | 無効 | 静的ライブラリをビルドする |
| --enable-pic[=PKGS] | 両方使用 | PIC/非PIC オブジェクトのみを使用する |
| --enable-shared | 有効 | 共有ライブラリをビルドする |
| --enable-fast-install[=PKGS] | 有効 | 高速にインストールできるよう最適化する |
| --enable-aix-soname=aix|svr4|both | aix | AIXで提供する共有ライブラリのバージョン管理 (別名 "SONAME") バリアント |
| --enable-dependency-tracking | 無効 | 遅い依存関係抽出を拒否しない |
| --disable-dependency-tracking | 無効 | ワンタイムビルドを高速化する |
| --disable-libtool-lock | 無効 | ロックを回避する (並列ビルドが失敗する可能性があります) |
| --enable-debug | 無効 | wolfProviderのデバッグ出力を有効にする |
| --enable-coverage | 無効 | コードカバレッジ統計を生成するようにビルドする |
| --enable-usersettings | 無効 | user_settings.h を使用し、MakefileのCFLAGSを使用しない |
| --enable-dynamic | 有効 | wolfProviderをダイナミックプロバイダーとしてロードできるようにする |
| --enable-singlethreaded | 無効 | wolfProviderをシングルスレッド環境で使用する |
| --enable-debug-silent | 無効 | --enable-debugとともに使用し、デバッグログをコンパイルには含めるが、実行時にWOLFPROV_LOG_LEVEL / WOLFPROV_LOG_COMPONENTSで有効化するまで出力を抑制する(--enable-debugなしでは効果なし) |
| --enable-replace-default | 無効 | 置き換え用デフォルトモード向けに-DWOLFPROV_REPLACE_DEFAULTを指定してwolfProviderをコンパイルする。wolfProviderをデフォルトプロバイダーにするには、wolfProviderのprovider_predefined.c置換を組み込んだOpenSSLのビルドも必要。完全な構成にはscripts/build-wolfprovider.sh --replace-defaultを使用する |
| --enable-seed-src | 無効 | フォークセーフなエントロピーのために、/dev/urandom キャッシュを使用する SEED-SRC エントロピーソースを有効にする |
| --enable-pqc | 無効 | ML-KEM、ML-DSA、SLH-DSA (FIPS 203/204/205) を有効にする。wolfSSL master/v5.9.2以降およびOpenSSL 3.6以降が必要 |
| --enable-mlkem | 無効 | ML-KEM (FIPS 203) のみを有効にする |
| --enable-mldsa | 無効 | ML-DSA (FIPS 204) のみを有効にする |
| --enable-slhdsa | 無効 | SLH-DSA (FIPS 205) のみを有効にする |
| --enable-lms | 無効 | LMS検証のみを有効にする |
| --with-openssl=DIR | リンクするOpenSSLのインストール場所。設定されていない場合は、システムのデフォルトのライブラリとインクルードパスが使用されます。 | |
| --with-wolfssl=DIR | リンクするwolfSSLのインストール場所。設定されていない場合は、システムのデフォルトのライブラリとインクルードパスが使用されます。 |
ビルド用マクロ定義
wolfProviderは、お客様がwolfProviderのビルド方法を設定できるようにするいくつかのプリプロセッサマクロを公開しています。 以下にその一覧を示します。
| 定義 | 説明 |
|---|---|
| WOLFPROVIDER_USER_SETTINGS | ビルドフラグまたはuser_settings.hで定義すると、wolfProviderがuser_settings.h内のユーザー指定定義を読み込む。一部のソースファイルは短い名前WOLFPROV_USER_SETTINGSも確認する。別の--enable-usersettings configureオプションは、ビルドシステムが独自のMakefile CFLAGSを追加しないようにするもので、このマクロ自体は定義しない |
| WOLFPROV_DEBUG | デバッグ情報を出力する |
| WP_CHECK_FORCE_FAIL | テスト目的で障害チェックを強制する |
| WP_ALLOW_NON_FIPS | FIPSモードで特定の非FIPSアルゴリズムを許可する |
| WP_HAVE_AESCCM | CCM (Counter with CBC-MAC) モードでのAES暗号化を有効化 |
| WP_HAVE_AESCFB | CFB (Cipher Feedback) モードでのAES暗号化を有効化 |
| WP_HAVE_AESCBC | CBC (Cipher Block Chaining) モードでのAES暗号化を有効化 |
| WP_HAVE_AESCTR | CTR (Counter) モードでのAES暗号化を有効化 |
| WP_HAVE_AESCTS | CTS (Ciphertext Stealing) モードのAES暗号化を有効化 |
| WP_HAVE_AESECB | ECB (Electronic Codebook) モードのAES暗号化を有効化 |
| WP_HAVE_AESGCM | GCM (Galois/Counter Mode) モードのAES暗号化を有効化 |
| WP_HAVE_CMAC | CMAC (Cipher-based Message Authentication Code)を有効化 |
| WP_HAVE_DES3CBC | CBCモードのTriple DES暗号化を有効化 |
| WP_HAVE_DH | Diffie-Hellman鍵交換を有効化 |
| WP_HAVE_DIGEST | 汎用ダイジェスト/ハッシュアルゴリズムを有効化 |
| WP_HAVE_ECC | 汎用楕円曲線暗号を有効化 |
| WP_HAVE_EC_P192 | P-192 楕円曲線を有効化 |
| WP_HAVE_EC_P224 | P-224 楕円曲線を有効化 |
| WP_HAVE_EC_P256 | P-256 楕円曲線を有効化 |
| WP_HAVE_EC_P384 | P-384 楕円曲線を有効化 |
| WP_HAVE_EC_P521 | P-521 楕円曲線を有効化 |
| WP_HAVE_ECDH | ECDH (楕円曲線 Diffie-Hellman) 鍵交換を有効化 |
| WP_HAVE_ECDSA | ECDSA (楕円曲線デジタル署名アルゴリズム) を有効化 |
| WP_HAVE_ECKEYGEN | 楕円曲線鍵生成を有効化 |
| WP_HAVE_ED25519 | Ed25519 楕円曲線署名を有効化 |
| WP_HAVE_ED448 | Ed448 楕円曲線署名を有効化 |
| WP_HAVE_GMAC | GMAC (ガロア/カウンターモード認証) を有効化 |
| WP_HAVE_HKDF | HKDF (HMACベースの鍵導出関数) を有効化 |
| WP_HAVE_HMAC | HMAC (ハッシュベースのメッセージ認証コード) を有効化 |
| WP_HAVE_KBKDF | KBKDF (鍵ベースの鍵導出関数) を有効化 |
| WP_HAVE_KRB5KDF | Kerberos 5 鍵導出関数を有効化 |
| WP_HAVE_LMS | LMS (RFC 8554 / SP 800-208) 検証を有効化 |
| WP_HAVE_MD5 | MD5 ハッシュアルゴリズムを有効化 |
| WP_HAVE_MD5_SHA1 | MD5+SHA1 の組み合わせを有効化 |
| WP_HAVE_MLDSA | ML-DSA (FIPS 204) ポスト量子署名を有効化 |
| WP_HAVE_MLKEM | ML-KEM (FIPS 203) ポスト量子鍵カプセル化を有効化 |
| WP_HAVE_PBE | パスワードベースの暗号化を有効化 |
| WP_HAVE_RANDOM | 乱数生成を有効化 |
| WP_HAVE_RSA | RSA 暗号化と署名を有効化 |
| WP_HAVE_SEED_SRC | SEED-SRC エントロピーソースを有効化 |
| WP_HAVE_SHA1 | SHA1 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA224 | SHA224 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA256 | SHA256 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA384 | SHA384 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA3 | SHA3 ファミリ ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA3_224 | SHA3-224 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA3_256 | SHA3-256 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA3_384 | SHA3-384 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA3_512 | SHA3-512 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA512 | SHA512 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA512_224 | SHA512/224 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHA512_256 | SHA512/256 ハッシュアルゴリズムを有効化 |
| WP_HAVE_SHAKE_256 | SHAKE256 拡張出力関数を有効化 |
| WP_HAVE_SSHKDF | SSHKDF (SSH 鍵導出関数) を有効化 |
| WP_HAVE_SLHDSA | SLH-DSA (FIPS 205) ポスト量子署名を有効化 |
| WP_HAVE_TLS1_PRF | TLS1 擬似乱数関数を有効化 |
| WP_HAVE_X25519 | X25519 楕円曲線を有効化 |
| WP_HAVE_X448 | X448 楕円曲線を有効化 |
| WP_RSA_PSS_ENCODING | RSA-PSS (確率的署名スキーム) エンコードを有効化 |