Bluetooth Mesh 장치 펌웨어 업데이트

기술 개요

릴리스 : 1.0.0
문서 버전 :   1.0
마지막 업데이트 : 2023년 9월 19일
저자 :   

마틴 울리, Bluetooth SIG
한누 말랏, 실리콘 연구소
옴카르 쿨카르니, 노르딕 세미컨덕터

개정 내역

Version

Date

Author

Changes

1.0.0

September 19, 2023

Martin Woolley, Bluetooth SIG
Hannu Mallat, Silicon Laboratories
Omkar Kulkarni, Nordic Semiconductor

Initial version

 

참고

Bluetooth Mesh 프로필 사양의 이름이 변경되어 이제 Bluetooth Mesh 프로토콜 사양으로 불립니다. 이 문서와 관련 문서에서 버전 1.1 사양을 언급할 때는 이 이름을 사용하지만, 버전 1.0 사양은 계속해서 Bluetooth Mesh Profile 사양이라고 합니다.

 

1. 배경

Bluetooth Mesh 1.1에서는 장치에서 실행 중인 펌웨어를 네트워크를 통해 업데이트할 수 있는 새로운 기능 세트가 도입되었습니다. 이 기능의 기능, 이점 및 기술적 주요 사항을 검토하기 전에 관련 배경을 설명합니다.

1.1 펌웨어 및 Bluetooth Mesh 장치

장치의 하드웨어를 제어하는 저수준 소프트웨어는 일반적으로 펌웨어Bluetooth Mesh 장치는 Bluetooth Mesh 프로토콜과 Bluetooth LE 호스트 및 컨트롤러의 기본 계층을 구현하는 펌웨어를 실행합니다. 모델 mesh 모델 은 Bluetooth 사양을 벗어나는 다른 장치별 동작 및 기능과 마찬가지로 펌웨어에서 구현됩니다. 디바이스의 펌웨어는 디바이스를 디바이스로 만드는 데 중요한 역할을 합니다.

1.2 펌웨어를 최신 상태로 유지하기

펌웨어는 최신 상태로 유지해야 하며 제조업체는 종종 펌웨어 업데이트를 출시합니다. 새 펌웨어는 문제를 해결하고, 새로운 기능을 추가하고, 보안을 개선하고, 더 나은 성능을 제공하거나 기타 이점을 제공할 수 있습니다. 디바이스 펌웨어, 애플리케이션 소프트웨어, 운영 체제 업데이트 등 소프트웨어를 최신 상태로 유지하는 것은 일반적으로 좋은 관행으로 받아들여지고 있습니다.

소프트웨어 업데이트 방법은 소프트웨어의 유형과 플랫폼에 따라 다릅니다. 최신 스마트폰 및 데스크톱 운영 체제에서는 사용자가 거의 또는 전혀 관여할 필요가 없는 자동 소프트웨어 업데이트가 표준입니다..

Bluetooth Mesh 1.0은 장치에서 새 펌웨어를 사용할 수 있는지 감지하고, 이를 획득하거나 설치하기 위한 자동 또는 표준화된 메커니즘을 제공하지 않습니다. 이러한 작업은 수동으로 수행해야 하며 펌웨어 업데이트 설치는 이를 위해 제공되는 전용 인터페이스를 사용하여 장치에 직접 수행해야 합니다. 여러 공급업체의 디바이스로 구성된 네트워크에서는 여러 독점 도구가 필요하고 프로세스가 매우 복잡해질 수 있습니다. mesh

1.3 바이너리 이미지

펌웨어 업데이트는 일반적으로 단일 바이너리 파일인 이미지. 이미지 파일의 형식은 다양하며 대상 플랫폼과 제조업체에 따라 다릅니다. 펌웨어의 압축을 풀고, 확인하고, 설치하려면 제조업체별로 고유한 절차가 필요합니다.

1.4 펌웨어 업데이트 및 보안

새 펌웨어를 설치하면 특정 보안 위험이 수반됩니다. 설치 중인 소프트웨어가 제조업체에서 제공한 정품인지 어떻게 알 수 있나요? 악성 코드가 포함되는 등 변조되지 않았는지 어떻게 알 수 있나요?

이러한 사항은 Bluetooth® 사양을 벗어납니다. 그러나 일반적으로 펌웨어 이미지가 변조되지 않았는지 확인하려면 원본자가 디지털 서명한 파일만 사용하는 것이 좋습니다. 디지털 서명은 파일이 무단으로 변조되는 것을 방지하고 파일의 원본을 확인할 수 있습니다. 마찬가지로 펌웨어 업데이트를 다운로드할 수 있는 서버를 설정하는 것도 신뢰할 수 있는 소스는 일반적으로 디지털 인증서를 사용하여 이루어집니다.

1.5 모델

모델 은 애플리케이션 계층 Bluetooth® Mesh 장치 동작의 구성 요소입니다. 모델은 특정 동작 집합을 구현하고 정의된 메시지 및 상태 집합과 연관된 소프트웨어 구성 요소입니다. 메시지만 주고받는 클라이언트 모델과 메시지를 주고받으며 모델 메시지에 의해 동작하는 상태 값을 포함하는 서버 모델이 있습니다.

2. 장치 펌웨어 업데이트 정보

2.1 기능 및 이점

2.1.1 장치 펌웨어 업데이트

Bluetooth® Mesh 의 새로운 장치 펌웨어 업데이트(DFU) 기능은 네트워크의 노드가 펌웨어를 최신 상태로 유지할 수 있는 표준 방법을 추가합니다. 이 기능에는 새 펌웨어 업데이트의 가용성 모니터링, 바이너리 이미지 획득, 네트워크 내 배포, 선택된 노드 업데이트가 포함됩니다.

일반적인 네트워크에는 일반적으로 동일한 제조업체의 동일한 유형의 제품이 많이 포함되어 있습니다. DFU 기능은 멀티캐스트 펌웨어 배포 기능을 제공하는데, Bluetooth Mesh 에서 사용되는 브로드캐스트 통신을 활용하여 최소한의 무선 전송 횟수를 사용하여 단일 펌웨어 업데이트 이미지를 여러 장치에 한 번에 배포할 수 있습니다.

DFU는 네트워크 디바이스에서 펌웨어를 최신 상태로 유지하는 데 필요한 건물 유지보수 팀의 수작업을 크게 줄여줍니다.

2.1.2 플러그 앤 플레이

DFU 기능을 사용하면 각각 고유한 펌웨어가 있는 여러 하위 시스템으로 구성된 장치를 업데이트할 수 있습니다. 이러한 각 펌웨어 인스턴스는 장치의 펌웨어 정보 목록에 나열됩니다.

펌웨어 정보 목록은 동적이기 때문에 플러그 앤 플레이 구성 요소가 추가되거나 제거되면 하위 시스템 변경 사항이 장치의 펌웨어 정보 목록에 반영됩니다.

새로운 플러그 앤 플레이 기능과 관련하여, Bluetooth Mesh 프로토콜 사양 1.1에서는 디바이스의 수명 주기와 구조 및 구성에 대한 새로운 공식 명칭을 도입했습니다. 의 개념은 Term 의 개념은 사양에 다음과 같이 설명되어 있습니다:

A 기간 은 노드의 수명 중 노드의 구조(기능, 요소, 모델)와 노드 요소의 유니캐스트 주소가 변경되지 않는 기간입니다. 

보조 센서 부착과 같은 물리적 장치의 하드웨어 구성 변경을 지원하거나 조명기구 내 네트워크와 같은 노드의 하위 시스템 구성 변경을 지원하려면 새 용어를 시작해야 할 수 있습니다. 변경 사항은 구성 데이터 페이지 128을 채우는 방식으로 노드에 표시되며, 새로운 학기 시작될 때 적용됩니다. 

이니셜 기간 은 네트워크에서 노드가 프로비저닝될 때 시작됩니다. 

A 기간 종료되고 새로운 노드 주소 새로 고침 절차 또는 노드 구성 새로 고침 절차가 실행될 때 시작됩니다. 

마지막 기간 은 네트워크에서 노드가 제거될 때 종료됩니다. 

 

2.2 기술적 주요 사항

2.2.1 DFU 역할

DFU 시스템은 여러 노드 역할을 정의합니다. 역할은 다음과 같습니다:

Role 

Description 

Initiator 

The Initiator identifies available firmware updates for a given list of nodes in the network. It executes procedures defined in the DFU specification under the control of an application. The Initiator typically runs on a device which supports both Bluetooth® Mesh and has internet connectivity, such as a smartphone or gateway device, and periodically checks manufacturers’ websites for new firmware releases. Having identified relevant updates, it acquires them and sends the new firmware images to a Distributor node. 

Distributor 

The Distributor receives new firmware images from an Initiator and is responsible for sending them to appropriate nodes in the network for installation. The Distributor is typically a physically separate device to the Initiator so that the Initiator (which will often be a smartphone application) does not need to be in range of the network during the entire process. The Distributor can be thought of as acting an intermediary for the Initiator. 

Target 

Target is the name given to a node which can receive a firmware image from a Distributor and install it. 

Stand-alone Updater 

A Stand-alone Updater fulfils the role of a combined Initiator and Distributor, acquiring firmware updates and sending them directly to Target nodes without the need for an intermediate Distributor.  

2.2.2 모델

DFU 기능은 여러 가지 새로운 mesh 모델과 이와 관련된 일련의 관련 절차를 기반으로 합니다.

  • 교통 Transport 모델은 노드 간에 이진 대용량 객체(BLOB)를 전송하기 위한 일반화된 메커니즘을 제공합니다.
  • 펌웨어 배포 펌웨어 배포 모델은 Target 노드에 펌웨어 업데이트를 배포하는 절차를 지원합니다.
  • 펌웨어 업데이트 펌웨어 업데이트 모델은 장치 펌웨어 업데이트 절차를 지원합니다.

각 모델은 일련의 절차를 거쳐 사용 가능한 펌웨어 업데이트를 식별, 획득하여 관련 노드에 배포하고 확인 및 설치할 수 있습니다.

2.2.3 역할 및 모델

다음 표는 DFU 사양을 재현한 것으로, DFU 역할과 새 모델 간의 관계를 보여줍니다.

역할

펌웨어 배포 클라이언트

펌웨어 배포 서버

펌웨어 업데이트 클라이언트

펌웨어 업데이트 서버

BLOB 전송 클라이언트

BLOB 전송 서버

대상

-

-

-

M

-

M

이니시에이터

M

-

M

-

M

-

배포자

-

M

M

-

M

M

독립 실행형 업데이터

-

-

M

-

M

-

M: 이 역할의 이 모델에 대한 지원은 필수입니다.

mesh 노드는 각 역할에 대한 관련 모델을 인스턴스화하여 여러 역할을 지원할 수 있습니다.

2.2.4 펌웨어 업데이트 절차 개요

펌웨어 업데이트의 획득, 배포 및 설치 방법에는 여러 가지 변형이 있습니다. 예를 들어

  • 펌웨어는 총판에서 공급업체의 웹 사이트에서 표준을 사용하여 얻을 수 있습니다. HTTPS를 통한 펌웨어 확인 절차를 사용하거나 구현별 절차를 사용하여 얻을 수 있습니다.
  • 개시자 노드는 펌웨어 이미지를 획득하여 업데이트 노드에 배포하기 위해 배포자에게 보내거나 배포자가 펌웨어 이미지 자체를 획득할 수 있는 정보를 보낼 수 있습니다.

개시자 노드, 배포자 노드 및 하나 이상의 대상 노드가 함께 작동하여 펌웨어 업데이트를 획득, 배포 및 설치하는 대표적인 예가 그림 1에 표시되어 있습니다. 에 표시되어 있으며 그 뒤에 나오는 텍스트에 설명되어 있습니다.

2.2.4.1 펌웨어 업데이트 찾기 및 배포

2241

그림 1 - 펌웨어 업데이트 가져오기 및 배포하기

그림 1은 공급업체 웹 사이트에서 펌웨어 업데이트를 가져온 다음 업데이트 노드 집합에 배포 및 설치하는 일련의 절차를 보여줍니다. 다양한 DFU 역할을 수행하는 노드 간의 상호 작용이 표시되어 있으며 적절한 경우 관련된 특정 모델이 표시되어 있습니다.

요약하면 다음과 같습니다:

  1. 초기화자는 상위 계층 애플리케이션에서 지정한 노드 목록에서 현재 실행 중인 펌웨어에 대한 정보를 얻습니다.
  2. 초기화자는 이 펌웨어에 대한 관련 업데이트를 확인하며, 이 경우 공급업체 웹사이트로 전송되는 HTTPS 요청을 사용합니다. 사용 가능한 업데이트가 있으면 다운로드됩니다. 그렇지 않은 경우 이 시점에서 프로세스가 종료됩니다.
  3. 그런 다음 개시자는 업데이트 노드 목록의 세부 정보를 배포 수신자 목록 디스트리뷰터 노드에서 펌웨어 배포 서버의 상태입니다. 단순화를 위해 목록의 각 노드는 동일한 펌웨어 이미지를 수락할 수 있어야 합니다.
  4. 이니시에이터는 펌웨어 업로드BLOB 전송 절차를 사용하여 펌웨어 이미지를 배포자에게 전송합니다.
  5. 그런 다음 개시자는 배포자에게 배포를 시작하도록 지시합니다.
  6. 배포자의 펌웨어 업데이트 클라이언트는 각 업데이트 노드의 해당 서버 모델에 펌웨어 업데이트 절차가 시작되었음을 알리고 응답으로 상태 메시지를 수신할 것으로 예상합니다.
  7. 7. 배포자는 BLOB 전송 절차를 사용하여 펌웨어 이미지를 각 업데이트 n에 전송합니다.

2.2.4.2 배포 진행 상황 확인

업데이트 노드에 펌웨어 배포가 진행되는 동안 개시자는 배포자에게 진행 상황에 대한 정보를 요청할 수 있습니다.

그림 2

그림 2 - 배포자가 진행 상황을 확인하는 이니시에이터

2.2.4.3 펌웨어 확인 및 설치

업데이트 노드는 완전한 바이너리 이미지를 수신하면, 예를 들어 BLOB의 디지털 서명을 확인하는 등 구현별 검증 검사를 실행합니다. 배포자는 업데이트 노드의 진행 상태를 모니터링하고 적절한 경우 업데이트 노드에 펌웨어 업데이트를 설치하도록 지시합니다.

그림 3

그림 3 - 업데이트 노드가 펌웨어 이미지를 확인하고 지시에 따라 설치합니다.

2.2.5 파일 형식

정의된 펌웨어 업데이트 파일을 사용하여 검색된 펌웨어 업데이트 파일 HTTPS를 통한 펌웨어 검색 절차 는 Bluetooth Mesh 프로토콜 사양에 정의된 아카이브 파일 형식을 사용해야 합니다. 이 형식에는 파일 내용을 설명하는 매니페스트 파일, 바이너리 펌웨어 이미지 파일 자체, 펌웨어 이미지에 대한 추가 정보가 포함된 메타데이터 파일(선택 사항)이 포함됩니다. 매니페스트 파일과 메타데이터 파일 모두 정의된 JSON 형식을 사용합니다.

2.2.6 펌웨어 하위 시스템

노드는 펌웨어를 여러 부분으로 분할할 수 있으며, 각 부분은 다른 부분과 독립적으로 업데이트할 수 있습니다. 각각의 독립적인 부분을 펌웨어 서브시스템이라고 합니다. 예를 들어 노드의 mesh 네트워킹 스택은 독립적인 펌웨어 하위 시스템일 수 있습니다.

2.2.7 URI 업데이트

펌웨어 업데이트 서버 모델에는 펌웨어 정보 목록 상태라는 상태가 포함되어 있습니다. 이 상태는 업데이트 URI 및 연결된 펌웨어 ID로 구성됩니다. 펌웨어 ID는 노드에서 펌웨어 하위 시스템을 식별하고 업데이트 URI 상태 값은 이 펌웨어의 업데이트 위치를 나타냅니다. mesh DFU 사양은 이 정보를 사용하여 다운로드 URI를 구성하는 방법을 나타냅니다. HTTP를 통한 펌웨어 확인 절차에서 사용할 다운로드 URI를 구성하는 데 이 정보가 어떻게 사용되는지를 나타냅니다:

https://mesh.example.com/check-for-updates/check?cfwid=02FF10000203

2.2.8 운송 개념

BLOB 전송 모델은 모든 유형의 바이너리 대용량 객체를 전송할 수 있도록 설계되었습니다. 그러나 Bluetooth® Mesh 프로토콜 사양 버전 1.1에서는 펌웨어 이미지를 업데이트 노드에 배포하는 데만 사용됩니다. 장치 펌웨어 업데이트 기능의 작동 방식을 이해하려면 BLOB 전송 모델의 일반화된 기능에 대한 이해가 중요합니다.  그림 4

 

그림 4: 블롭 전송 모델. 이미지를 블록으로 나누고 블록을 청크로 나누는 것을 보여줍니다.

2.2.8.1 블롭 ID

모든 BLOB에는 BLOB 전송 절차 중에 사용할 수 있도록 8옥텟의 고유 식별자가 할당됩니다.

2.2.8.2 블록 및 청크

블롭은 일련의 블록 블록으로 나뉩니다. 블록 크기는 클라이언트가 쿼리하는 대상 BLOB 전송 서버의 기능을 참조하여 결정됩니다.

블록은 다음과 같이 나뉩니다. 청크 (블록 크기가 청크 크기의 정확한 배수가 아닌 경우 다른 청크보다 작을 수 있는 마지막 청크 제외)로 나뉩니다.

각 BLOB 전송 서버는 처리할 수 있는 최대 청크 크기를 포함하여 여러 매개변수를 계산합니다. 최대 청크 크기 계산에는 클라이언트와 서버의 최대 전송 단위(MTU)가 포함됩니다. 전송이 초기화될 때 클라이언트는 모든 수신자가 수용할 수 있는 이 전송에 사용할 청크 크기를 계산합니다.

각 청크에는 16비트 청크 번호 가 할당되어 상위 블록 내에서 식별할 수 있습니다.

2.2.8.3 전송 모드

두 가지 BLOB 전송 모드가 정의되어 있습니다.

에서 푸시 블롭 전송 모드에서는 클라이언트가 흐름을 제어합니다. 한 번에 한 블록씩 유니캐스트 주소 또는 멀티캐스트 주소로 일련의 청크로 전송됩니다. 그런 다음 클라이언트는 서버에 쿼리하여 수신된 청크를 확인하고 누락된 청크는 재전송합니다.

에서 풀 블롭 전송 모드에서는 서버가 흐름을 제어합니다. 이 모드는 주로 저전력 노드에서 사용하도록 설계되었으며, 클라이언트에서 한 번에 한 서버로만 BLOB를 전송하는 데 사용됩니다.

2.2.8.4 전송 상태 추적

Bluetooth® Mesh 네트워크의 특성상 다중 경로 및 다중 홉 메시징과 신뢰성을 높이기 위한 재전송 시스템으로 인해 메시지 전달 순서는 어떤 식으로든 보장할 수 없습니다. 따라서 BLOB이 분할된 블록 청크를 전달하는 BLOB 전송 메시지 역시 특정 순서로 도착한다고 보장할 수 없습니다. 따라서 BLOB 전송 클라이언트는 어떤 순서로든 블록을 선택할 수 있으며, 블록을 선택하면 그 청크를 어떤 순서로든 전송할 수 있습니다.

BLOB 전송 서버 모델에 속하는 누락된 청크라는 상태는 활성 블록에 있는 각 청크의 상태를 추적할 수 있는 수단을 제공합니다. 누락된 청크 상태에는 다음과 같이 사용되는 비트 마스크가 포함되어 있으며, 상태 값의 각 비트 위치는 해당 청크 번호가 있는 해당 청크의 상태를 나타냅니다. 예를 들어, 비트 위치 7은 현재 블록의 청크 번호 7의 상태를 나타냅니다. 값이 1이면 청크가 수신되지 않았음을 의미하고 값이 0이면 수신되었음을 의미합니다.

BLOB 전송 클라이언트는 전송 대상 서버에서 누락된 청크 상태 값을 검색하고 이를 사용하여 수신되지 않은 청크 중 아직 전송해야 하거나 재전송해야 하는 청크를 식별합니다.

2.2.9 보안

소프트웨어를 최신 상태로 유지하는 것은 모든 유형의 컴퓨팅 장치를 안전하게 유지하는 데 있어 일반적으로 인정되는 모범 사례입니다. 하지만 소프트웨어를 구입하고 설치하는 것은 자체적인 보안 위험을 수반합니다. 가장 중요한 것은 신뢰할 수 있는 출처에서 소프트웨어를 다운로드하고 있는지, 다운로드한 코드가 어떤 방식으로든 변조되지 않았으며 다운로드하는 동안에도 변조될 수 없는지 확인해야 한다는 것입니다. 또한 HTTPS를 사용하면 패시브 스누퍼가 현재 네트워크에서 실행 중인 펌웨어 버전과 업데이트 중인 버전을 발견하지 못하도록 방지할 수 있습니다. 이는 공격자가 특정 펌웨어 버전의 특정 취약점을 알고 있는 경우 귀중한 정보가 될 수 있습니다.

DFU 사양에 따라 구현자는 이 두 가지 문제를 해결하는 방법을 결정해야 합니다.

펌웨어 업데이트된 펌웨어 확인 프로시저는 구현자가 지정된 HTTPS를 통한 펌웨어 확인 HTTPS를 통한 펌웨어 검색 프로시저 또는 구현별 프로시저 집합을 사용할 수 있습니다.

그리고 HTTPS를 통한 펌웨어 검사 및/또는 HTTPS를 통한 펌웨어 검색 절차에서는 보안 HTTPS 프로토콜만 사용할 수 있습니다. HTTPS 프로토콜은 기내 데이터가 암호화되도록 보장하며, 서버에 디지털 인증서가 있어야 HTTP 클라이언트가 서버가 주장하는 신원을 인증할 수 있습니다. 데이터는 암호화되며 두 엔드포인트 간에 전송되는 데이터를 변조하려는 시도는 모두 감지됩니다.

구현자는 펌웨어 업데이트 확인 및 검색에 가능한 가장 안전한 옵션을 사용하는 것이 좋습니다.

3. 닫기

Bluetooth® Mesh 장치 펌웨어 업데이트를 사용하면 모범 사례를 쉽게 따르고 네트워크에서 노드 역할을 하는 장치에서 장치 펌웨어를 최신 상태로 유지할 수 있습니다. 이 업데이트는 공급업체의 새 릴리스 가용성을 자동으로 모니터링하고 가능한 한 간단하고 눈에 거슬리지 않는 사용자 환경을 지원하도록 설계되었습니다.

도움말 받기