対称キーの構成証明

この記事では、Device Provisioning Service で対称キーを使用する場合の ID 構成証明プロセスについて説明します。 対称キーの構成証明は、Device Provisioning Service インスタンスを使用してデバイスを認証する簡単なアプローチです。 この構成証明の方法では、初めてデバイスのプロビジョニングを行う開発者または厳密なセキュリティ要件がない開発者に対して、"Hello world" エクスペリエンスを提示します。 TPM または X.509 証明書を使用するデバイス構成証明は、より安全であり、さらに厳格なセキュリティ要件に対して使用する必要があります。

対称キーの登録も、セキュリティ機能が限られているレガシ デバイスに対して、Azure IoT を通してクラウドに接続して起動する方法を提供します。

対称キーの作成

[対象キーの自動生成] オプションを有効にして新しい登録を作成すると、既定では、Device Provisioning Service により 64 バイトの長さで新しい対称キーが作成されます。

Screenshot that shows a new individual enrollment with the autogenerate keys option selected.

このオプションを無効にすることで、独自の対称キーを登録に提供することもできます。 対称キーは 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}

各トークンのコンポーネントを次に示します。

説明
{signature} HMAC-SHA256 署名文字列。 個別の登録の場合は、対称キー (プライマリまたはセカンダリ) を使用してハッシュを実行することにより、この署名が生成されます。 登録グループの場合は、登録グループ キーから派生したキーを使用して、ハッシュを実行します。 ハッシュは、URL-encoded-resourceURI + "\n" + expiry の形式のメッセージに対して実行されます。 "重要": このキーは、HMAC-SHA256 計算の実行に使用する前に、base64 からデコードする必要があります。 また、署名の結果は、URL でエンコードする必要があります。
{resourceURI} このトークンを使用してアクセスできる登録エンドポイントの URI。Device Provisioning Service インスタンスのスコープ ID で始まっています。 たとえば、{Scope ID}/registrations/{Registration ID} のように指定します。
{expiry} 1970 年 1 月 1 日の 00 時 00 分 00 秒 UTC からのエポック秒で表される UTF8 文字列。
{URL-encoded-resourceURI} 小文字のリソース URI の小文字の URL エンコード
{policyName} このトークンの参照先となる共有アクセス ポリシーの名前。 対称キー構成証明でプロビジョニングするときに使用されるポリシー名は、registration です。

SAS トークンを作成するコードの例については、SAS トークンに関するページをご覧ください。

対称キーを使用した個別登録

デバイスが個々の登録で構成証明を行うときは、デバイスは個別登録エントリで定義されている対称キーを使用して、SAS トークン用のハッシュされた署名を作成します。

対称キーを使用したグループ登録

個々の登録とは異なり、登録グループの対称キーは、プロビジョニング時にデバイスによって直接使用されることはありません。 代わりに、登録グループに属しているデバイスでは、派生されたデバイス キーを使用してプロビジョニングが行われます。 派生デバイス キーは、デバイスの登録 ID のハッシュであり、登録グループの対称キーを使用して計算されます。 その後、デバイスはその派生デバイス キーを使用して、DPS へのレジスタに使用する SAS トークンに署名できます。 デバイスは登録時に登録 ID を送信するため、DPS は登録グループの対称キーを使用してデバイスの派生デバイス キーを再生成し、SAS トークンの署名を確認できます。

最初に、登録グループで認証を行う各デバイスに対して、一意の登録 ID が定義されます。 登録 ID は、英数字と有効な特殊文字 (- . _ :) から成る、大文字と小文字が区別されない文字列です (最大 128 文字)。 最後の文字は、英数字またはダッシュ ('-') である必要があります。 登録 ID は、デバイスを識別する一意のものである必要があります。 たとえば、デバイスを一意に識別するために使用できる MAC アドレスまたはシリアル番号などです。 その場合は、次のように MAC アドレスとシリアル番号で登録 ID を構成できます。

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

デバイスの登録 ID を定義した後は、登録グループの対称キーを使用して、登録 ID の HMAC-SHA256 ハッシュを計算し、派生デバイス キーを生成します。 次のタブでは、派生デバイス キーを計算する方法の例を示しています。

Azure CLI 用の IoT 拡張機能には、派生デバイス キーを生成するための compute-device-key コマンドが用意されています。 このコマンドは、PowerShell または Bash シェルの Windows ベースまたは Linux システムから使用できます。

--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 アドレスまたはシリアル番号が割り当てられているときは、製造元がキーを格納することを選んだ場合でも、キーを派生してデバイスに挿入できます。

グループ登録キー (K) を使用して各デバイス登録 ID をハッシュすることにより工場で生成されるデバイス キーのテーブルを示す次の図を検討してください。

Diagram that shows device keys being assigned at a factory.

各デバイスの ID は、登録 ID と、工場でインストールされる派生デバイス キーで表されます。 デバイス キーが別の場所にコピーされることはなく、グループ キーがデバイスに格納されることはありません。

デバイス キーが工場でインストールされない場合は、ハードウェア セキュリティ モジュール HSM を使用してデバイス ID を安全に保管する必要があります。

次のステップ

対称キー構成証明について理解できたので、以下の記事で詳細を確認してください。