• 103查看
  • 0回复

[信息安全] 汽车信息安全--对CryptoDriver里密钥格式定义的探索

[复制链接]

该用户从未签到

发表于 17-4-2024 21:58:37 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录

1.前期准备工作

2.开始分析

2.1 公钥的PEM解析

2.2 私钥的PEM解析

3 小结


一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。
在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。
1.前期准备工作

编译工具Python,安装库pyOpenssl。使用Openssl生成密钥对非常简单,示例代码如下:from OpenSSL import crypto# 生成RSA密钥对key_pair = crypto.PKey()key_pair.generate_key(crypto.TYPE_RSA, 2048)# 获取私钥和公钥private_key = crypto.dump_privatekey(crypto.FILETYPE_PEM, key_pair)public_key = crypto.dump_publickey(crypto.FILETYPE_PEM, key_pair)# 将密钥对保存到文件with open('private_key.pem', 'wb') as f:    f.write(private_key)with open('public_key.pem', 'wb') as f:    f.write(public_key)生成出来的密钥如下图:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w1.jpg

汽车信息安全--对CryptoDriver里密钥格式定义的探索w2.jpg
为什么我是生成的pem格式呢?因为这个库里面就只有PEM和ASN.1两种,我随机选了一个。那么什么叫pem格式?
PEM(Privacy-Enhanced Mail)格式是一种常见的用于存储和传输数据的文件格式,它通常用于存储密钥、证书和其他敏感数据。PEM文件使用Base64编码将二进制数据转换为文本格式,并添加了一些起始和结束标记,以便于识别和处理。通常包含以下几种类型的数据:1.证书(Certificates):PEM格式经常用于存储X.509证书,包括SSL/TLS服务器证书、客户端证书、中间CA证书等。证书文件的扩展名通常是“.pem”或“.crt”。2.私钥(Private Keys):PEM格式也可用于存储私钥,如RSA私钥、DSA私钥、ECDSA私钥等。私钥文件的扩展名通常是“.pem”。3.CSR(Certificate Signing Request):CSR文件包含证书签发请求的信息,通常用于向证书颁发机构(CA)申请证书签发。CSR文件的扩展名通常是“.csr”。
4.其它敏感数据:除了证书和私钥外,PEM格式还可用于存储其他类型的敏感数据,如密码、数字签名等。

那么另外一个ASN.1又指的是什么呢?
ASN.1定义了一种抽象的数据类型和其对应的表示方式,并提供了一种描述和交换结构化数据的通用方式,使得不同系统之间可以理解和交换数据。由于ASN.1 只是定义了数据结构,并未规定具体的编码方式,因此该语言要与编码规则一起完成数据的编码和解码。在密码学中,常见的有BER(Basic Encoding Rules)、DER(Distinguished Encoding Rules);而PEM是在DER基础上进行Base64编码后产生的文件格式。因此在上文我选择ASN1类型,那就生成的是DER格式。

2.开始分析

那么既然PEM格式是DER base64编码后的产物,最终要解析的话还是得按照ASN.1的格式来,为此我寻觅了一个基于java的在线解析网站,如下ASN.1 JavaScript decoder,不管是PEM还是hex编码格式,都可以解析成ASN.1 DER或者BER格式。2.1 公钥的PEM解析

将public_key.pem文件放进去,可以看到解码格式如下:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w3.jpg
这与AUTOSAR中格式相近
汽车信息安全--对CryptoDriver里密钥格式定义的探索w4.jpg
在subjectPublicKey也可以看到公钥本身,如下:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w5.jpg
我们可以看到在algorithm ID为1.2.840.113549.1.1.1,对应hex :2A 86 48 86 F7 0D 01 01 01
汽车信息安全--对CryptoDriver里密钥格式定义的探索w6.jpg
而这个值在RFC标准中是有定义的,我们可以看到附录C1
汽车信息安全--对CryptoDriver里密钥格式定义的探索w7.jpg
最初我还不是很相信,继续查找类似的,发现了如下图:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w8.jpg
因此,有理由相信,这个OBJECT IDENTIFIER对于算法是有自己想法的。看完了公钥,我们来看私钥。2.2 私钥的PEM解析

同样操作,但是得出了不同结果,如下图:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w9.jpg
按照套路,我们根据RFC8017来对比RSA私钥的格式:
汽车信息安全--对CryptoDriver里密钥格式定义的探索w10.jpg

汽车信息安全--对CryptoDriver里密钥格式定义的探索w11.jpg
看到这里,我才对这个解析所有理解。在ASN,1里对公私钥的类型均有所定义,具体总结如下:RSAPublicKey ::= SEQUENCE {modulus           INTEGER,  -- npublicExponent    INTEGER   -- e}RSAPrivateKey ::= SEQUENCE {version           Version,modulus           INTEGER,  -- npublicExponent    INTEGER,  -- eprivateExponent   INTEGER,  -- dprime1            INTEGER,  -- pprime2            INTEGER,  -- qexponent1         INTEGER,  -- d mod (p-1)exponent2         INTEGER,  -- d mod (q-1)coefficient       INTEGER,  -- (inverse of q) mod potherPrimeInfos   OtherPrimeInfos OPTIONAL}而上述解析出来的格式刚好与整个相对应。
3 小结

今天主要记录了关于asym密钥对的格式定义的探索,至少大体方向是有了,但是具体在autosar中如何实现,还需要继续往下深挖。

往期回顾:

1.汽车标定精选
汽车标定技术--标定概念详解
汽车标定技术--Bypass的前世今生
万字长文:汽车标定技术--XCP概述

2.AUTOSAR精选
AUTOSAR CryptoStack--CSM Job夹带了哪些私货
AUTOSAR 诊断栈分析(一)
AUTOSAR OS概述(一)

3.汽车网络安全精选
汽车信息安全--MCU启动常用密码算法
汽车网络安全方案需求分析
汽车信息安全--常见车规MCU安全启动方案
车载信息安全场景概述

4.汽车功能安全精选

5.汽车虚拟化精选

    汽车ECU虚拟化技术初探(一)

    汽车ECU虚拟化技术(二)--U2A虚拟化功能

6.杂七杂八

    Flash模拟EEPROM原理浅析

    征途漫漫:汽车MCU的国产替代往事

    车规MCU应用场景及国产替代进展

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 30-4-2024 21:30 , Processed in 0.368820 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.