메시지 인증 코드
메시지 스트림은 오디오 전환을 구성하는 데 사용됩니다. 오디오 전환 메시지를 참고하세요. 이처럼 중요한 구성의 경우 제공자는 메시지가 Seeker의 다른 앱이 아닌 GMSCore (빠른 페어링 모듈)에서 전송되도록 해야 합니다.
MAC (메시지 인증 코드) 생성
FP Seeker는 HMAC-SHA256을 사용하여 기기 설정 메시지의 메시지 인증 코드를 추가합니다. 메시지의 MAC는 다음의 처음 8바이트로 구성됩니다.
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
어디서
- K는 concat(계정 키, 48바이트 ZERO)에 의해 생성됩니다.
- message는 메시지 스트림의 추가 데이터입니다.
- nonce는 concat(session_nonce, message_nonce)에 의해 생성됩니다. 세션 nonce와 메시지 nonce는 다음 섹션에서 정의됩니다.
- opad는
0x5C
값의 반복 바이트로 구성된 외부 패딩의 64바이트입니다. - ipad는 64바이트의 내부 패딩으로,
0x36
값의 반복 바이트로 구성됩니다.
세션 nonce 및 메시지 nonce
재생 공격을 방지하려면 제공자는 nonce가 반복되지 않도록 해야 합니다. 제공자와 시커 모두에서 시계 또는 카운터 동기화를 유지하는 것은 간단하지 않으므로 제공자는 연결 중 모든 메시지와 공유되는 세션 nonce(연결당)를 생성하는 반면, Seeker는 각 메시지에 대해 무작위로 생성되는 메시지 nonce (메시지당)를 생성합니다. 각 메시지의 MAC을 생성하기 위한 nonce는 세션 nonce와 메시지 nonce의 조합입니다(예: concat(session_nonce, message_nonce)).
기기 정보 이벤트 그룹에 세션 nonce를 추가합니다.
메시지 그룹 이름 | 가치 |
---|---|
기기 정보 이벤트 | 0x03 |
메시지 코드 이름 | 가치 |
---|---|
세션 nonce | 0x0A |
RFCOMM이 연결되면 세션 nonce가 생성되어 시커로 전송되어야 합니다.
옥텟 | 데이터 유형 | 설명 | 가치 |
---|---|---|---|
0 | Uint8 | 기기 정보 이벤트 | 0x03 |
1 | Uint8 | 세션 nonce | 0x0A |
2~3명 | 단위16 | 추가 데이터 길이 | 0x0008 |
4~11 | 세션 nonce | 경우에 따라 다름 |
MAC이 필요할 때 메시지를 보내기 위해 탐색자는 메시지와 함께 메시지 nonce와 MAC을 보냅니다.
옥텟 | 데이터 유형 | 설명 | 가치 |
---|---|---|---|
0 | Uint8 | 메시지 그룹 | 경우에 따라 다름 |
1 | Uint8 | 메시지 코드 | 경우에 따라 다름 |
2~3명 | 단위16 | 추가 데이터 길이(추가 데이터 길이 + 16) | 경우에 따라 다름 |
4~n | 추가 데이터 | 경우에 따라 다름 | |
n + 1 - n + 8 | 메시지 nonce | 경우에 따라 다름 | |
n + 9 - n + 16 | 메시지 인증 코드 | 경우에 따라 다름 |
MAC (메시지 인증 코드) 확인
메시지 인증 코드가 포함된 메시지를 수신하면 제공자는 생성 함수와 동일한 기능을 사용하여 이를 확인해야 합니다. 다시 말해, 수신된 MAC는 패킷의 처음 8바이트와
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
각 항목의 의미는 다음과 같습니다.
- K는
concat(account key, 48-byte ZEROs)
에 의해 생성되며 제공자는 저장된 모든 계정 키를 순회하여 MAC을 확인해야 합니다. - message는 메시지 스트림의 추가 데이터 (메시지 nonce 및 MAC 제외)입니다.
MAC이 올바르면 제공자는 메시지의 지침을 따라야 합니다. 그렇지 않으면 제공자는 오류 이유 0x3과 함께 NAK를 전송해야 합니다. 이는 잘못된 메시지 인증 코드로 인해 허용되지 않습니다.