대칭 키 증명

이 문서에서는 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 허브에서 지원하는 것과 동일한 보안 토큰을 사용하여 수행되어 디바이스를 식별합니다. 이러한 보안 토큰은 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 형식의 메시지에서 수행됩니다. 중요: 먼저 base64에서 키를 디코딩하여 HMAC-SHA256 계산을 수행하는 데 사용해야 합니다. 또한 서명 결과는 URL로 인코딩되어야 합니다.
{resourceURI} Device Provisioning Service 인스턴스의 범위 ID로 시작되는, 이 토큰으로 액세스할 수 있는 등록 엔드포인트의 URI입니다. 예를 들어 {Scope ID}/registrations/{Registration ID}
{expiry} 1970년 1월 1일 epoch 0시 UTC 이후의 초 수에 대한 UTF8 문자열입니다.
{URL-encoded-resourceURI} 소문자 URL-소문자 리소스 URI의 인코딩
{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)로 해싱하여 공장에서 생성된 디바이스 키 테이블을 보여주는 다음 다이어그램을 고려해보십시오.

Diagram that shows device keys being assigned at a factory.

각 디바이스의 ID는 공장에서 설치된 등록 ID 및 파생 디바이스 키로 표시됩니다. 디바이스 키는 다른 위치로 절대 복사되지 않으며 그룹 키는 디바이스에 절대 저장되지 않습니다.

디바이스 키가 팩터 리에 설치되지 않은 경우 하드웨어 보안 모듈 HSM 을 사용하여 디바이스 ID를 안전하게 저장해야 합니다.

다음 단계

이제 대칭 키 증명을 이해했으므로 다음 문서를 검사 자세히 알아보세요.