Skip to content

Commit 0181b34

Browse files
authored
Merge pull request #192 from tamasan238/wolfboot-202505
[JA] added appendix1-13
2 parents 664f229 + c34514d commit 0181b34

File tree

15 files changed

+1792
-2
lines changed

15 files changed

+1792
-2
lines changed

wolfBoot/mkdocs-ja.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,20 @@ nav:
1212
- "6. wolfBootの機能": chapter06.md
1313
- "7. wolfBootの既存プロジェクトへの統合": chapter07.md
1414
- "8. トラブルシューティング": chapter08.md
15-
- "A. コンフィギュレーションオプション": appendix14.md
15+
- "A. ATAセキュリティ": appendix01.md
16+
- "B. Microsoft Azure Key Vaultを使用したファームウェアの署名": appendix02.md
17+
- "C. One Time Programmable (OTP) フラッシュ領域を鍵ストアとして使用": appendix03.md
18+
- "D. KeyStore構造:複数の公開鍵のサポート": appendix04.md
19+
- "E. wolfBootをライブラリとしてビルド": appendix05.md
20+
- "F. wolfBootローダー/アップデーター": appendix06.md
21+
- "G. wolfBootを使用したMeasured Boot": appendix07.md
22+
- "H. ポスト量子署名": appendix08.md
23+
- "I. UARTを介したリモート外部フラッシュメモリのサポート": appendix09.md
24+
- "J. Renesas製品におけるwolfBootの使用": appendix10.md
25+
- "K. wolfBoot鍵ツール": appendix11.md
26+
- "L. TrustZone-MセキュアドメインにおけるwolfCrypt": appendix12.md
27+
- "M. wolfBoot TPMサポート": appendix13.md
28+
- "N. コンフィギュレーションオプション": appendix14.md
1629
theme:
1730
name: null
1831
custom_dir: ../mkdocs-material/material

wolfBoot/src-ja/appendix01.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# ATAセキュリティ
2+
3+
## はじめに
4+
5+
この文書は、wolfBootがATAセキュリティ機能を活用してATAドライブをロックまたはアンロックする方法の概要を提供します。
6+
ATAドライブは、ハードコードされたパスワードを使用するか、TPMに封印された秘密を使用してロックできます。
7+
8+
## 目次
9+
10+
- ハードコードされたパスワードでディスクをアンロックする
11+
- TPMに封印された秘密でディスクをアンロックする
12+
- パスワードを無効にする
13+
14+
## ハードコードされたパスワードでディスクをアンロックする
15+
16+
ハードコードされたパスワードを使用してディスクをアンロックするには、`.config`ファイルで次のオプションを使用します。
17+
18+
```
19+
DISK_LOCK=1
20+
DISK_LOCK_PASSWORD=hardcoded_password
21+
```
22+
23+
ATAディスクにパスワードが設定されていない場合、最初の起動時に提供されたパスワードでディスクがロックされます。
24+
25+
## TPMに封印された秘密でディスクをアンロックする
26+
27+
wolfBootは、特定の条件下でのみ解除できる方法でTPMに秘密を安全に封印できます。
28+
詳細については、[付録M](appendix13.md)[付録G](appendix07.md)を参照してください。
29+
オプション`WOLFBOOT_TPM_SEAL``DISK_LOCK`が有効になっている場合、wolfBootはディスクのロック解除のためのパスワードとしてTPMに封印された秘密を使用します。
30+
以下のオプションは、秘密の封印と解除を制御します。
31+
32+
| オプション | 説明 |
33+
|-----------|----------|
34+
| WOLFBOOT_TPM_SEAL_KEY_ID| ポリシーに署名するために使用する鍵ID |
35+
| ATA_UNLOCK_DISK_KEY_NV_INDEX | 封印された秘密を保存するNVインデックス |
36+
| WOLFBOOT_DEBUG_REMOVE_SEALED_ON_ERROR| エラーの場合、秘密を削除し`panic()`する |
37+
38+
`ATA_UNLOCK_DISK_KEY_NV_INDEX`に封印された秘密がない場合、新しいランダムな秘密が作成され、そのインデックスに封印されます。
39+
ATAドライブがロックされていない場合、最初の起動時にTPMに封印された秘密でロックされます。
40+
41+
## パスワードを無効にする
42+
43+
パスワードを無効にする必要がある場合、デバイスにはすでにマスターパスワードが設定されている必要があります。
44+
その後、次のオプションを使用してwolfBootをコンパイルすることで、ドライブからパスワードを無効にしてpanicさせることができます。
45+
46+
```
47+
WOLFBOOT_ATA_DISABLE_USER_PASSWORD=1
48+
ATA_MASTER_PASSWORD=the_master_password
49+
```

wolfBoot/src-ja/appendix02.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Microsoft Azure Key Vaultを使用したファームウェアの署名
2+
3+
Microsoftは、HSMに保存された鍵を使用して安全な鍵管理およびプロビジョニングツールを提供しています。
4+
このメカニズムは、管理された鍵を使用したペイロードの署名のサポートを含む複数の目的のための鍵管理を一元化するのに役立ちます。
5+
これはwolfBootと組み合わせて、複数台のデバイスに公開鍵をプロビジョニングするために使用できます。
6+
7+
## 鍵ストアの準備
8+
9+
wolfBootは提供される`keygen`コマンドラインツールを使用して、鍵ストアに公開鍵をインポートできます。
10+
`keygen`は生のECC鍵とASN.1形式(.der)の両方をサポートしています。
11+
12+
Azureでは、デバイスをプロビジョニングするためにASN.1形式で公開鍵をダウンロードできます。
13+
wolfBootでのファームウェア認証に使用する各公開鍵を取得するには、以下を使用します。
14+
15+
```sh
16+
az keyvault key download --vault-name <vault-name> -n test-signing-key-1 -e DER -f public-key-1.der
17+
```
18+
19+
鍵ストアは、`keygen``-i`(インポート)オプションを使用して公開鍵をインポートして作成できます。
20+
このオプションは、鍵ストアにさらに多くの鍵を追加するために複数回繰り返すことができます。
21+
22+
```sh
23+
./tools/keytools/keygen --ecc256 -i public-key-1.der [-i public-key-2.der ...]
24+
```
25+
26+
## wolfBoot用のファームウェアイメージの署名
27+
28+
任意の外部HSMを使用した署名操作は、[付録B](appendix02.md)の関連セクションに記載されているように、3つのステップで実行されます。
29+
このセクションでは、Azure Key Vaultを使用してファームウェアイメージに署名する手順について説明します。
30+
31+
### SHA256ダイジェストの取得
32+
33+
ステップ1では、`--sha-only`引数を加えて`./sign`ツールを呼び出し、署名するダイジェストを生成します。
34+
Vault内で選択した署名鍵に関連付けられた公開鍵を提供する必要があります。
35+
36+
```sh
37+
./tools/keytools/sign --ecc256 --sha-only --sha256 test-app/image.bin public-key-1.der 1
38+
```
39+
40+
https RESTリクエストに適合させるために、取得したダイジェストはbase64を使用してエンコードする必要があります。
41+
42+
```sh
43+
DIGEST=$(cat test-app/image_v1_digest.bin | base64url_encode)
44+
```
45+
46+
変数`DIGEST`には、リクエストに添付できる鍵の印刷可能なエンコーディングが保存されています。
47+
48+
### Key Vaultを使用してダイジェストに署名するためのHTTPSリクエスト
49+
50+
リクエストを準備するために、まずVaultからアクセストークンを取得し、変数に保存します。
51+
52+
```sh
53+
ACCESS_TOKEN=$(az account get-access-token --resource "https://vault.azure.net" --query "accessToken" -o tsv)
54+
```
55+
56+
選択したKey Vaultに関連付けられたURLを使用します。
57+
58+
```sh
59+
KEY_IDENTIFIER="https://<vault-name>.vault.azure.net/keys/test-signing-key"
60+
```
61+
62+
cURLを使用してリクエストを実行し、結果を変数に保存します。
63+
64+
```sh
65+
SIGNING_RESULT=$(curl -X POST \
66+
-s "${KEY_IDENTIFIER}/sign?api-version=7.4" \
67+
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
68+
-H "Content-Type:application/json" \
69+
-H "Accept:application/json" \
70+
-d "{\"alg\":\"ES256\",\"value\":\"${DIGEST}\"}")
71+
echo $SIGNING_RESULT
72+
```
73+
74+
結果の`.value`フィールドには(base64でエンコードされた)署名が含まれています。
75+
レスポンスから署名を抽出するには、JSONパーサーを使用できます。
76+
77+
```sh
78+
SIGNATURE=$(jq -jn "$SIGNING_RESULT|.value")
79+
```
80+
81+
署名はbase64からバイナリにデコードできるようになり、`sign`ツールはその署名をマニフェストヘッダーに組み込むことができます。
82+
83+
```sh
84+
echo $SIGNATURE| base64url_decode > test-app/image_v1_digest.sig
85+
```
86+
87+
### 最終ステップ:署名されたファームウェアイメージの作成
88+
89+
HSM 3ステップの第3段階では、`--manual-sign`オプションとAzure REST APIを通じて取得した署名が必要です。
90+
91+
```sh
92+
./tools/keytools/sign --ecc256 --sha256 --manual-sign test-app/image.bin test-signin-key_pub.der 1 test-app/image_v1_digest.sig
93+
```
94+
95+
結果のバイナリファイル`image_v1_signed.bin`には、wolfBootによって認証およびステージングできる署名付きファームウェアイメージが保存されます。

wolfBoot/src-ja/appendix03.md

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
# One Time Programmable (OTP) フラッシュ領域を鍵ストアとして使用
2+
3+
一部のマイクロコントローラーは、一度だけ書き込みが可能で消去できないフラッシュメモリの特別な領域を提供しています。
4+
5+
この機能は、ファームウェア更新イメージを認証するために必要な公開鍵を保存する場合に特に便利です。
6+
公開鍵は自由に配布できる暗号鍵であり、ファームウェア更新イメージの署名を検証するために使用されます。
7+
公開鍵をOTP領域に保存することで、それらが不変であり改ざんできないことを保証できます。
8+
9+
## OTPを鍵ストアとしてアクセスするためのwolfBootのコンパイル
10+
11+
OTP領域を鍵ストアとして使用するには、`FLASH_OTP_KEYSTORE`オプションを有効にしてwolfBootをコンパイルする必要があります。
12+
このオプションはデフォルトでは無効であり、鍵ストアはwolfBootバイナリ自体に組み込まれています。
13+
14+
wolfBootがOTP領域を鍵ストアとして使用する場合、実行時にOTP領域から公開鍵を読み取ります。
15+
公開鍵は、格納されている鍵の数、各鍵のサイズ、その他の情報を含む最初の16バイトヘッダーの後にOTP領域に格納されます。
16+
17+
wolfBootが起動時や更新時にファームウェアイメージの認証を開始するためには、次のセクションで説明するように、公開鍵を別のステップでOTP領域にプロビジョニングする必要があります。
18+
19+
ターゲットデバイスに応じて、OTP領域コンテンツのバイナリイメージを準備するか、`otp-keystore-primer`ファームウェアを使用してターゲットに直接鍵をプロビジョニングできます。
20+
21+
## OTP領域コンテンツのイメージの作成
22+
23+
OTP領域のコンテンツのバイナリイメージを作成できます。
24+
結果のファイル(`otp.bin`)は、ターゲットOTP領域への書き込みを可能にする任意の外部ツールを使用して手動でプロビジョニングできます。
25+
26+
現在の鍵ストアコンテンツを使用してotp-keystore-genツールをコンパイルするには、次のようにします。
27+
28+
```sh
29+
make otpgen
30+
```
31+
32+
そして、イメージファイル`otp.bin`を作成するには、次のようにします。
33+
34+
```sh
35+
./tools/keytools/otp/otp-keystore-gen
36+
```
37+
38+
## OTP領域への公開鍵の直接プロビジョニング(プライマー)
39+
40+
`.config`ファイルで`FLASH_OTP_KEYSTORE`オプションを有効にした後、「`make`」を実行してwolfBootをコンパイルすると、`tools/keytools/otp`の下に`otp-keystore-primer`という追加アプリケーションが生成されます。
41+
このアプリケーションはOTP領域に公開鍵をプロビジョニングするために使用されます。
42+
このアプリケーションをマイクロコントローラーにフラッシュすることで、鍵ストア(以前に`keygen`によって生成された)に含まれる公開鍵がOTP領域に書き込まれます。
43+
44+
`otp-keystore-primer`アプリケーションは埋め込まれた公開鍵で生成されます。
45+
鍵は`keygen`コマンドによって生成された`keystore.c`ファイルから取得されます。
46+
`otp-keystore-primer`アプリケーションは`keystore.c`ファイルから公開鍵を読み取り、OTP領域に書き込みます。
47+
48+
`keygen`アプリケーションで新しい`keystore.c`を生成した後、`make otp`を実行することで、`otp-keystore-primer`アプリケーションを再度生成できます。
49+
50+
> [!警告]
51+
> `otp-keystore-primer`アプリケーションは一回限りのアプリケーションです。アプリケーションがターゲットで実行されると、公開鍵がOTP領域に書き込まれ、それらを消去することは不可能になります。したがって、公開鍵をOTP領域にプロビジョニングする前に、公開鍵が正しいことを確認し、関連する秘密鍵が安全に保存されていることを確認することが重要です。誤って秘密鍵を紛失すると、OTP領域に保存されている公開鍵は使用できなくなります。
52+
53+
> [!注意]
54+
> **`otp-keystore-primer`アプリケーションを使用する際は十分注意してください。ご自身の責任で使用してください。**
55+
56+
##
57+
58+
### STM32H5 OTP KeyStore
59+
60+
NULCLEO-STM32H563ZI(TrustZone(PKCS11経由)、DualBank、PQ LMSによる署名)の場合
61+
62+
1) 設定と鍵ツールをセットアップする
63+
64+
```sh
65+
cp config/examples/stm32h5-tz-dualbank-otp-lms.config .config
66+
make include/target.h
67+
make keytools
68+
```
69+
70+
2) OTPに書き込む鍵を生成する
71+
72+
- `./examples/keytools/keygen --lms -g 1.key -g 2.key -g 3.key -g 4.key -g 5.key`
73+
74+
3) 生成された鍵と`src/keystore.c`をバックアップする
75+
76+
- wolfBootツリー外の安全な場所に保存する
77+
78+
4) 使用する署名鍵を設定する
79+
80+
- 生成された鍵の1つを`wolfboot_signing_private_key.der`にコピーする
81+
- `cp 1.key wolfboot_signing_private_key.der`
82+
83+
5) OTP鍵ストアをセットアップする
84+
85+
OTP鍵ストアプライマーをフラッシュする
86+
87+
- `make otp`を実行する
88+
- `./tools/keytools/otp/otp-keystore-primer.bin``0x08000000`にフラッシュする
89+
- ツールを切断してリセットボタンを押す
90+
- プライマーが実行され、keystore.cをOTPにフラッシュし、それらのブロックに書き込み保護を有効にする
91+
92+
または
93+
94+
外部ツールを使用してOTP(otp.bin)を生成してフラッシュする
95+
96+
- `make otpgen`を実行する
97+
- `./tools/keytools/otp/otp-keystore-gen`を実行してotp.binファイルを生成する
98+
- STM32CubeProgrammerなどの外部ツールを使用してotp.binを`0x08FFF000`にプログラムする
99+
100+
6) OTP鍵ストアを検証する
101+
102+
- アドレス`0x08FFF000`のメモリを読み取る(ASCII「`WOLFBOOT`」で始まるはずです)
103+
- 通常はSTM32CubeProgrammerを使用する
104+
105+
7) オプションバイトを設定する
106+
107+
- ユーザー構成2 -> TrustZone有効(TZEN=0xB4)
108+
- Bank1 - フラッシュウォーターマークエリア(`SECWM1_START=0x00``SECWM1_END=0x1F`
109+
- Bank2 - フラッシュウォーターマークエリア(`SECWM2_START=0x00``SECWM2_END=0x1F`
110+
111+
8) デバイスの一括消去
112+
113+
- STM32CubeProgrammer -> フルチップ消去
114+
115+
9) `make`を使用してwolfBootとテストアプリケーションをビルドする
116+
117+
10) wolfBootとtest-appをフラッシュする
118+
119+
- `wolfboot.bin``0x0C000000`にフラッシュする
120+
- `test-app/image_v1_signed.bin``0x08040000`にフラッシュする
121+
122+
11) 切断して再起動すると、赤色LEDが点灯するはず。
123+
124+
12) コンソール用にNUCLEOボード上のUSB UARTに接続する
125+
126+
コマンドラインを探索する(helpを実行)
127+
128+
```sh
129+
========================
130+
STM32H5 wolfBoot demo Application
131+
Copyright 2024 wolfSSL Inc
132+
GPL v3
133+
Version : 0x1
134+
========================
135+
136+
cmd> help
137+
help : shows this help message
138+
info : display information about the system and partitions
139+
success : confirm a successful update
140+
pkcs11 : enable and test crypto calls with PKCS11 in secure mode
141+
random : generate a random number
142+
timestamp : print the current timestamp
143+
benchmark : run the wolfCrypt benchmark
144+
test : run the wolfCrypt test
145+
update : update the firmware via XMODEM
146+
reboot : reboot the system
147+
```
148+
149+
13) 更新をテストする
150+
151+
- ファームウェアの新しいバージョンに署名する:`./tools/keytools/sign --lms test-app/image.bin wolfboot_signing_private_key.der 2`
152+
- シェルで「update」コマンドを実行し、xmodem転送を待つ
153+
- 「minicom」や「CoolTerm」などのxmodemをサポートするシリアルターミナルを使用する。
154+
* `/dev/ttyACM0``minicom`を実行し、「CTRL+A; S」を使用してファイル転送を開始する
155+
* xmodemを選択し、新しい署名付きファームウェアファイル`test-app/image_v2_signed.bin`に移動する
156+
- 転送中、黄色のLEDが点滅する。
157+
- 緑色のLEDはUART RXと同期しているため薄暗い
158+
- 転送の終わりに、新しいイメージが更新パーティションに配置される。
159+
- ボードをリセットして新しいファームウェアをインストールし、新しいバージョン番号を確認する。
160+
161+
更新出力の例:
162+
163+
```sh
164+
cmd> update
165+
Erasing update partition...Done.
166+
Waiting for XMODEM transfer...
167+
.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
168+
169+
170+
171+
172+
End of transfer. ret: 0
173+
New firmware version: 0x2
174+
Triggering update...
175+
Update completed successfully.
176+
177+
cmd> reboot
178+
179+
========================
180+
STM32H5 wolfBoot demo Application
181+
Copyright 2024 wolfSSL Inc
182+
GPL v3
183+
Version : 0x2
184+
========================
185+
186+
cmd>
187+
```

0 commit comments

Comments
 (0)