Skip to content

Commit f664b4f

Browse files
committed
Add Japanese support for wolfSSL-FIPS-Ready
1 parent d9b6134 commit f664b4f

File tree

5 files changed

+466
-0
lines changed

5 files changed

+466
-0
lines changed

wolfSSL-FIPS-Ready/mkdocs-ja.yml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
site_name: FIPS Ready User Guide
2+
site_url: https://wolfssl.com/
3+
docs_dir: build/html/
4+
site_dir: html/
5+
copyright: Copyright © 2023 wolfSSL Inc.
6+
nav:
7+
- "1. 非FIPS版との違い": index.md
8+
- "2. wolfSSL FIPS Ready版のビルド手順": section02.md
9+
- "3. FIPS 140-2 Ready版からの変更点": section03.md
10+
- "4. wolfCrypt FIPS Ready API": section04.md
11+
theme:
12+
name: null
13+
custom_dir: ../mkdocs-material/material
14+
language: en
15+
palette:
16+
primary: indigo
17+
accent: indigo
18+
font:
19+
text: roboto
20+
code: roboto mono
21+
icon: "logo.png"
22+
logo: logo.png
23+
favicon: logo.png
24+
feature:
25+
tabs: true
26+
extra_css: [skin.css]
27+
use_directory_urls: false
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# wolfSSL FIPS Ready
2+
3+
FIPS認証の取得が求められるプロジェクトには、wolfSSL FIPS Ready版が役立ちます。wolfSSLソースツリーに含まれるFIPS対応の暗号レイヤーを用いて、FIPS認証を取得する手間を低減できます。FIPS Ready版はFIPS版と同一の構成ですが、認証は取得していません。必要なタイミングでFIPS認証プロセスを実行する準備が整っています。FIPS Ready版にはFIPSコードが組み込まれており、FIPS 140-3に示されるデフォルト・エントリーポイントの実用例やConditional Algorithm Self-tests(CAST)を含んでいます。必要なタイミングで実行環境をテストし、wolfSSLの既存のFIPS 140-3認証に追加、または新たなFIPS140-3認証を申請することですべての手続きが完了します。
4+
5+
FIPS Ready版はオープンソースと商用ライセンスのデュアルライセンスで提供しており、GPLv3ライセンス下で動作検証を行っていただけます。その後商用環境でご利用いただくには、商用ライセンス契約が必要です。
6+
7+
FIPSは複雑なトピックです。このドキュメントをご覧いただいた後、ご質問がありましたら[email protected]までお問い合わせください。
8+
9+
## 非FIPS版との違い
10+
11+
wolfCrypt FIPS APIは、FIPS環境内に存在するすべてのアルゴリズム関数のラッパーを提供します。FIPS APIをご利用にならず、非FIPS版にも存在するAPIを用いてコードを記述いただくことも可能です。いずれの場合でも、コンパイル時に自動的にwolfCrypt FIPS APIに置換します。FIPS APIは、実際の関数を呼び出す前に内部ステータスのセルフテストを行います。そして各アルゴリズムの初回実行時にCASTが実行します。このようなタイミングでの実行を避けたい場合は、起動時に予め各テストを実行することも可能です。
12+
13+
wolfCrypt FIPS 140-3 Ready版のコードには、メモリ内の実行可能ファイルの整合性を自動的にチェックする必須の電源投入時自己テスト (POST) が含まれています。これにはアルゴリズムのKnown Answere Tests (KAT) が含まれており、140-2 以降変更しておりません。 POST で使用しないものは、使用が条件付きになりました。実行可能ファイルは、FIPS環境内のコードがメモリ内で隣接するように設計しています。FIPSコードを使用するアプリケーションが起動するか、共有ライブラリがロードされると、ライブラリのデフォルトエントリーポイントを呼び出し、POSTを自動的に実行します。これには、コア内のメモリチェックとPOSTで使用するアルゴリズム(HMAC-SHA256)のためのKATの2つが含まれます。
14+
15+
まずHMAC-SHA256のPOSTを実行し、次いでコア内メモリテストを実行します。メモリ内のコードはHMAC-SHA256でハッシュを取り、一致した場合のみテストを続行します。一致しなければFIPSモジュールはエラー状態となり、整合性が取れるまですべての呼び出しは成功しません。
16+
17+
FIPS環境内の他のアルゴリズムは、初回使用時または開発者が指定したタイミングで既定のデータを用いてテストします。出力は事前に計算された回答と比較します。テスト値はすべてFIPS環境内に存在し、呼び出された際にチェックします。署名と検証などのいくつかのテストではランダム性を含むため、既知のデータを署名し既知のデータで検証します。鍵の生成も同様にテストします。
+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# wolfSSL FIPS Ready版のビルド手順
2+
3+
通常版と大きな差はありませんが、いくつかの追加手順が必要です。
4+
5+
ここでは、LinuxまたはmacOS環境でwolfSSL FIPS Ready GPL v3版を利用し、システムに共有ライブラリとしてインストールする手順を示します。
6+
7+
## ソースコードの解凍
8+
9+
```
10+
$ tar xzvf wolfssl-5.6.4-gplv3-fips-ready.tar.gz
11+
$ cd wolfssl-5.6.0-gplv3-fips-ready
12+
```
13+
14+
ソースコードを解凍し、生成されたディレクトリに移動します。商用リリースを受け取った場合は、gplv3をcommercialに、.tar.gz を .7z に、tar xzvf を 7z x -p<password> に置き換えてください。
15+
16+
## ビルドを構成
17+
18+
```
19+
$ ./configure --enable-fips=ready
20+
```
21+
22+
このコマンドは、FIPS Ready版のwolfSSLを構築するようにMakefileを構成します。
23+
24+
## ライブラリのビルド
25+
26+
```
27+
$ make
28+
```
29+
30+
これにより、すべてのソースがコンパイルされライブラリがリンクされます。 また、サンプルツールとテストツールも構築します。
31+
32+
## コアメモリのハッシュを更新
33+
34+
```
35+
$ ./fips-hash.sh
36+
37+
$ make # Re-build once the hash has been updated
38+
```
39+
40+
このステップでコア内メモリ テストのハッシュを計算し、更新する必要があります。 wolfCrypt テストは、fips-hash.sh スクリプトによって呼び出されたときに失敗するはずです。次のメッセージが出力されます。(ハッシュ値は一意であることにご注意ください)
41+
42+
```
43+
in my Fips callback, ok = 0, err = -203
44+
45+
message = In Core Integrity check FIPS error
46+
47+
hash = 8D29242F610EAEA179605BB1A99974EBC72B0ECDB26B483B226A729F36FC82A2
48+
49+
In core integrity hash check failure, copy above hash
50+
51+
into verifyCore[] in fips_test.c and rebuild
52+
```
53+
54+
ビルド時に他のオプションを追加するとハッシュ値が変化する可能性があるため、この手順を繰り返す必要があります。 またアプリケーションに変更を加えると、アプリケーションを再コンパイルしたときにメモリ内の FIPS 境界が移動する可能性があります。 アプリケーションのみが更新された場合のハッシュの変化は、モジュールが影響を受けていることを示すものではなく、メモリ内の所定の位置にシフトされたことを示します。 これは、静的ライブラリとして使用する場合に発生します。 共有ライブラリではこの問題は発生しません。
55+
56+
4.1 提供している fips-hash.sh スクリプトを使用せずに上記を実行する場合は、ファイル wolfcrypt/src/fips_test.c を編集してハッシュを手動で更新するか、次のような設定を使用することができます。
57+
58+
```
59+
$ ./configure --enable-fips=ready CFLAGS=”-DWOLFCRYPT_FIPS_CORE_HASH_VALUE=8D29242F610EAEA179605BB1A99974EBC72B0ECDB26B483B226A729F36FC82A2”
60+
```
61+
62+
4.2 再びmakeを実行します。
63+
64+
## ビルドの検証
65+
66+
```
67+
$ make check
68+
```
69+
70+
Makefile 内のチェック ターゲットは、wolfSSLおよびwolfCryptで提供されるすべてのテストツールとスクリプトです。すべてが正常であれば、次の出力が表示されるはずです。
71+
72+
```
73+
74+
PASS: scripts/resume.test
75+
76+
PASS: scripts/external.test
77+
78+
PASS: scripts/google.test
79+
80+
PASS: testsuite/testsuite.test
81+
82+
PASS: scripts/openssl.test
83+
84+
PASS: tests/unit.test
85+
86+
=======================================================================
87+
88+
Testsuite summary for wolfssl 4.0.0
89+
90+
=======================================================================
91+
92+
# TOTAL: 6
93+
94+
# PASS: 6
95+
96+
# SKIP: 0
97+
98+
# XFAIL: 0
99+
100+
# FAIL: 0
101+
102+
# XPASS: 0
103+
104+
# ERROR: 0
105+
106+
=======================================================================
107+
108+
```
109+
110+
## ライブラリのインストール
111+
112+
```
113+
$ make install
114+
```
115+
116+
Makefile 内のinstallターゲットにより、すべてのヘッダーとライブラリがシステムにインストールされます。デフォルトでは /usr/local 配下にインストールします。
117+
118+
これで、アプリケーションのビルド時にwolfSSL FIPS Ready版をご利用いただけます。
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# FIPS 140-2 Ready版からの変更点
2+
3+
1. FIPSモードで実行する場合は、アプリケーションレベルで wc_SetSeed_Cb を呼び出す必要があります。
4+
5+
a. +#ifdef WC_RNG_SEED_CB
6+
7+
b. + wc_SetSeed_Cb(wc_GenerateSeed);
8+
9+
c. +#endif
10+
11+
2. 鍵アクセス管理
12+
13+
a. wolfSSL(SSL/TLS)APIを呼び出す場合には、この項による影響はありません。しかしCrypt API(wc_XXX)を呼び出す場合には、次のステップをご参照ください。
14+
15+
b. 秘密鍵のロードまたは使用を伴う wolfCrypt (wc_XXX) API を直接呼び出す場合は、アプリケーション レベルで鍵へのアクセスを管理する必要があります。具体的には、秘密鍵のロードや使用前に、アプリケーションでPRIVATE_KEY_UNLOCK()を呼び出してロックを解除しなければなりません。使用後にはPRIVATE_KEY_LOCK()を呼び出して再度ロックする必要があります。
16+
17+
i. PRIVATE_KEY_UNLOCK()とPRIVATE_KEY_LOCK()は、アプリケーションの起動時及びシャットダウン時にそれぞれ1回だけ呼び出すことも可能です。
18+
19+
ii. 秘密鍵のロードや使用の前後で都度これらを呼び出すことで、より厳密なアクセス管理を実現できます。
20+
21+
** アプリケーション終了前に、必ずロックする必要があります。 - これはドキュメント要件であり、実行時にエラーや終了防止によって強制されるものではありません。 終了する前にキーを再ロックしないと、アプリケーションは「FIPS に準拠していない」ことになります。
22+
23+
24+
c. アプリケーションをwolfSSL FIPS版と非FIPS版の両方にリンクできるようにするには、次のように実装します。
25+
26+
27+
```
28+
#if !defined(PRIVATE_KEY_LOCK) && !defined(PRIVATE_KEY_UNLOCK)
29+
#define PRIVATE_KEY_LOCK() do {} while (0)
30+
#define PRIVATE_KEY_UNLOCK() do {} while (0)
31+
#endif
32+
```
33+

0 commit comments

Comments
 (0)