1.1 架构
加密操作:提供公钥加密、对称密钥加密等操作,用于保护敏感数据的机密性。
密钥管理:提供密钥存储、密钥生成、密钥分发等功能,确保加密密钥的安全管理。
证书管理:支持X.509证书的管理,包括证书的颁发、吊销、验证和存储。
1.1.1 密钥存储
1.1.2 加密提供者管理
1.1.3 X.509证书管理
完整解析 X.509 证书。
基于不同参数在本地存储中搜索证书。
将证书存储在易失性或持久存储中,并进行加载。
将证书导入到易失性或持久存储中。
存储证书。
1.2 配置与工作流(本文以ETAS的RTA-VRTE工具为例)
1.2.1 配置阶段
部署类型(deploymentType:):标识符identifiers描述加密提供者如何处理密钥。每个加密提供者可能会开发成管理不同类型的密钥(例如软件密钥、硬件密钥等)。例如WOLFCRYPT_PROVIDER允许的类型SWKeyFile。
密钥槽编号(keySlotNum:):密钥的唯一标识符。该槽编号应在机器上对所有密钥唯一。自适应应用程序不需要使用该编号,它们应使用密钥实例描述符(key instance specifier)
部署细节:这是存储证书及其属性的二进制文件的路径。如果传递了 `-c` 参数,则为相对路径。 部署类型:标识符描述加密提供者如何处理证书。每个加密提供者可能会开发成管理不同类型的证书(例如软件证书、硬件证书等)。例如WOLFCRYPT_PROVIDER,允许的证书类型是 SWCertFile。 关联提供者:管理证书的加密提供者,例如 WOLFCRYPT_PROVIDER。
1.2.2 应用设计阶段
1.3 安全目标与实现
认证:通过加密和数字签名机制,FC Crypto确保应用程序能够证明其身份,防止未授权访问。
不可抵赖性:使用数字签名和哈希算法确保行为的不可否认性,即操作后不能否认已执行的动作。
机密性:通过加密保护敏感数据(如用户数据、车辆控制信息),确保数据只有持有正确密钥的接收者能够读取。
完整性:通过哈希和签名机制,确保数据在存储或传输过程中不被篡改,接收方可以验证数据的完整性。
1.4 密钥与证书管理
1.4.1 密钥管理概念
密钥生成:系统会动态生成对称密钥和非对称密钥对(如 RSA 公私钥对、ED25519 签名密钥对等)。
密钥存储与持久化:FC Crypto通过密钥存储提供者管理密钥的持久化存储。密钥材料可以存储在硬件模块(如TPM、HSM)或软件存储中,系统通过统一的接口进行访问。
密钥注入:密钥可以在系统运行时注入到加密模块中,或在部署过程中预先加载。
密钥用途限制:密钥存储提供者确保只有授权的应用程序可以访问密钥,避免不当访问导致安全问题。
1.4.2 关键字段与结构体
metadataVersionNumber:表示当前数据编码所依据的模式版本。如:版本支持的编码版本号为 0 和 1,其中 1 是针对导出操作,0 是针对导入操作。
COUID(Cryptographic Object Unique Identifier):由mObjectUidQwordMs、mObjectUidQwordLs 和 mObjectUidVersionStamp 组成,即这三者共同组成了一个加密对象唯一标识符(COUID)。 在 AUTOSAR 中,COUID 被分为两部分:GeneratorUid由mObjectUidQwordMs.mObjectUidQwordLs 和 mObjectUidVersionStamp 组成,用来唯一标识由生成器生成(注入)的对象(密钥)。 AUTOSAR 要求每个密钥都有自己的 COUID,且在执行 ASN.1 编码时必须提供对于注入密钥的 COUID。 注意:在 AUTOSAR 中,空的 COUID(Nil)等于 0.0.0,因此建议从 0.1.1 开始编号。当注入非对称密钥时,预计公钥和私钥将共享相同的 COUID,但它们会因 mObjectType 的不同而有所区分。
mObjectSize:表示密钥对象的字节大小。例如,对于一个 2048 位的 RSA 密钥,mObjectSize 应该设置为 256 字节。
mObjectType:表示正在注入的密钥类型。可用的类型包括:
kSymmetricKey:对称密钥
kPrivateKey:私钥
kPublicKey:公钥
kSignature:签名
kSecretSeed:秘密种子
mAlgId:指定密钥使用的加密算法 ID,如 AES-128、RSA-2048、ED25519 等。
mContentAllowedUsage:指定密钥支持的加密操作,可以支持多种加密、解密、签名、验证等操作。(可以通过按位 OR 运算符进行组合)
kAllowPrototypedOnly = 0x0000
kAllowDataEncryption = 0x0001
kAllowDataDecryption = 0x0002
kAllowSignature = 0x0004
kAllowVerification = 0x0008
kAllowKeyAgreement = 0x0010
kAllowKeyDiversify = 0x0020等等
mObjectEncoding:表示密钥编码格式,包括 raw、der、pem 和 custom(自定义,特指某个目标加密提供程序的特殊编码)格式。
mSessionFlag:指示密钥是否为临时密钥。如果设置为 true,表示该密钥仅用于当前会话,不会持久化存储。
mObject:密钥的值,按照 mObjectEncoding 中指定的方式进行编码。
1.4.3 密钥生成
1.4.4 密钥注入
创建 InstanceSpecifier,指定密钥槽的位置。
加载密钥存储提供者。
加载密钥槽并获取对该槽的访问权限。
1.4.5 密钥包装与安全注入
打开密钥槽:加载已存储的 KEK 和待注入密钥的密钥槽。 创建密钥包装上下文:使用加密算法创建包装上下文。 准备待注入的密钥:将待注入的密钥数据准备好。 密钥注入:通过 ImportSecuredObject 接口将解密后的密钥注入到目标密钥槽。
1.5 对称加密与解密
密钥生成:生成一个对称密钥。
数据加密:使用对称密钥对明文数据进行加密,生成密文。
数据传输:将密文传输给接收方。
数据解密:接收方使用相同的对称密钥对密文进行解密,恢复出明文。
1.5.1 对称加密
1.5.2 对称解密
1.6 非对称加密和解密
密钥对生成:生成一对密钥,包括公钥和私钥。
数据加密:发送方使用接收方的公钥对明文数据进行加密,生成密文。
数据传输:将密文传输给接收方。
数据解密:接收方使用自己的私钥对密文进行解密,恢复出明文。
1.6.1 非对称加密
1.6.2 非对称解密
1.6.3 对称加密与非对称加密对比
速度:对称加密速度快,适合大数据量加密;非对称加密速度较慢,适合小数据量加密和密钥交换。
安全性:非对称加密安全性更高,因为公钥可以公开,而私钥保密。
应用场景:对称加密常用于数据传输的加密;非对称加密常用于密钥交换、数字签名和身份验证。
1.7 数字签名
数字签名是一种数字消息的认证方案,通常基于非对称加密。以下步骤展示了如何签署消息以及如何验证其真实性。本示例使用 ED25519方案。在此之前,需要生成密钥。