Bluetooth

BLE Pairing - 1

BLE(Bluetooth Low Energy)에서 페어링은 크게 LE Legacy Pairing, LE Secure Connection 두 가지 연결이 존재하며, 두 연결은 다음 그림과 같은 단계로 진행된다.

 

BLE Pairing Process

위 그림과 같이 각각의 단계(Phase)에서 어떠한 명령를 내리며 이를 통해 어떠한 동작이 되는지 정리해보고자 글을 남긴다.

 

Phase 1

1단계에서는 두 기기가 서로의 IO(Input/Output), MITM(Man-In-The-Middle), Secure Connection 사용 여부와 같은 보안 기능을 교환하며, 총 2~3개의 명령으로 이루어져 있다.

명령은 두 기기가 Initaotr, Responder 각각의 역할을 맡아 진행하게 된다.
(ex. Initator = Galaxy A80, Responder = Galaxy Buds)

 

Security Request

Responder에 해당하는 기기의 요청이 있다면 1단계에서 가장 먼저 진행되는 명령이다.

해당 명령은 Responder가 Initator에게 보내는 보안 요청으로 Initator는 해당 요청을 수신한 후 링크를 암호화하거나 페어링을 시작해야 한다.

만약 Initator가 Responder의 요청을 들어주지 못하는 환경일 때 Pairing Not Supported 명령을 보내는 것으로 두 기기 사이의 연결을 끊는다.

해당 명령은 다음과 같은 구조를 가지고 있다.

 

Security Request Format

 

Opcode

  • Description : 명령을 식별하기 위한 값을 가지고 있다.
  • Size : 1 Byte
    • 0x0B : Security Request

AuthReq

  • Description : MITM, Secure Connection과 같이 이후 연결에서 사용되는 보안과 관련된 값을 가지고 있다
  • Size : 1 Byte
    • Bonding Flags
      • Description : Bonding은 페어링 이후 장기 키(long-term)를 교환하여 나중에 사용할 수 있도록 저장할 것인지 를 의미하며 해당 값은 Bonding을 사용할 것인지를 나타내는 값이다.
      • Size : 2 Bits
        • 00 : No Bonding
        • 01 : Bonding
        • 10 or 11 : Reserved
    • MITM Flag
      • Description : 페어링 진행 시 MITM 보호를 사용할 것인지 를 나타낸 값이다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Secure Connection Flag
      • Description : LE Secure Connection을 사용할 것인지를 나타내는 값이다. 두 기기 모두가 해당 값이 1이면 LE Secure Connection을 사용하며, 그렇지 않다면 LE Legacy Pairing을 사용한다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Keypress Flag
      • Description : Passkey Entry Protocol에서만 사용되며 다른 프로토콜에서는 무시되는 값이다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Reserved
      • Size : 3 Bits

실제로 이와 같은 패킷을 확인해보면 다음과 같다.

 

Security Request Packet
Security Request Packet Detail

 

Responder(Galaxy Fit 2)가 Initator(Galaxy A80)에게 보내는 것을 확인할 수 있으며, SC(Secure Connection) 여부, MITM과 같은 보안 여부도 확인할 수 있다.

 

Pairing Request & Pairing Response

1단계에서 가장 중요한 부분으로 이후 단계에서 활용하게 되는 정보를 교환하는 부분이다. 이전 Security Request는 요청? 문의? 느낌이라면 해당 부분은 실제로 정보를 교환하는 단계라고 생각하면 된다.

Request와 Response 명령을 통해 두 기기는 서로의 I/O(Input/Output)나 보안 관련 정보(MITM, SC, Key)를 교환한다.

해당 명령은 다음과 같은 구조로 이루어져 있다.

 

Pairing Request & Response Format

 

Opcode

  • Description : Request or Response인지 구분하기 위한 값이다.
  • Size : 1 Byte
    • 0x01 : Pairing Request
    • 0x02 : Pairing Response

IO Capability

  • Description : 현재 기기가 사용할 수 있는 IO(Input/Output)을 나타내는 값이다.
  • Size : 1 Byte
    • 0x00 : DisplayOnly
    • 0x01 : DisplayYesNo
    • 0x02 : KeyboardOnly
    • 0x03 : NoInputNoOutput
    • 0x04 : KeyboardDisplay
    • 0x05 ~ 0xFF : Reserved

OOB Data Flags

  • Description : OOB(Out-Of-Band) 즉, 블루투스가 아닌 다른 통신 수단(NFC, QRcode,...)을 사용하여 페어링을 진행할 것인지에 대한 값을 가지고 있다.
  • Size : 1 Byte
    • 0x00 : OOB Authentication data not present
    • 0x01 : OOB Authentication data from remote device present

AuthReq

  • Security Resquest와 동일하다.

Max Encryption Key Size

  • Description : 이름 그대로 암호 키의 최대 크기를 나타내는 값으로 7 ~ 16(octets) 사이의 값을 가지고 있어야 한다.
  • Size : 1 Byte

(Initiator or Responder) Key Distribution

  • Description : Initiator or Responder가 배포/생성 또는 사용을 요청하는 키를 나타낸다.
  • Size : 1 Byte
    • Encryption Key (LTK)
      • Description : 해당 필드는 다음과 같은 상황에 맞추어 사용된다.
        • LE Legacy Pairing
          • 장치가 Encryption Information 명령을 사용하여 LTK를 배포한 후 Master Identification 명령을 사용하여 EDIV 및 Rand의 배포 유/무를 나타내는 필드
        • LE Secure Connection
          • 두 장치 모두 SC Bit를 1로 설정되며 LE 연결에서 SMP가 실행 중일 때 해당 필드가 무시된다. (EDIV 및 Rand는 0으로 설정되어 분배되지 않아야 한다)
        • SMP Running on the BR/EDR Transpor
          • 해당 필드는 장치가 BR/EDR 링크 키에서 LTK를 파생할 것임을 나타내기 위해 1로 설정된다.
        • IncKey Set 1 on (Initiator or Responder) Key Distribuation/Generation
          • BR/EDR 링크 키에서 LTK를 계산하는 절차를 사용해야 한다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Id Key (IRK)
      • Description : 장치가 Identity Information 명령을 사용하여 IRK를 배포한 후 Identity Address Information을 사용하여 공용 장치 또는 정적 임의 주소를 배포해야 함을 나타내는 값이다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Signature Key (CSRK)
      • Description : 장치가 Signing Information 명령을 사용하여 CSRK를 배포해야 함을 나타내는 값이다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Link Key
      • Description : 해당 필드는 다음과 같은 상황에 맞추어 사용된다.
        • SMP running on the LE Connection
          • 해당 필드를 1로 설정하여 장치가 LTK에서 링크 키를 파생할 것임을 나타낸다.
        • LinkKey Set 1 on (Initiator or Responder) Key Distribuation/Generation
          • LTK에서 BR/EDR 링크 키를 계산하는 절차를 사용해야 한다.
        • Not Supported LE Connections or SMP running on the BR/EDR
          • 해당 필드를 0으로 설정하며, 수신 시 해당 값을 무시해야 한다.
      • Size : 1 Bit
        • 0 : False
        • 1 : True
    • Reserved
      • Size : 4 BIts

실제로 이와 같은 패킷을 확인해보면 다음과 같다.

 

Pairing Request & Response Packet
Pairing Request Packet Detail

 

Reference