如何把SUPI加密为SUCI
如何把SUPI加密为SUCI
下图1所示中我们可以看到两对秘钥对,一对是终端侧Eph.key pair generation,产生Eph. public key和Eph. private key。另外一对来自运营商网络, 终端侧有Public key of HN(固定存放在USIM中)。这两对秘钥均采用椭圆曲线加密算法ECC生成。私钥可以衍生出唯一的公钥,但是从公钥不能反推出私钥。
终端生成的私钥与网络提供的公钥结合,派生出一对加密秘钥Eph.shared key(用来加密的原始秘钥),随后派生出加密的主密钥,取高有效位对SUPI进行对称加密,得到SUCI,即Ciphertext;低有效位对所有的有用信息,包含终端参数,进行一个完整性保护。所以最后终端发出的消息包括:终端生成的公钥、SUCI和终端参数等系列信息。
下图2为网络侧对终端身份进行SUCI验证的方案。网络侧采用私钥(Private key of HN)与终端所发送的公钥(Eph.public key of UE)组合成秘钥Eph.shared key,随后派生出主密钥master key。不同于终端加密流程的是,网络侧会先通过秘钥的低有效位校验消息的完整性与否(步骤5),若消息经过中间人篡改,则该步骤的验证无法通过。若验证通过,才会进一步将信令转发至UDM中执行SIDF的过程,解密得到SUPI(Plain-text)。
该方案可以顺利通过验证并解密得到SUPI的关键也是利用椭圆加密算法的特性:终端私钥·网络公钥=网络私钥·终端公钥(注:密钥之间的乘法是椭圆曲线上的标量乘法,所以终端与网络侧均采用同一条曲线,即椭圆曲线的参数一致Curve25519 [2]或secp256r1 [3])。