蓝牙核心规范(V5.2)7.9-深入详解之SMP(安全管理协议)-配对详解(2)

举报
心跳包 发表于 2021/11/16 17:17:34 2021/11/16
【摘要】 3 配对方法当配对要准备进入配对时,应该启动配对功能初始化设备。如果响应设备不支持配对或配对无法体现,则无法使用错误代码“不支持配对”的配对失败消息回复响应设备。Pairing Feature Exchange用于交换IO能力,OOB身份验证数据可用性,身份验证要求,关键大小要求以及要分发的特定运输密钥。 IO能力,OOB身份验证数据可用性和身份验证要求用于确定第2阶段使用的关键生成方法。所...

3 配对方法

当配对要准备进入配对时,应该启动配对功能初始化设备。如果响应设备不支持配对或配对无法体现,则无法使用错误代码“不支持配对”的配对失败消息回复响应设备。

Pairing Feature Exchange用于交换IO能力,OOB身份验证数据可用性,身份验证要求,关键大小要求以及要分发的特定运输密钥。 IO能力,OOB身份验证数据可用性和身份验证要求用于确定第2阶段使用的关键生成方法。

所有的LE 传统配对方式使用和生成两个密钥:

  • 1.临时密钥:用于生成STK的配对过程中使用的128位临时密钥;
  • 2.短时间密钥(STK):用于加密连接后续配对的128位临时密钥。

LE 安全连接配对方式使用和产生一个密钥:

  • 长期密钥(LTK):用于加密连接后续配对和后续连接的128位密钥。

认证要求由GAP设定。 认证要求包括绑定类型和(MITM)要求。

启动设备指示响应设备,其中特定密钥传输类似于发送响应设备,并且密钥类似于响应设备发送到启动器。 响应设备用启动设备发出的密钥和响应设备发出的密钥回复。 可以分发的密钥。 如果设备收到带有无效参数的命令,则必须使用错误代码“无效参数”对失败命令进行响应。

3.1 安全属性

SM提供的安全属性归入以下类别:

  • LE安全连接配对
  • 认证的MITM保护
  • 未经授权的非MITM保护
  • 没有安全要求

在LE传统配对中,通过使用配对密钥进入配对的方法获得了经过认证的(MITM)保护,或者可以使用带外配对的方法获得保护。 在LE 安全连接配对中,使用秘钥进入配对的方法或数字比较方法获得了经过认证(MITM)保护,或者可以使用带薪方法获得。 为了确保生成经过认证的MITM保护,所选的认证要求选项必须具有特定的MITM保护。

未经授权的非MITM保护不会受到MITM攻击的保护。

对于LE 传统配对,在使用TK的可预测或简单设定的价值的配对过程中,没有一种配对方法可以防止被动泄漏。 如果配对信息在所有配对方法都提供机密性的情况下分发,则会出现泄漏。

启动设备应保留安全数据库中分发密钥的安全属性记录。

响应设备可以保留安全数据库中分布式密钥的分布式密钥大小和安全属性的记录。 根据关键世代方法和谈判的关键点,响应设备可能会减少关键长度,以便启动并使用相同的密钥进行响应。

在第2阶段生成的密钥的安全属性,其中密钥被分发到安全数据库中。

3.2 IO能力

设备的输入和输出能力与生成其IO能力相结合。 输入能力在表2.3中描述。 表2.4中描述了输出能力。

能力 描述
没有输入 设备没有能力指示‘是’或‘否’
是/否 最左边的两个按钮可以简单地映射到‘是’和‘否’或设备有一个机制,用户可以指示‘是’或‘否’。
键盘 提供了一个数字键盘,可以通过‘9’输入数字‘0’并进行确认。 另外还有两个按钮可以简单地映射到‘是’和‘否’,或者设备有一个机制,用户可以指示‘是’或‘否’(见下文注释)。

注意:‘是’必须通过按下按钮来指示,并有一定的时间限制,否则‘不’将被假定。

能力 描述
没有输出 设备没有显示或通信到6位十进制数字的能力
数字输出 提供显示或通信到6位十进制数字的能力

个人输入和输出能力映射到设备的单个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位加密密钥

0x123456789ABCDEF0123456789ABCDEF0

并且减少到7字节(56位),然后结果是密钥

0x0000000000000000003456789ABCDEF0。

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 Entry

Passkey 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设置为交换对等设备(即。 在没有任何修改的情况下),输入参数后,将发送给对等设备交换的配对响应命令(即。 没有任何修改),输入参数设置为启动设备地址类型,设置为启动设备地址,设置为响应设备地址类型,设置为响应设备地址类型,设置为响应设备地址:

Mconfirm = c1(TK, Mrand, 
Pairing Request command, Pairing Response command,
initiating device address type, initiating device address, 
responding device address type, responding device address)

用于确认生成的启动和响应设备地址必须在连接设置期间使用设备地址。

响应设备生成128位随机编号(Srand)。

响应设备使用确认值生成函数c1计算128位确认值(确认值),并输入参数k集到TK, 输入参数设置为Srand, 输入参数预置请求命令, 输入参数设置为发送响应命令,输入参数设置为启动设备地址类型,设置为启动设备地址,设置为响应设备地址类型,设置为响应设备地址类型,设置为响应设备地址类型:

Sconfirm = c1(TK, Srand, 
Pairing Request command, Pairing Response command, 
initiating device address type, initiating device address,
responding device address type, responding device address)

启动设备传输确认响应设备。 当响应设备接收确认时,它会将确认传输到启动设备。 当启动设备接收确认它发送到响应设备时。

响应设备通过使用收到的Mrand值重复计算初始设备性能来验证Mconfirm值。

如果回复设备的计算确认值不匹配从启动设备收到的确认值,则应中止对该设备的处理,并且响应设备应发送带有原因代码“确认价值失败”的配对失败命令。

如果响应设备的计算Mconfirm值匹配从启动设备接收到的Mconfirm值,则响应设备传输Srand到启动设备。

启动设备使用收到的Srand值通过重复计算响应设备性能来验证收到的确认值。

如果初始设备计算了确认值,则不会匹配响应进程中止时收到的确认值,并且启动设备应发送给原因代码“确认值失败”的失败命令。
如果启动设备的计算确认值匹配,则从响应中收到的确认值会消耗STK计算的启动设备,并将控制器调用到可加密的加密中。
使用密钥生成函数s1生成STK,其中输入参数k集为TK,输入参数r1集为Srand,输入参数r2集为Mrand:
STK = s1(TK, Srand, 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私人/公共密钥对:

私人密钥:3f49f6d4至3c55f38 74c9b3e3 d2103f50 4aff607b eb40b799 5899b8a6 cd3c1abd
公钥(X):20b003d2 f297be2c 5e2c83a7 e9f9a5b9 eff49111 acf4fddb cc030148 0e359de6
公钥(Y):dc809c49 652aeb6d 63329abf 5a52155c 766345c2 8fed3024 741c8ed0 1589d28b

注意:只有一侧(启动或响应)需要设置安全连接调试模式,以便调试设备以确定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是自密钥最后更改以来失败的注意事项的数量。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。