Skip to content

Architecture

Tristan Israël edited this page Feb 22, 2026 · 7 revisions

This page describes the architecture of the security-oriented technical platform.

Design rules

The architecture of Safecor is made in respect of the design rules.

Overview of the product architecture

Overview of the product architecture

A product is composed of one ore more Domains (virtual machines) with their own application module. The modules should be designed according to their level of trust. All modules using external data (communicating with USB drives or the network for example) should be considered as not trustable and should be separated from modules that only manipulate commands and user interfaces.

The user interface graphical application (GUI) is hosted in the sys-gui Domain that has a high level of trust.

A Domain is a volatile virtual machine created on startup. The virtual machine is created, an Alpine Linux is installed and the application package and its dependencies are installed (see topology.json).

In accordance with the design rule "stateless system", a Domain only exists in memory as long as the system is running. It is re-created each time the system is started.

Detailed architecture

Detailed architecture

In the sys-gui Domain, the graphical user interface application has access to an X server whose display is rendered on a virtual graphics card provided by QEMU in the Dom0. The display of QEMU is then made in a GTK borderless window in an X server running on the real graphics card.

The integration of the product GUI is made with the section gui.app-package of the topology.json file.

Virtual Machines (Domains)

The platform includes the following virtual machines:

Name Description Trust Level
Dom0 Domain 0 is a special virtual machine used to manage user Domains and interface with the XenBus. High
sys-gui This Domain displays the product graphical interface. High
sys-usb This Domain is responsible for managing USB devices (keyboard, mouse, storage devices) and isolating them from the rest of the system. Low

Dom0

This section provides technical details about Domain 0.

Installed packages:

  • safecor-core
  • safecor-lib

This Domain is in charge of booting the whole system and orchestrating the creation and destruction of the Domains. It contains all the logic of the system that is deployed by the package safecor-core.

sys-usb

This section provides technical details about the core domain sys-usb.

Installed packages:

  • safecor-lib

The sys-usb Domain provides the following functions via a special data channel:

  • keyboard input
  • mouse position
  • mouse button states
  • touch position
  • reading the file catalog from a USB device
  • reading a file from a USB device
  • writing a file to a USB device
  • mounting a virtual storage file (ISO, vmdk, etc)

sys-gui

This section provides technical details about the core domain sys-gui.

Installed packages:

  • safecor-lib

The sys-gui Domain provides the tools to show a frontend to the user. The frontend is automatically deployed in the Domain according to the settings in the topology file.

By default, only a framebuffer is available in the Domain. If needed, an X server can be instaled and automatically configured by adding the package safecor-gui-base to the product GUI package's dependencies.

sys-net

This section provides technical details about the core domain sys-net.

This Domain is currently not available.

See also

Clone this wiki locally