本デバイスへのアクセスをより安全なものとするため、ゲージを使用してホストを認証することもできます。これにより、ゲージはセキュリティの状態を変更し、ロックを解除して、ホストがゲージを更新できるようになります。この機能を実行するには、まずホストが許可された公開キーをプログラミングする必要があります。これには、ゲージが「フルアクセス」状態のとき、MAC サブコマンド 0x0034 に30バイトの圧縮された公開キーを送信し、公開キーを書き込む必要があります。ホスト認証用に現在プログラミングされている公開キーを確認するため、この同じコマンドを読み取っておく必要があります。
公開キーがプログラミングされていない場合は、古い「セキュリティキー」の UNSEAL 操作が使用されます。ただし、公開キーがプログラミングされると、古い UNSEAL コマンドは無効になります。
注: SEAL コマンドを送信する前に、プログラミング後に公開キーを読み取り、値が正しく保存されていることを確認してください。対応するプライベートキーがないと、SEALED 状態のデバイスを回復する方法はありません。
この手順は、図 5-1図に従い、ゲージに対する SMBus ManufacturerAccess( ) (MAC) コマンドを用いて行う必要があります。
フローの概要は以下のとおりです。
- ホストが、次のいずれかのデータブロックを用いてデータを含む MAC サブコマンド 0x003a を送信します。
- UNSEAL アクセスアクションを要求するには、データブロック 0x14、0x04、0x72、0x36 を使用します
- FULL_ACCESS アクセスアクションを要求するには、データブロック 0xff、0xff、0xff、0xff を使用します
- ホストは 0x003a を使って MAC 結果を読み出し、生成された8バイトのチャレンジコードを受信します。
- ホストは8バイトのチャレンジとコマンドを1つのメッセージに結合し、30バイトのrと30バイトのsを生成するプライベートキーでメッセージに署名します。
- 例えば、ゲージがチャレンジ 0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0 を生成した場合、UNSEAL 操作に署名するためのフルメッセージ文字列は、0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0、0x14、0x04、0x72、0x36となります
- ホストが、結果であるrとsをゲージに書き込みます。
- ECC_R (0x003c) サブコマンドは、30バイトのr値、またはフルの60バイトr、s値を受け入れます。
- ECC_S (0x003d) サブコマンドは、r値が残量計に送信された後に書き込またれ30バイトのs値を受け入れます。
- ゲージにrとsの両方が設定されると、ゲージは署名を検証します。
- 署名が有効な場合は、コマンドによって要求された作業が実行されます。
より詳細な実装フローチャートが図 5-2に示されています。