🛜

BLE通信:pairing時のセキュア通信について

に公開

ペアリングの流れとして、DH鍵交換からAES-CCMが用いられており、これによりセキュアな通信を実現しています。 本記事では、それぞれの役割や仕組みについて簡単に解説します。


DH鍵交換

基礎的な話ですが、鍵交換とは「AとBの通信が第三者に傍受可能な状態であっても、第三者にはわからない形でAとBが通信を通して共通の鍵値を生成できる仕組み」です。すごい。

DH鍵交換のシーケンス

※BLEでは標準でECDH(Elliptic Curve Diffie-Hellman)の楕円曲線暗号でサポートされています

  1. AとBは、それぞれ自分の秘密鍵(a, b)を生成
  2. 両者は共通の楕円曲線(P, G)を知っているとする
  3. Aは A_pub = G^a を計算してBに送る
  4. Bは B_pub = G^b を計算してAに送る
  5. Aは Shared = B_pub^a = G^(ab) を計算
  6. Bは Shared = A_pub^b = G^(ab) を計算

→ 両者は同じ G^(ab) を得るが、第三者は ab もわからないので、共通鍵を導出できない


AES-CCM

秘匿された共通鍵は生成できましたので、通信の秘匿化はできますが、改ざん検知は出来ていない状態です。
それを実現するのが AES-CCM(Counter with CBC-MAC) です。

AES-CCMの中身(ざっくり)

  • AES-CTR:通信データの暗号化を行う(ブロック単位ではなくストリーム的に暗号化)

    引用:はじめのiT
  • CBC-MAC:暗号化前の平文に対してMAC(メッセージ認証コード)を生成し、改ざんを検知

    引用:Wikipedia
    → 暗号化されたデータ + MACタグ が送信され、受信側はMACタグの検証を行うことで整合性(改ざん検知)を担保

認証

DH鍵とAES-CCMによって秘匿化と改ざん検知は実現できているため、セキュアな通信ラインは確保されています。
以降の認証は、用途に応じて簡易なものから高強度なものまで様々です。

ペアリング時の認証例

そんなに詳しくないのでGPTに聞いてみました。確かにそんな感じのあるなって、感じですよね。

認証方式 概要 MITM耐性 UI要件
Just Works 認証なし。自動で接続 なし 不要
Passkey Entry 双方で6桁の数字を入力・一致確認 あり 数字入力/表示
Numeric Comparison 双方の画面に数字を表示して一致を確認 あり ディスプレイ必要
Out of Band(OOB) NFC等の別経路で認証情報を共有 あり OOB機能必要
独自証明書 アプリ層でX.509等の証明書を使う 高強度 実装次第

まとめ

暗号系は一度しっかり見てみると、何のためにやっているかわかると割と面白いです。
BLEのような無線通信において、鍵交換・暗号化・認証が何のために行われるか分かると納得感があります。 基礎的な内容ですが、今後の設計や理解の一助になれば。

Discussion