| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 蓝牙核心规范(V5.2)7.9-深入详解之SMP(安全管理协议)-配对详解和BLE安全性(2) -> 正文阅读 |
|
[网络协议]蓝牙核心规范(V5.2)7.9-深入详解之SMP(安全管理协议)-配对详解和BLE安全性(2) |
?????蓝牙篇之蓝牙核心规范(V5.2)深入详解汇总? 目录 目录 3 配对方法当配对要准备进入配对时,应该启动配对功能初始化设备。如果响应设备不支持配对或配对无法体现,则无法使用错误代码“不支持配对”的配对失败消息回复响应设备。 Pairing Feature Exchange用于交换IO能力,OOB身份验证数据可用性,身份验证要求,关键大小要求以及要分发的特定运输密钥。 IO能力,OOB身份验证数据可用性和身份验证要求用于确定第2阶段使用的关键生成方法。 所有的LE 传统配对方式使用和生成两个密钥:
LE 安全连接配对方式使用和产生一个密钥:
认证要求由GAP设定。 认证要求包括绑定类型和(MITM)要求。 启动设备指示响应设备,其中特定密钥传输类似于发送响应设备,并且密钥类似于响应设备发送到启动器。 响应设备用启动设备发出的密钥和响应设备发出的密钥回复。 可以分发的密钥。 如果设备收到带有无效参数的命令,则必须使用错误代码“无效参数”对失败命令进行响应。 3.1 安全属性SM提供的安全属性归入以下类别:
在LE传统配对中,通过使用配对密钥进入配对的方法获得了经过认证的(MITM)保护,或者可以使用带外配对的方法获得保护。 在LE 安全连接配对中,使用秘钥进入配对的方法或数字比较方法获得了经过认证(MITM)保护,或者可以使用带薪方法获得。 为了确保生成经过认证的MITM保护,所选的认证要求选项必须具有特定的MITM保护。 未经授权的非MITM保护不会受到MITM攻击的保护。 对于LE 传统配对,在使用TK的可预测或简单设定的价值的配对过程中,没有一种配对方法可以防止被动泄漏。 如果配对信息在所有配对方法都提供机密性的情况下分发,则会出现泄漏。 启动设备应保留安全数据库中分发密钥的安全属性记录。 响应设备可以保留安全数据库中分布式密钥的分布式密钥大小和安全属性的记录。 根据关键世代方法和谈判的关键点,响应设备可能会减少关键长度,以便启动并使用相同的密钥进行响应。 在第2阶段生成的密钥的安全属性,其中密钥被分发到安全数据库中。 3.2 IO能力设备的输入和输出能力与生成其IO能力相结合。 输入能力在表2.3中描述。 表2.4中描述了输出能力。
注意:‘是’必须通过按下按钮来指示,并有一定的时间限制,否则‘不’将被假定。
个人输入和输出能力映射到设备的单个IO能力,该设备在交换功能中使用。 映射图在表2.5中描述。 1 没有配对算法可以使用是/否输入和否输出,因此使用NoInput、NoOutput作为结果IO能力。 3.3 OOB认证数据可以使用带外状机制来传达在配对过程中使用的信息。 信息应遵循AD结构的顺序。 OOB数据标志应在设备具有对等设备的频段认证数据的情况下设置。 设备使用对端设备从频段身份验证数据到对端设备的身份验证。 在LE传统配对对中,如果设备有其他设备可以使用带外认证数据,则使用带外认证方法。 在LE 安全连接配对中,如果一个设备有对端设备带外认证数据可能带外方法。 3.4 加密密钥大小每个设备都有最大和最小加密密钥长度参数,其中定义了八元组加密密钥的最大和最小大小。 最大和最小加密长度参数应介于7字节(56位)和16字节(128位)之间,以1字节(8位)步为单位。 这是由配置文件或设备应用程序定义的。 初始和响应设备的最大加密长度参数的小值将用作加密密钥大小。 启动和响应设备都应检查结果加密密钥大小是否小于设备的最小密钥大小参数,如果是,则设备应发送带有错误代码“加密密钥大小”的失败命令。 加密密钥大小可以存储,因此可以通过任何服务进行检查,因为它具有最小的加密密钥长度要求。 如果一个秘钥有一个加密密钥,那么它是最少的16个字节(128位),它应该通过掩码生成密钥的适当MSB来创建,以提供协议加密密钥所在的密钥。 面具应在一代之后捐赠,并在分发,使用或存储之前。 注意:当BR/EDR链接键从LTK导出时,导数不会在LTK 得到掩码之前。 例如,如果是128位加密密钥
并且减少到7字节(56位),然后结果是密钥
3.5配对算法在第1阶段交换的信息用于选择在第2阶段使用的密钥生成方法。 3.5.1 选择密钥生成方法如果设备没有设置认证要求标志中的MITM选项,则应忽略IO能力,并使用Just works关联模型。 在LE传统配对中,如果两个设备都有带状认证数据,那么在选择支付方法和使用带状支付方法时,应忽略认证要求标志。 其他,设备应具有的IO能力用于确定表2.8中定义的配对方法。 在LE 安全连接配对中,如果有一方或双方设备已从带外认证数据中删除,则在选择配对方法和使用配对方法时将忽略认证要求标志。 其他,设备应具有的IO能力用于确定表2.8中定义的配对方法。 表2.6定义了STK生成方法,其中一个设备不支持LE 安全连接。 表2.7定义了LTK生成方法,其中任何设备都支持LE 安全连接。 生成的密钥将是经过验证或未经验证的密钥。 如果使用了带外认证方法,并且带外机制被认为是安全的,那么从吹出的关键被认为是真实的; 然而,确切的力量取决于用于传输频段信息的方法。 如果使用了禁止方法,并且禁止使用禁止机制不是安全的,或者泄漏保护水平是未知的,那么关键应该是未经授权的。 表2.8中描述了IO映射为经过验证或未经验证的密钥的能力。 在LE传统配对对中,如果启动设备已从频段数据中删除,并且响应设备未从频段数据中删除,则响应设备可能会发送带有错误代码“OOB不可用”的配对响应命令的失败命令。 如果密钥产生方法没有提供足够安全属性的关键,则设备必须发送带有错误代码“身份验证要求”的失败命令。 3.5.2 LE传统配对-Just Works在配对过程中,Just Works STK 产生方法在中间攻击中提供了对Eavesdroppers或man的非保护。 如果攻击者在配对过程中不存在,则可以通过使用对未来连接的加密来建立信任。 两个设备都设置了认证机制中使用的TK值为零。 3.5.3 LE传统配对-Passkey EntryPasskey Entry STK生成方法使用设备之间的用户从频段传递的6个数字数字。 一个6位数字随机生成的密码接近20位熵。 如果设备的IO能力仅显示,或者如果表2.8定义了设备显示passkey,则设备显示在000,000和999,999之间的随机生成的passkey值。 显示应显示所有6个数字-包括零。 其他设备应使用户能够在000,000和999,999之间输入价值。 如果Passkey进入UI失败或在设备发出信号时被取消,则使用原因代码“Passkey Entry Failed”命令失败。 例如,如果用户输入的密码是‘019655’,那么TK应该是0x00000000000000000000000000000000004CC7。 Passkey Entry 方法提供了对主动”(MITM)攻击的保护,因为它们将以0.000001的概率发生在几乎调用该方法的情况下。 Passkey Entry STK生成方法在可能的TK值的有限范围内依赖于可能的TK值。 如果攻击者在互惠过程中不存在,则可以通过使用对未来连接的加密来建立信任和认证。 3.5.4 带外可以使用频段机制之外的通信信息来帮助设备发现,例如设备地址,以及使用128位TK值配对过程。 使用此处定义的随机生成要求,TK值应为128位随机数字。 如果OOB通信抵抗MITM攻击,则这种关联方法也抵抗MITM攻击。 此外,在乐队方法之外,认证参数(TK)的大小不受用户可以舒适阅读或类型的限制。 为此,可以使用Passkey Entry或Just Works方法使带外方法更加安全。 但是,任何设备都需要匹配OOB接口。 MITM保护仅在成功攻击的积极中期内提供,发生的可能性为0.000001或更少。 3.5.5 LE传统配对阶段2启动设备生成128位随机编号(Mrand)。 初始设备使用确认值生成函数c1计算128位确认值(Mconfirm),并输入参数k集到TK, 输入参数r设置为Mrand,输入参数preq设置为交换对等设备(即。 在没有任何修改的情况下),输入参数后,将发送给对等设备交换的配对响应命令(即。 没有任何修改),输入参数设置为启动设备地址类型,设置为启动设备地址,设置为响应设备地址类型,设置为响应设备地址类型,设置为响应设备地址:
用于确认生成的启动和响应设备地址必须在连接设置期间使用设备地址。 响应设备生成128位随机编号(Srand)。 响应设备使用确认值生成函数c1计算128位确认值(确认值),并输入参数k集到TK, 输入参数设置为Srand, 输入参数预置请求命令, 输入参数设置为发送响应命令,输入参数设置为启动设备地址类型,设置为启动设备地址,设置为响应设备地址类型,设置为响应设备地址类型,设置为响应设备地址类型:
启动设备传输确认响应设备。 当响应设备接收确认时,它会将确认传输到启动设备。 当启动设备接收确认它发送到响应设备时。 响应设备通过使用收到的Mrand值重复计算初始设备性能来验证Mconfirm值。 如果回复设备的计算确认值不匹配从启动设备收到的确认值,则应中止对该设备的处理,并且响应设备应发送带有原因代码“确认价值失败”的配对失败命令。 如果响应设备的计算Mconfirm值匹配从启动设备接收到的Mconfirm值,则响应设备传输Srand到启动设备。 启动设备使用收到的Srand值通过重复计算响应设备性能来验证收到的确认值。 如果初始设备计算了确认值,则不会匹配响应进程中止时收到的确认值,并且启动设备应发送给原因代码“确认值失败”的失败命令。 如果启动设备的计算确认值匹配,则从响应中收到的确认值会消耗STK计算的启动设备,并将控制器调用到可加密的加密中。 使用密钥生成函数s1生成STK,其中输入参数k集为TK,输入参数r1集为Srand,输入参数r2集为Mrand:
发起人应使用生成的STK对链接上的可加密,或者如果加密已经打开,则穿孔加密暂停程序。 3.5.6 LE安全连接配对阶段2长密钥是在LE安全连接第2阶段生成的。 公开密钥交换 最初,每个设备生成是椭圆曲线差分Hellman(ECDH)公共-私人密钥对(第1阶段)。 公私合作伙伴关系包含私人内容(秘密)密钥和公钥。 设备A和B的私钥分别表示为SKa和SKb。 设备A和B的公钥分别表示为PKa和PKb。 有关如何经常更改此关键对的建议。 启动设备启动了配对,将其公共密钥路由到接收设备(第1a阶段)。 响应设备使用其自己的公钥回复(第1b阶段)。 这些公钥并非秘密地传达给他们,因为他们可以识别设备。 从任何BD_ADDR收到的任何公共密钥的设备应在正确的曲线上验证(P-256)。 有效的公钥Q=(XQ,YQ)是其中一个XQ,YQ在范围0到p-1之间,并且满足相关曲线有限域中的等式(YQ)2=(XQ)3+aXQ+b(mod p)。 关于a,b和p的值。 设备可以通过直接检查曲线方程来验证公钥,通过实施椭圆曲线点添加和加倍公式,这些公式仅在正确的曲线上或通过其他方法有效。 如果不使用结果LTK,则在LE 安全连接配对过程期间任何一点从对等方检测到无效的公钥。 公钥交换后,设备可以开始计算Diffie-Hellman密钥。 当安全管理被放入Debug模式时,他应该使用以下差异-Hellman私人/公共密钥对:
注意:只有一侧(启动或响应)需要设置安全连接调试模式,以便调试设备以确定LTK,并且,在那里,可以监视加密连接。 认证阶段1-公平工作或数字比较 如果MITM位在配对请求 PDU和/或配对请求 PDU的认证要求中设置为1并且/或配对响应 PDU和两者兼而有之,则将使用数字比较关联模型。设备已设置IO以显示否或键盘显示 图2.3所示的密码学观点的Just Works或数字比较协议的认证阶段1的顺序对话。 公钥交换后,each将设备选择设置为伪128位非(第2步)。 该值用于防止重播攻击,并且必须通过对端协议的几乎实例生成。 该值应直接从无障碍的物理源或从物理源获得具有随机值的良好伪随机发生器生成。 以下是对已交换的两个公钥的承诺及其自身的十一个值的计算的响应设备(步骤3c)。 该承诺作为这些价值的单向函数计算,并传递给启动设备(第4步)。 承诺防止在以后改变这些价值的攻击者。 交换各自的九个值(第5步和第6步)的启动和响应设备以及启动设备确认承诺(步骤6a)。此时失败表明存在攻击者或其他传输错误并导致中止协议。 议定书可以与新一代公私伙伴关系重复或重复,但如果议定书重复,则必须生成新的非协议。 使用数字比较时,假设提交检查发生,两个设备计算6位数确认值,然后将其显示给各自设备上的用户(步骤7a,7b和8)。 预计用户将检查6位数字匹配值并确认是否匹配。 如果没有匹配,则必须生成“议定书”废除,并且如果要重复“议定书”,则必须生成新的nonces。 认证阶段1-Passkey Entry 认证阶段1-带外 认证阶段2和长期密钥计算 3.6 重复事项当验证者将启动新的配对请求命令或安全请求命令相同配对之前的配对程序失败时, 或者,它将响应由设备启动的配对请求命令或安全请求命令,以失败的设备声称相同的身份。 对于后来的失败,等待中间应该是指数增加。 这是,几乎失败后,可以在新的注意事项之前等待插槽,可以举例说明,两次等待插槽早于之前的注意事项。 等待干预应限于最大值。 最大等待间隔依赖于实施。 等待时间应按指数顺序减少到最低限度,因为没有新的失败事件是在一定时间内完成的。 该程序通过使用大量不同的密钥重复配对程序来防止这种情况发生。 为了保护设备的私钥,设备应该实施一种方法,以防止攻击有关设备私钥的二手信息。 为此,每次付款后(成功或失败),设备必须更改为私人密钥。 其他,它应该改变它的私人密钥,因为S+3F>8,其中S是成功配对的数量,F是自密钥最后更改以来失败的注意事项的数量。 4.密钥分配和生成蓝牙低能耗设备可以将密钥从从设备分配到主设备,并从主设备分配到从设备。当使用LE遗留配对时,以下密钥可以从从机分配到主机:
当使用LE安全连接时,以下密钥可以从从节点分发到主节点:
当使用LE传统配对时,主节点可以将以下键分配给从节点:
当使用LE安全连接时,主节点可以将以下密钥分配给从节点:
在传输特定密钥分配阶段要分配的密钥显示在配对请求和配对响应命令的密钥分配字段中。 LE的配对请求和配对响应命令中的启动器密钥分发/生成字段和响应器密钥分发/生成字段的格式如图3所示。 密钥分配/生成字段具有以下标志:
主机使用“配对请求”命令中的“启动器密钥分发/生成”字段来向启动器请求哪些密钥被分发或生成给响应器。“配对请求”命令中的“响应器密钥分发/生成”字段由主机用来请求响应器向发起器分发或生成哪些密钥。来自从机的“配对响应”命令中的“启动器密钥分发/生成”字段定义了启动器应向响应器分发或生成的密钥。来自从机的“配对响应”命令中的“响应器密钥分配/生成”字段定义了响应者应向发起者分发或生成的密钥。从程序不得设置为主程序在配对请求命令的启动器密钥分配/生成或响应器密钥分配/生成字段中的启动器密钥分配/生成或响应器密钥分配/生成字段中设置为零的任何标志。 使用LE传统配对时,密钥的分配顺序如下:
当使用LE安全连接时,密钥应按以下顺序分配:
如果没有被分配到密钥,则不应发送要分发该密钥的命令。 注意:如果未分发一个密钥,则使用此密钥的功能将不可用。例如,如果LTK没有从从机分发到主机,那么主机就无法加密与该从服务器的未来链接,因此必须再次执行配对。 注:启动器应根据更高层规范所需的功能来确定所需的密钥。例如,如果启动器确定在与该从机的未来链接中需要加密,那么启动器必须通过在“请求配对请求”命令的响应器密钥分发/生成字段中将EncKey位设置为1来请求分发从属的LTK。 如果在启动器密钥分发/生成和响应密钥分发/生成字段中将Enc密钥、标识密钥和标识密钥设置为零,则不得分发或生成密钥,在使用LE遗留连接配对时和使用LE安全连接配对时使用生成的STK对链接进行加密。 密钥分发在设备接收到该密钥的基带确认时发送最终密钥时完成,并且在接收设备接收到被分发的最终密钥时完成。 5.加密信息加密信息在LE传统配对传输特定密钥分发中用于分发在加密未来连接时使用的LTK。加密信息命令如图所定义。 只有当使用生成的STK加密或重新加密链接时,才能发送加密信息命令。 以下是数据字段: 长期密钥(16个字节) 6.主标识主标识用于LE传统配对传输特定密钥分发阶段来分发EDIV和Rand,这些EDIV和Rand用于加密未来的连接。 只有当链接使用生成的STK进行加密或重新加密时,才能发送主识别命令。 7.身份信息身份信息用于传输特定密钥分配阶段来分发IRK。 只有使用生成的密钥加密或重新加密时,才能发送身份信息命令。 注:全零身份解析密钥数据字段表示设备没有有效的可解析的私有地址。 8.身份地址信息身份地址信息在传输特定密钥分配阶段分发其公共设备地址或静态随机地址。 只有使用生成的密钥加密或重新加密时,才应发送身份地址信息命令。 数据字段为: AddrType(1个字节) 如果BD_ADDR是公共设备地址,则AddrType应设置为0x00。如果BD_ADDR是一个静态随机设备地址,则AddrType应设置为0x01。 BD_ADDR(6个字节) 此字段设置为分发设备的公共设备地址或静态随机地址。 9.签名信息签名信息在传输特定密钥分发中用于分发设备用于签名数据的CSRK。 只有使用链接的密钥使用生成的密钥加密或重新加密时,才能发送签名信息命令。 10.安全请求从程序使用“安全请求”命令来请求主服务器使用所请求的安全属性启动安全。 将使用以下数据字段: AuthReq (1 字节) AuthReq字段是一个位字段,表示STK或LTK和GAP绑定信息请求的安全属性。 Bonding_Flags字段是一个2位字段,它指示响应设备所请求的键合类型。MITM字段是一个1位的标志,如果设备正在请求MITM保护,则设置为1,否则应设置为0。设备将MITM标志设置为1,以便在使用LE传统配对时请求STK的已认证安全属性,在使用LE安全连接时请求LTK。 SC字段是一个1位的标志。如果设备支持LE安全连接配对,则应将SC字段设置为1,否则应设置为0。如果两个设备都支持LE安全连接配对,则应使用LE安全连接配对,否则应使用LE传统配对。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:24:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |