carlife: cGitHub - fmwalways/apollo-DuerOS: DuerOS
carplay: CarPlay | Apple Developer Documentation
苹果的CarPlay使用了MFi(Made for iPhone/iPod/iPad)认证计划来确保硬件配件与iOS设备的兼容性和安全性。MFi认证包括了多个层面的认证和鉴权,以确保设备能够安全地与Apple的生态系统进行互操作。
carplay主要有数据流、音频流、视频流、语音控制流、车机信息交互流
车机信息交互流:将车身方向盘、屏幕等信息输入给到手机侧
视频流:主要是视频的编解码,以及socket数据传输
音频流:主要是多媒体声音socket
整体实现主要在carplay 协议层来实现
MFi 认证过程
MFi认证过程涉及硬件、软件、以及加密认证等多个方面。以下是MFi认证和CarPlay鉴权的一些关键步骤:
1. MFi 芯片
MFi 芯片:MFi 设备中包含一个特殊的认证芯片。这些芯片在制造时已经经过Apple的认证,内置了密钥和证书,用于设备认证。
2. 加密认证
公钥和私钥对:每个MFi设备都有一对公钥和私钥。这些密钥对用于加密通信和设备认证。
设备证书:每个MFi设备在制造过程中都会被分配一个设备证书。这个证书由Apple签发,并包含设备的公钥。
3. 认证过程
当一个CarPlay设备连接到iPhone时,以下是认证过程的关键步骤:
设备连接:
当CarPlay设备(例如汽车的娱乐系统)连接到iPhone时,双方开始建立通信。
证书交换:
CarPlay设备发送其设备证书给iPhone。这个证书由Apple签发,并包含设备的公钥。
验证证书:
iPhone使用Apple的公钥验证CarPlay设备的证书,以确认其真实性和有效性。
挑战和响应:
iPhone生成一个随机数作为挑战,并使用CarPlay设备的公钥加密这个随机数。
CarPlay设备使用其私钥解密这个挑战,生成一个响应,并发送回iPhone。
验证响应:
iPhone验证响应的正确性。如果响应正确,则认证成功,表明CarPlay设备确实拥有相应的私钥,并且是受信任的MFi设备。
数据加密
在认证通过后,CarPlay设备和iPhone之间的通信使用加密通道进行。这确保了传输数据的机密性和完整性。
TLS/SSL 加密
TLS/SSL 协议:认证通过后,数据传输通常使用TLS/SSL协议进行加密。这些协议确保了数据在传输过程中不会被窃听或篡改。
对称加密:使用对称密钥加密通信数据,提高传输效率。
认证芯片的作用
MFi认证芯片是整个认证过程的核心。它存储了私钥,并确保只有合法的MFi设备可以成功完成认证过程。未经认证的设备无法通过这一鉴权步骤,也无法与iPhone建立CarPlay连接。
实际操作示例
以下是一个简化的认证流程示意图:
CarPlay设备连接iPhone。
CarPlay设备发送设备证书给iPhone。
iPhone使用Apple的公钥验证设备证书。
iPhone生成挑战并使用设备公钥加密。
CarPlay设备解密挑战并生成响应。
iPhone验证响应,如果正确则认证通过。
MFI中的主要信息:
挑战:challenge data 可读写32bytes
证书号:device certificate serial number
挑战响应:challenge data response 只读64bytes
证书数据:certificate data 只读600bytes around
和https类似:
1.1 客户端请求和服务器响应
客户端发起请求:客户端(例如浏览器)请求与服务器建立 HTTPS 连接。
服务器响应:服务器发送它的证书 server_cert.pem 给客户端。
1.2 客户端验证服务器证书
验证证书链:客户端验证服务器证书是否由受信任的 CA 签发。如果是自签名证书,客户端需要将服务器证书添加到信任存储中。
验证证书有效性:检查证书的有效期和其他属性。
1.1 密钥交换
生成会话密钥:客户端生成一个随机数作为会话密钥,并使用服务器的公钥加密该会话密钥。
发送会话密钥:客户端将加密后的会话密钥发送给服务器。
1.4 服务器解密会话密钥
解密会话密钥:服务器使用它的私钥解密会话密钥。
准备开始加密通信:现在双方都有相同的会话密钥,可以使用对称加密算法(如 AES)进行加密通信。
1.5 数据加密和解密
1.6 数据加密
发送数据时:发送方(客户端或服务器)使用会话密钥对数据进行加密。
加密算法:常用对称加密算法如 AES。