车载安全与隐私:CarPermissionManager、数据加密、匿名化处理、GDPR 合规
说实话,车载系统里的安全与隐私,这几年越来越敏感了。
我最早做车机的时候,大家关注点都在「功能能不能跑起来」。现在不一样了,用户上车第一件事可能就是问:「这车是不是在偷听我说话?」。嗯,这个问题背后,就是我们今天要聊的核心——CarPermissionManager、数据加密、匿名化处理,还有那个绕不开的 GDPR 合规。
CarPermissionManager:车载权限管理的「守门员」
Android Automotive OS 跟手机 Android 最大的区别在哪?
手机上的权限,基本是「应用自己申请,用户弹窗同意」。但在车上,很多权限是系统级的。比如麦克风、摄像头、车辆状态(车速、里程、GPS)。你不能让一个第三方音乐 App 随便读取车速吧?
CarPermissionManager 就是干这个的。它把权限分成了两类:
- 普通权限:跟手机类似,比如存储、通知。
- 车辆专属权限:比如
android.car.permission.CAR_SPEED、android.car.permission.CAR_MILEAGE。
我习惯在系统服务启动时,统一注册这些权限。举个例子:
// 在 CarService 中注册权限
CarPermissionManager permissionManager = new CarPermissionManager(context);
permissionManager.addPermission(
"com.example.app",
"android.car.permission.CAR_SPEED",
CarPermissionManager.PERMISSION_GRANTED
);
这里有个坑。我曾经遇到过一个第三方导航 App,它申请了 CAR_SPEED 权限,但实际只是用来显示一个「当前车速」的小组件。按理说没问题,但它的隐私政策里没写清楚。结果用户投诉说「App 在偷偷记录我的驾驶习惯」。嗯,这就是权限管理跟隐私政策脱节的问题。
数据加密:不只是存起来那么简单
车载数据分两种:静态数据(存在本地)和传输数据(车与云端)。
静态数据加密,我推荐用 AES-256-GCM。为什么是 GCM 模式?因为它自带认证加密,能防止数据被篡改。你想想看,如果有人篡改了你的导航历史数据,然后诱导你开到错误的地方……后果很严重。
代码示例:
// AES-256-GCM 加密示例
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(plainText);
传输数据加密,我建议用 TLS 1.3。别再用 1.2 了,1.3 握手更快,安全性也更高。我记得有一次,一个客户的车机跟云端通信用的是 HTTP + 自定义加密。我说这不行,中间人攻击一抓一个准。后来改成了 HTTPS + 证书固定(Certificate Pinning),才彻底解决。
匿名化处理:让数据「认不出」你是谁
车载数据里,最敏感的是什么?
我个人觉得是 GPS 轨迹。你每天几点出门、去哪上班、周末去哪玩,全在轨迹里。如果直接上传到云端,那就是「裸奔」。
匿名化处理,我常用的方法有:
- 泛化:把精确坐标变成「城市 + 区域」级别。比如 (39.9042, 116.4074) 变成「北京市朝阳区」。
- 加噪:在轨迹点上随机偏移 50-100 米。这样整体趋势还在,但具体位置对不上。
- 截断:只保留「起点」和「终点」,删除中间路径。很多地图厂商就是这么做的。
我曾经帮一个客户设计过匿名化流程。他们想收集用户的急刹车数据,用来优化 ADAS 算法。但直接上传 GPS 坐标,用户肯定不干。后来我们做了个处理:只上传「急刹车事件发生时的车速 + 加速度值」,完全不带位置信息。用户一看,嗯,可以接受。
GDPR 合规:不只是欧洲的事
很多人觉得 GDPR 是欧洲的法规,跟我没关系。其实不然。如果你的车出口到欧洲,或者你的云端服务器在欧洲,那你就得遵守。
GDPR 对车载系统有几个关键要求:
| 要求 | 具体做法 |
|---|---|
| 数据最小化 | 只收集必要的字段。比如导航 App 不需要知道你的通讯录。 |
| 明确同意 | 不能默认勾选「同意隐私政策」。用户必须主动点击。 |
| 数据可删除 | 用户有权要求删除所有个人数据。你要提供接口。 |
| 数据可移植 | 用户可以把数据导出成通用格式(比如 JSON)。 |
我遇到过最头疼的事,就是「数据可删除」。用户说「把我所有数据都删了」,但有些数据是跟车辆安全相关的(比如碰撞记录),不能删。怎么办?
我的做法是:把数据分成「个人数据」和「安全数据」。个人数据可以删,安全数据做匿名化后保留。然后在隐私政策里写清楚。嗯,这样既合规,又不影响安全。
知识体系总览
下面这张图,是我梳理的本章核心逻辑。你可以看到,从权限管理到数据加密,再到匿名化和合规,是一条完整的链路。
说白了,这四个模块不是孤立的。你做了权限管理,但数据不加密,等于白做。你加密了数据,但匿名化没做好,用户隐私还是暴露。你匿名化了,但 GDPR 合规没跟上,罚款照样来。
我个人习惯是,在项目初期就把这四件事一起规划。不要等到上线前才补安全,那会改得你怀疑人生。