bluetooth - 蓝牙配对如何工作?

标签 bluetooth device

如何正是 蓝牙配对有用吗?在配对过程中,每个设备之间的通信是什么?

我被告知如果您有设备 A 想要与设备 B 配对:

  • A 在某个波长/频率上向设备 B 发送“唯一 key ”
  • B 将“回声”返回给 A,因此设备对。
    +-----+     key    +-----+ 
    |     |  ---->     |     |
    |  A  |            |  B  |
    |     |     <----  |     |
    +-----+     echoed +-----+ 
    

  • 这似乎是不准确的,所以任何人都能够进一步扩展或实际解释如何/什么通信以导致设备成功配对?

    我正在考虑将其中一些研究纳入最后一年的项目(大学),但至少需要先了解蓝牙编程配对的一些内容。

    在描述这些初始通信如何工作时,任何帮助将不胜感激。

    我在研究中听说过诸如“ parking 模式”和“被动模式”之类的术语,但尚未在设计背后的编程中找到任何“有用”的信息(因此我提出了这个问题)。谷歌搜索这类主题也很困难,因为它似乎会提出诸如“如何打开蓝牙”页面之类的内容,而不是其背后的编程设计。

    最佳答案

    蓝牙安全简单配对使用椭圆曲线 Diffie Hellman (ECDH) 公钥密码术,使用 FIPS 批准的 P192 椭圆曲线,具有大约 95 位熵。

    E:y2=x3 +ax+b(modp)
    

    给出以下参数:
  • 素数模p,阶r,基点x-坐标Gx,基点y-坐标G​​y。
  • 整数 p 和 r 以十进制形式给出;位串和字段元素以十六进制给出。
    p = 6277101735386680763835789423207666416083908700390324961279
    r = 6277101735386680763835789423176059013767194773182842284081
    b = 64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1
    Gx = 188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012
    Gy = 07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811
    


  • 安全简单配对有五个阶段:

    1.公钥交换

    每个设备都会生成自己的椭圆曲线 Diffie-Hellman (ECDH) 公钥-私钥对。

    2. 认证阶段 1

    连接设备根据两个设备的 IO 能力选择 3 个协议(protocol)选项中的 1 个。这些都是:
  • 数值比较,
  • 带外,
  • 密码输入


  • 3. 认证阶段2

    每个设备确认两个设备都已按照在上一步中选择和使用的协议(protocol)的规定成功完成交换。

    4.链接 key 计算

    链接 key 是从派生的共享 key 和公开交换的数据中计算出来的。这是向用户显示的数字代码。

    5. LMP认证与加密

    生成加密 key 。设备已成功连接。



    enter image description here

    enter image description here



    延伸阅读:
  • Bluetooth user Interface Flow Diagrams for Bluetooth Secure Simple Pairing Devices (PDF)
  • Bluetooth Core Complete Specification v4.0 vol0 (ZIP/PDF)

    核心规范为 138 页,要完全回答您的问题至少需要 20 页,因此要完全回答您的问题,您需要阅读引用资料
  • 关于bluetooth - 蓝牙配对如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360338/

    相关文章:

    android - 是否可以让我的应用程序在安全模式下工作?

    string - USB设备制造商的字符串有多长?

    c++ - Windows 上的蓝牙低功耗低速率?

    c++ - 获取linux输入设备

    ios - iOS 开发者帐户中的 200 个测试设备

    linux - 如何在 Linux 内核模块中读/写字符设备

    android - 如何在Android中使用蓝牙访问另一部手机的文件系统?

    iphone - iPhone 应用程序可以通过 A2DP 配置文件连接到蓝牙发射器(非 iOs 设备)吗?

    android - 找不到处理 Intent { act=android.bluetooth.adapter.action.STATE_CHANGED } 的 Activity

    bluetooth - 在 Linux 上发送和接收蓝牙低功耗 (BLE) 原始数据包