この記事では、Device Provisioning Service で対称キーを使用する場合の ID 構成証明プロセスについて説明します。 対称キーの構成証明は、Device Provisioning Service インスタンスを使用してデバイスを認証するための簡単な方法です。 この構成証明方法は、デバイス のプロビジョニングを初めて使用する開発者、または厳密なセキュリティ要件がない開発者向けの "Hello world" エクスペリエンスを表します。 TPM または X.509 証明書を使用したデバイス構成証明はより安全であり、より厳格なセキュリティ要件に使用する必要があります。
対称キーの登録では、セキュリティ機能が制限されたレガシ デバイスが Azure IoT 経由でクラウドにブートストラップする方法も提供されます。
対称キーの作成
既定では、[対称キーを 自動的に生成 する] オプションを有効にして新しい登録が作成されると、Device Provisioning Service によって長さが 64 バイトの新しい対称キーが作成されます。
このオプションを無効にして、登録用に独自の対称キーを指定することもできます。 対称キーは Base 64 形式で、キーの長さは 16 バイトから 64 バイトの間である必要があります。
詳細な認証プロセス
Device Provisioning Service での対称キーの構成証明は、IoT ハブでサポートされているのと同じ セキュリティ トークン を使用して実行され、デバイスを識別します。 これらのセキュリティ トークンは Shared Access Signature (SAS) トークンです。
SAS トークンには、対称キーを使用して作成されるハッシュ 署名 があります。 Device Provisioning Service は署名を再作成して、構成証明中に提示されたセキュリティ トークンが本物かどうかを確認します。
SAS トークンの形式は次のとおりです。
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
各トークンのコンポーネントを次に示します。
| 価値 | Description |
|---|---|
| {signature} | HMAC-SHA256 署名文字列。 個々の登録の場合、この署名は、対称キー (プライマリまたはセカンダリ) を使用してハッシュを実行することによって生成されます。 登録グループの場合は、登録グループ キーから派生したキーを使用してハッシュを実行します。 ハッシュは、 URL-encoded-resourceURI + "\n" + expiryという形式のメッセージに対して実行されます。
重要: キーは、HMAC-SHA256 計算を実行するために使用される前に base64 からデコードする必要があります。 また、署名の結果は URL でエンコードする必要があります。 |
| {resourceURI} | Device Provisioning Service インスタンスのスコープ ID から始まる、このトークンでアクセスできる登録エンドポイントの URI。 たとえば、{Scope ID}/registrations/{Registration ID} のように指定します。 |
| {expiry} | 1970年1月1日午前0時0分0秒(UTC)以降の秒数を示すUTF-8エンコーディングされた文字列。 |
| {URL-encoded-resourceURI} | 小文字のリソース URI を小文字で URL エンコードする |
| {policyName} | このトークンが参照する共有アクセス ポリシーの名前。 対称キー構成証明を使用してプロビジョニングするときに使用されるポリシー名は 登録です。 |
SAS トークンを作成するコード例については、 SAS トークンの構造を参照してください。
対称キーを使用した個別登録
デバイスが個々の登録で構成証明を行う場合、デバイスは個々の登録エントリで定義されている対称キーを使用して、SAS トークンのハッシュ署名を作成します。
対称キーを使用したグループ登録
個々の登録とは異なり、登録グループの対称キーは、プロビジョニング時にデバイスによって直接使用されることはありません。 代わりに、登録グループを介してプロビジョニングするデバイスは、派生デバイス キーを使用してプロビジョニングします。 派生デバイス キーは、デバイスの登録 ID のハッシュであり、登録グループの対称キーを使用して計算されます。 その後、デバイスはその派生デバイス キーを使用して、DPS への登録に使用する SAS トークンに署名できます。 デバイスは登録時に登録 ID を送信するため、DPS は登録グループの対称キーを使用してデバイスの派生デバイス キーを再生成し、SAS トークンの署名を確認できます。
最初に、登録グループを介して認証するデバイスごとに一意の登録 ID が定義されます。 登録 ID は、英数字と有効な特殊文字 ( - . _ :) の大文字と小文字を区別しない文字列 (最大 128 文字) です。 最後の文字は英数字またはダッシュ ('-') である必要があります。 登録 ID は、デバイスを識別する一意の ID である必要があります。 たとえば、デバイスを一意に識別するために使用できる MAC アドレスまたはシリアル番号などです。 その場合、登録 ID は、次の例のような MAC アドレスとシリアル番号で構成できます。
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
デバイスの登録 ID が定義されると、登録グループの対称キーを使用して、登録 ID の HMAC-SHA256 ハッシュを計算し、派生デバイス キーを生成します。 派生デバイス キーを計算する方法の例を次のタブに示します。
Azure CLI の IoT 拡張機能には、派生デバイス キーを生成するための compute-device-key コマンドが用意されています。 このコマンドは、Windows ベースまたは Linux システムから PowerShell または Bash シェルで使用できます。
--key 引数の値を、登録グループの主キーに置き換えます。
引数の値 --registration-id 登録 ID に置き換えます。
az iot dps enrollment-group compute-device-key --key 8isrFI1sGsIlvvFSSFRiMfCNzv21fjbE/+ah/lSh3lF8e2YG1Te7w1KpZhJFFXJrqYKi9yegxkqIChbqOS9Egw== --registration-id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
結果の例:
"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="
その後、結果のデバイス キーを使用して、構成証明に使用される SAS トークンを生成します。 登録グループ内の各デバイスは、一意の派生キーから生成されたセキュリティ トークンを使用して証明する必要があります。 登録グループの対称キーを構成証明書に直接使用することはできません。
派生デバイス キーをインストールする
デバイス キーは、ファクトリに派生してインストールされるのが理想的です。 この方法では、デバイスに展開されたソフトウェアにグループ キーが含まれないことが保証されます。 MAC アドレスまたはシリアル番号がデバイスに割り当てられている場合、キーを派生させ、デバイスに挿入することはできますが、製造元はキーを格納することを選択します。
次の図は、各デバイス登録 ID をグループ登録キー (K) とハッシュすることによってファクトリで生成されたデバイス キーのテーブルを示しています。
ファクトリにインストールされている登録 ID と派生デバイス キーは、各デバイスの ID を表します。 デバイス キーは別の場所にコピーされることはなく、グループ キーはデバイスに保存されません。
デバイス キーがファクトリにインストールされていない場合は、 ハードウェア セキュリティ モジュール (HSM) を使用してデバイス ID を安全に格納する必要があります。
次のステップ
対称キーの構成証明について理解できたので、次の記事を参照して詳細を確認してください。