コンテンツにスキップ

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 (確率的署名スキーム) エンコードを有効化