0%

HSM 作用

full hsm

包含两个部分:

  1. Security building blocks负责加密/解密的硬件操作;
  2. Logical building blocks负责与Application ECU交互数据以及软件的加密/解密操作;

HSM 最重要的作用是安全边界, 和trustzone的机制类似, 提供安全的物理隔离能力, 安全rom和安全ram 无法被外部cpu 访问, 即使外部cpu 环境被破解, 也能保证hsm 运行的内容无法被探知. 当前的hsm产品中大多是过了FIPS 140-2 level3 标准的.

密钥存储/派生/权限管控/交换机制处于hsm内部(授信环境), 密钥存于安全rom或安全ram中, 无法被外部拿到.

与 只有硬件安全ip 加 otp 方案的对比

  1. 该方案密钥即使可以通过otp 管控密钥无法被外界拿到, 但也存在无法灵活配置, 很难做到密钥派生/密钥交换类似的需求, 在main域或其他域上的密钥更换是非常频繁的, 频繁的更换密钥能够保证前向安全(即如果密钥被泄露, 那hack 监听到的以往的数据都会变得不再安全)和重放攻击等. 比如https中使用的ssl/tls 加密机制, 每次建立连接后都是使用的新的密钥
  2. 芯片的安全ip采用的算法往往是对外公开的, 没有秘密可言. 相当于说是这种方案其实只有硬解加速的作用, 一旦密钥被探知, 那整个安全链路系统是非常脆弱的.
  3. hsm上执行的程序, 中间过程会锁在安全rom 安全ram内, 这种hsm 上跑的软件上层的机制其实也是安全的. 而只有安全ip的方案, 无论是做驱动还是什么都可以被探知破解.

HSM在智能汽车中应用的场景

阅读全文 »

基础概念

V2X

V2X(Vehicle to X)通信:表示车与X通信,X可以是车(Vehicle)、路(Road)或者其他相关基础设施,相应地也就有了V2V(Vehicle to Vehicle,车与车通信)、V2I(Vehicle to Infrastructure,车与基础设施如道路、服务器等通信)、V2P(Vehicle to Pedestrian,汽车与行人通信)等概念。V2X的典型应用有左转辅助、紧急刹车提示、闯红灯警告、过弯速度警告、施工路段提醒、实时天气信息提醒等。

高级辅助驾驶系统

高级辅助驾驶系统(ADAS,Advanced Driver Assistance System):ADAS是在驾驶过程中辅助驾驶员的系统,它的功能包括安全告警功能、自适应控制功能、信息提示功能等,可在通过传感器检测到可能的危险时对驾驶员发出告警或者接管汽车某些控制功能(比如紧急刹车功能),以及根据环境自动对汽车的某些功能进行控制,比如根据环境亮度自动调节车灯亮度、自适应巡航控制、盲点警告、自动变道等。ADAS 技术通常依赖于各种传感器和通信技术,例如依赖雷达或者摄像头检测与前车的距离,依赖V2V获取附近车辆信息,依赖摄像头检测车道等。

自动驾驶级别

汽车网络安全

阅读全文 »

PCI 设备驱动

PCI(Periheral Component Interconnect)有三种地址空间:PCI I/O空间、PCI内存地址空间和PCI配置空间

  • PCI I/O空间和PCI内存地址空间由设备驱动程序(设备本身驱动)使用
  • PCI配置空间由Linux PCI初始化代码使用,这些代码用于配置PCI设备,比如中断号以及I/O或内存基地址

PCI设备驱动就是要大致描述对于PCI设备驱动

  • Linux内核都帮我们做了什么(主)
  • 我们应该完成什么(次)。

Linux内核做了什么

Linux内核主要就做了对PCI设备的枚举配置;这些工作都是在Linux内核初始化时完成的。

PCI桥主要包括以下三种:

  1. Host/PCI桥

    用于连接CPU与PCI根总线,第1个根总线的编号为0。在PC中,内存控制器也通常被集成到Host/PCI桥设备芯片中,因此Host/PCI桥通常也被称为“北桥芯片组(North Bridge Chipset)”。

  2. PCI/ISA桥

    用于连接旧的ISA总线。通常,PCI中类似i8359A中断控制器这样的设备也会被集成到PCI/ISA桥设备中。因此,PCI/ISA桥通常也被称为“南桥芯片组(South Bridge Chipset)”

  3. PCI-to-PCI桥(以下称为PCI-PCI桥):

    用于连接PCI主总线(Primary Bus)和次总线(Secondary Bus)。PCI-PCI桥所处的PCI总线称为主总线,即次总线的父总线;PCI-PCI桥所连接的PCI总线称为次总线,即主总线的子总线。

image-20240416112936826

阅读全文 »

HSM 规范

HSM是一种自主的硬件,可以用于车辆安全信息(比如密钥)的生成,存贮以及处理,且隔离外部恶意软件的攻击。

HSM可以用于构建,验证可靠的软件,以保护在软件加载并初次访问之前的安全启动。HSM包含有加密/解密硬件加速功能,和软件解决方案相比(Cry),能够有效降低CPU负载。

包含两个部分:

  1. Security building blocks负责加密/解密的硬件操作;
  2. Logical building blocks负责与Application ECU交互数据以及软件的加密/解密操作;

hsm 等级

full hsm

full hsm

  • ECC-256:256位高速ECC椭圆加密算法引擎;
  • Whirlpool: AES Hash算法;
  • AES-128:标准AES加密/解密算法;
  • PRNG with TRNG seed:真伪随机数生成器;

Medium hsm

阅读全文 »

Software virtualization

​ 虚拟化是一种软件安全机制,其中一个高度可信的管理层,称为虚拟机管理程序,以通用处理器的特权模式运行。 管理程序将在其顶部的多个独立软件平台分开使用内存管理单元(MMU),将每个内存置于由管理程序软件控制的虚拟机内部。

弊端

​ 虚拟化技术提供的隔离仅限于实现管理程序的处理器。系统中的任何其他总线上主控,如DMA引擎和GPU,都可以绕过hypervisor提供的保护,因此也必须由hypervisor管理,以执行所需的安全策略。这很难在不损害系统性能的情况下实现; 在不降低图形性能的情况下验证可编程GPU的复杂输入超出了大多数虚拟化解决方案的范围。

​ 虚拟化忽略与硬件攻击相关的安全问题,例如使用调试或测试基础设施的威胁。为了保护虚拟系统免受这种攻击,需要完全禁用调试和测试可见性,这使得软件开发和缺陷诊断非常困难。

TrustZone技术对资源隔离的实现

​ ARM处理器核的虚拟化和资源隔离是TrustZone实现安全需求的根本。支持TrustZone的处理器核具有虚拟化,也即将一个物理核分成安全状态和非安全状态。当处理器处于非安全状态时,只能访问属于非安全的外设和内存,而不能访问安全的资源;当处理器处于安全态时,处理器既可以访问安全资源,也可以访问非安全的资源,只有当处理器核为安全世界状态时才可能发出PROT的安全访问信号。

中断源的隔离

​ 在原来的ARM芯片中,使用VIC来对外部中断源进行控制和管理,支持TrustZone后,ARM提出了TZIC组件,在芯片设计时,该组件作为一级中断源控制器,控制所有的外部中断源,通过编程TZIC组件的相关寄存器来设定哪个中断源为安全中断源FIQ,而未被设定的中断源将会被传递给VIC进行处理。一般情况下VIC会将接收到的中断源设定成普通中断请求(Interrupt Request,IRQ),如果在VIC中将接收到的中断源设定成FIQ,则该中断源会被反馈给TZIC组件,TZIC组件会将安全中断源送到安全世界状态中进行处理。

片上RAM和片上ROM的隔离

阅读全文 »

证书和签名制作过程

真正的签名image hash的key是最底层的⼀把key,这个key在每次签名的时候都会随机⽣成,即使是同⼀个机型不同⽇期编出来的包,这把key都不会⼀样,取⽽代之的是,这对keypair的公钥会在服务器上被attestation key签发⼀个证书,⽽attestation privatekey⼜是被rootkey签发的,形成⼀套证书链校验,这样的好处是OEM和⾼通可以灵活的控制签名的流程,⽐如ODM就不能和OEM拥有同⼀个key,但是每个机型都重新⽣成fuse⼜显得⼗分冗余和难以维护,这样的解决⽅案会显得更加灵活可以在不变更fuse的情况下,允许secureboot有多位参与者 001

服务器会调⽤openssl进⾏签名,具体的流程是,服务器上已经有了固定的rootkey和attestation key以及相应的证书,签名过程中会随机⽣成⼀把attesst key,并且使⽤attestationkey进⾏签名颁发证书,最后使⽤这把随机⽣成的attestkey对⽂件的hash进⾏签名,最后把签名以及三份证书已经签名传回客户端 001

三份证书和签名返回客户端并按照既定格式组装到未签名的⽂件中,形成签名⽂件.最后覆盖源⽂件 001

签名流程图

阅读全文 »

本文由 简悦 SimpRead 转码, 原文地址 kernel.meizu.com

在面试的时候我们常常被问及一个问题:几种中断下半部机制 softirq、tasklet、workqueue 有什么区别?Linux 为什么要设计这几种机制?真正能够回答清楚的人还是少数的。

在面试的时候我们常常被问及一个问题:几种中断下半部机制 softirq、tasklet、workqueue 有什么区别?Linux 为什么要设计这几种机制?真正能够回答清楚的人还是少数的。下面我们就详细分析一下这其中的区别。

本文的代码分析基于 Linux kernel 3.18.22 和 arm64 架构,最好的学习方法还是 “RTFSC”

  1. Linux 中断

arm64 和其他所有 CPU 架构的中断处理流程都是一样:正常执行流程被打断进入中断服务程序,保护现场、处理中断、恢复现场:

中断处理 1

在整个中断处理过程中,arm64 的 CPU 全局中断是自动 disable 的 (PSTATE 寄存器中的 interrupt bit 被 masks)。如果用户想支持 interrupt nested,需要自己在中断服务程序中使能中断。Linux 现在是不使用中断嵌套的。

“ 中断嵌套处理 “ 中断嵌套处理 1

阅读全文 »

多个信任根:允许具有不同访问权限的多个实体共享芯片,同时每个实体都有自己的 “虚拟 “安全核心和私有安全域。

分层安全:加强对加密模块和其他安全资源的访问。确保关键密钥只能通过硬件获得,不能通过软件访问。

隔离操作:在远离通用处理的专用安全执行域中执行广泛的安全功能

目的性强:从根本上为安全而设计。具有最先进的防篡改和安全技术,包括抵抗侧信道和故障注入攻击。

Sharing a Root of Trust is Potentially Risky

一旦进入安全域,一个应用程序被认为是安全的。但如果一个应用程序实际上是恶意的呢?- 该应用程序可能会感染其他人,窃取信息,并将敏感信息暴露给恶意的一方
在一个单一的信任根内,一方的恶意程序可以访问另一方的敏感信息

multi roots of trust

Multiple Roots of Trust 041

相比之下,多个root key可允许不同的实体,如芯片供应商、OEM和服务提供商在同一芯片中拥有自己的 “虚拟 “安全核心,但每个都有一个私有安全域。
每个实体都拥有其签名的应用程序集。当处理器切换应用程序时,所有的上下文都会从处理器中刷新。默认情况下,没有数据、密钥或其他信息持续存在,确保实体之间不共享上下文
密钥被分配给每个根,允许应用程序在每个根中以不同的方式进行签名。

阅读全文 »

md5

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hash value)

1996年后被证实存在弱点,可以被加以破解,对于需要高度安全性的资料,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞攻击,因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

缺陷

2009年,中国科学院的谢涛和冯登国仅用了220.96的碰撞算法复杂度,破解了MD5的碰撞抵抗,该攻击在普通计算机上运行只需要数秒钟[3]。2011年,RFC 6151 禁止MD5用作密钥散列消息认证码

sha

  • **SHA-0**:1993年发布,当时称做安全散列标准(Secure Hash Standard),发布之后很快就被NSA撤回,是SHA-1的前身。

  • **SHA-1**:1995年发布,SHA-1在许多安全协议中广为使用,包括TLSGnuPGSSHS/MIMEIPsec,是MD5的后继者。但SHA-1的安全性在2010年以后已经不被大多数的加密场景所接受。2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1[1]

  • **SHA-2**:2001年发布,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。SHA-2目前没有出现明显的弱点。虽然至今尚未出现对SHA-2有效的攻击,但它的算法跟SHA-1基本上仍然相似。

  • **SHA-3**:2015年正式发布,由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。

sha 家族函数对比

SHA函数对比
算法和变体 输出散列值长度
(bits)
中继散列值长度
(bits)
资料区块长度
(bits)
最大输入消息长度
(bits)
循环次数 使用到的运算符 碰撞攻击
(bits)
性能示例[3]
(MiB/s)
MD5(作为参考) 128 128
(4 × 32)
512 无限[4] 64 And, Xor, Rot, Add (mod 232), Or ≤18
(发现碰撞)
335
SHA-0 160 160
(5 × 32)
512 264 − 1 80 And, Xor, Rot, Add (mod 232), Or <34
(发现碰撞)
-
SHA-1 160 160
(5 × 32)
512 264 − 1 80 <63[5]
(发现碰撞[6]
192
SHA-2 SHA-224
SHA-256
224
256
256
(8 × 32)
512 264 − 1 64 And, Xor, Rot, Add (mod 232), Or, Shr 112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512
(8 × 64)
1024 2128 − 1 80 And, Xor, Rot, Add (mod 264), Or, Shr 192
256
112
128
154
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5 × 5 × 64)
1152
1088
832
576
无限[7] 24[8] And, Xor, Rot, Not 112
128
192
256
-
SHAKE128
SHAKE256
d (arbitrary)
d (arbitrary)
1344
1088
min(d/2, 128)
min(d/2, 256)
-

CRC

阅读全文 »

概括

启用多核

1
2
3
scons --menuconfig
->rt-thread kenel
->Enable SMPe

开启后,RT_USING_SMP 被打开。

控制线程绑定到某个cpu上

线程管理
参考上面的控制线程, cmd 取 RT_THREAD_CTRL_BIND_CPU

1
rt_thread_control(&tid, RT_THREAD_CTRL_BIND_CPU, 1);

调度流程

初始化cpu资源


cpu1 起来后默认只有一个任务, 就是idle任务, 做的事情就是在等待,陷入到low standby模式

阅读全文 »