summaryrefslogtreecommitdiffstats
path: root/security-blueprint/part-8/1-FOTA.md
blob: a65a2399895541115e9ec8cba4b95002dd3fc83a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Firmware Over The Air

The firmware update is critical since its alteration back to compromise the
entire system. It is therefore necessary to take appropriate protective measures.
The principle of verifying chain integrity fulfills much of AGL's security.
During a firmware update, it is necessary to update the different signatures to
check the integrity of the system.

There is also the constraint of the update time: The system must start quickly
and therefore, update itself as quickly. We imagine that the **FOTA** is mainly
used in the vehicle maintenance session (e.g. Garage). We will then use no more
 **FOTA** but a wired update. There is a limit to what can be updated wirelessly.
 This maintenance update could solve these problems.

Field upgrades can be achieved securely by using a Secure Loader. This loader
will authenticate an incoming image (USB, Serial, Network) prior to writing it
to the flash memory on the device. It should not be possible to write to flash
from bootloader (U-Boot). Note that because USB support is to be disabled within
the sboot/U-Boot code, the board specific implementation of the Secure Loader
will have to manage the entire USB initialization, enumeration, and read/write
access to the mass storage device.

<!-- config -->

Domain        | Object                                    | Recommendations
------------- | ----------------------------------------- | ---------------
Update-FOTA-1 | Integrity, confidentiality and legitimacy | Must be secure.

<!-- endconfig -->

Different possible type of **FOTA**:

- Package-based like rpm, dpkg:

  - `+` Simple.
  - `-` Power-off.
  - `-` Dependency.

- Full file system updates:

  - `+` Robust.
  - `-` Tends device-specific.
  - `-` Need rsync or similar.

- Atomic differential:

  - `+` Robust.
  - `+` Minimal bandwidth consumption.
  - `+` Easy reusable.
  - `-` Physically one file system (Corruption -> unbootable system).
  - `-` No rollback logic.