# docs / 09

Security

This page says plainly what chainboot protects you from, what it does not, and what you have to trust.

What you trust

You trustFor what
The publisher of an imagethat the system does what it claims. You run their software as root. This is the same trust as installing any operating system.
chainboot itself and Node.jsthat the program does what this documentation says. The source is open and small.
Your own computeryour login (encryption key and vault key) is stored on it.
Solana's cryptography (Ed25519, SHA-256)signatures and hashes cannot be forged.

What you do not have to trust

RPC endpoints. They are the only servers involved, and chainboot treats them as untrusted couriers:

An endpoint can be slow, refuse to answer, or return garbage. chainboot then asks another one. An endpoint cannot make you run different software.

One thing a single endpoint could do is show you an old state: hide the newest transactions, or list an old record as if it were the newest, so that you see an older catalog or an older save of your machine, both of which were once valid. chainboot does three things about it:

One honest, up-to-date endpoint is therefore enough to see the newest record, and since every record is checked by signature, an endpoint cannot add one. This is a reason to configure endpoints of more than one provider: with a single endpoint there is nobody to compare with.

Strangers writing under your address. The address a pointer is found under is public, and anybody can send transactions that mention it. They are never taken for yours (they are not signed by your key), but thousands of them push your own record further back in the history, which makes it slower to find; chainboot searches the newest 12,000 transactions and stops with an error beyond that, it does not conclude that you have nothing. A pointer kept in an account (chainboot accounts on) is not affected at all: nobody else can write to your account. Publishers of catalogs that others depend on should turn it on.

Pointers in accounts. A publisher or a vault may also keep its newest pointer in an account (Networks and costs). What an endpoint says about an account cannot be checked the way a transaction can, so the record in the account carries the owner's signature and names its tag: an endpoint can show an older record, as it can hide a newer transaction, but it cannot make one up or move one to another name. Anything that does not verify is ignored and the transactions are read; when your endpoints disagree on whether the account exists at all, both the account and the transactions are read and the record with the higher sequence number is taken.

The network path. Because of the above, it does not matter who can see or change the traffic between you and an endpoint, as far as integrity goes. (They can still see which data you fetch.)

What comes from other people

Three kinds of data on your computer were written by somebody else, and chainboot treats each as possibly hostile:

The publisher key

chainboot run solinux means "the image named solinux in the catalog of the official publisher address". That address is written into chainboot. chainboot run <address>/<image> names the publisher explicitly. Anyone can publish an image called solinux under their own address, but it will never be confused with another publisher's, because the address is part of the name.

When you run an image of a publisher you do not know, you are trusting a stranger with root on your computer. chainboot shows the publisher address in chainboot list <address>; check it.

A catalog depends on one key. A list (Publishing) depends on several: an image counts only when more than half of the list's publishers have the same content under the same name. Someone who steals one of the keys can then neither add a system nor swap one. What a list does not protect against is its publishers agreeing on something bad, or enough of their keys being taken at once.

Machines are not sandboxes

A machine separates processes and files for convenience, not for defence. Root inside a machine can reach your computer's network, and with some effort its files. Treat an image like any software you install.

How far root inside a machine reaches depends on how machines run on your Linux computer (chainboot engine shows it):

Running without administrator rights is the safer of the two and the default where the computer allows it. On Ubuntu it needs a small AppArmor profile that lets one program in your home directory (~/.chainboot/bin/userns, a copy of unshare) create user namespaces. Because that file is yours, the profile in effect lifts Ubuntu's restriction on user namespaces for your account; chainboot adds it only when you run chainboot engine rootless and tells you where it is.

On Windows and macOS, machines run inside the chainboot engine (a WSL distribution, a privileged container, or a Lima virtual machine). That adds a layer between a machine and your own files, but chainboot does not promise isolation there either.

Your saves

The web interface

chainboot ui starts a web server that:

Text that comes from the chain (image names and descriptions, the notes of shares) is inserted into the page as text, never as HTML.

The installers

install.sh and install.ps1 run without administrator rights and write only into your home directory. The Node.js they may download is checked against SHA-256 values written into the installer. The chainboot archive is checked against the checksum published next to it, which protects against a broken download; its authenticity rests on GitHub and HTTPS. If you want more, build from source: git clone, npm ci, npm run build.

Reporting a problem

If you find a security problem, please write to hello@chainboot.dev, or open a private security advisory on the GitHub repository, instead of a public issue.

Edit this page on GitHub