18 安全
18.1 SPAKE2+协议描述
18.1.1 概述
本节介绍SPAKE2+协议的原理。有关实施细节,请参阅第18.4节。
该系统使用SPAKE2+,这是一种基于ECC的配对算法协议,基于客户端(即设备)提供的密码和永久存储在服务器(即车辆)中的验证器的信息,对两个实体进行相互认证。有关更多详细信息,请参见[10]。
理解说明:SPAKE2+即Simple Password Authenticated Key Exchange的缩写。
应使用NIST P-256曲线[8]。
车辆制造商服务器应在车主配对开始之前生成密码并将必要的元素(w0,L;见18.1.2)提供到车辆中,以便即使车主配对时车辆处于离线状态,也可以进行配对。
Scrypt密钥推导在服务器和设备上执行,这允许服务器和设备随着时间的推移调整推导<>参数,以对抗攻击者性能的提高。
密码pwd应通过车辆制造商帐户提供给车主,并由车主已知的登录凭据保护。密码是UTF-8编码的,应该用此编码传递给Scrypt函数。
假设所有值都是以大端字节顺序排列的。x和y随机生成器应在所需范围内具有均匀分布,并且在加密方面是安全的。
18.1.2 执行
车辆制造商服务器根据密码导出L和w0,如下所示:
z0=Scrypt(pwd, s, Nscrypt, r, p, dkLen)结果的左40字节
z1=Scrypt(pwd, s, Nscrypt, r, p, dkLen)结果的右40字节
使用FIPS 186-4,B.5.1方法导出w0和w1:
w0 = (z0 mod (n-1)) + 1,其中n是为NIST P-256定义的基点G的阶数n
w1 = (z1 mod (n-1)) + 1,其中n是为NIST P-256定义的基点G的阶数n
w0和w1不应相等。
然后,应计算:
L = w1 × G
其中G是为所选择的椭圆曲线定义的。
在[11]中描述了scrypt算法。
Scrypt函数由以下参数定义:
Salt: 16个字节,根据[12]为每个新的验证器随机生成;
Cost parameter Nscrypt: 4096或更高;
Block size r:8;
Parallelization parameter p: 1;
Output length dkLen: 80
车辆制造商服务器然后向车辆安全且保密地提供构成验证器的salt、L和w0。
本规范未指定将来将这些参数升级到更快硬件的方法。一个简单的解决方案是服务器也向车辆提供这些参数。
当配对开始或在错误尝试后重新开始时,车辆应在所选曲线上随机生成有效标量y,然后计算:
Y = y × G + w0 × N
其中N是第18.1.5节中规定的所用椭圆曲线上的一个点。当达到失败配对尝试的最大次数时(参见第5.1.2节中SPAKE2+REQUEST命令的使用),应生成一个新的密码和验证器,以允许重试配对。
Y不应是无穷远处的点,并且应在所选曲线上。在继续协议之前,应生成新的y,并计算新的y,直到满足y的要求。
车辆应将Y与Scrypt配置参数一起传输至设备。
当车主配对开始时,密码会提供给要配对的设备,使其能够计算:
z0 = Scrypt(pwd, s, Nscrypt, r, p, dkLen) )结果的左40字节
z1=Scrypt(pwd, s, Nscrypt, r, p, dkLen)结果的右40字节
s、Nscrypt、r和p由车辆发送,dkLen在双方都是众所周知的。。
使用FIPS 186-4,B.5.1方法导出w0和w1:
w0 = (z0 mod (n-1)) + 1,其中n是为NIST P-256定义的基点G的阶数n
w1 = (z1 mod (n-1)) + 1,其中n是为NIST P-256定义的基点G的阶数n
然后,设备应在所选曲线上随机生成有效标量x,然后计算:
X = x × G + w0 × M
其