<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Index on Le Site de François</title><link>https://lesitedefrancois.be/en/security/</link><description>Recent content in Index on Le Site de François</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 François</copyright><atom:link href="https://lesitedefrancois.be/en/security/index.xml" rel="self" type="application/rss+xml"/><item><title>AD (Active Directory)</title><link>https://lesitedefrancois.be/en/security/ad/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ad/</guid><description>&lt;p&gt;&lt;strong&gt;Active Directory (AD)&lt;/strong&gt; is Microsoft&amp;rsquo;s enterprise directory and identity platform, first released with Windows 2000 and now the dominant identity provider in enterprise environments worldwide. It combines four technologies into a single integrated system: &lt;strong&gt;LDAP&lt;/strong&gt; as the directory access protocol for querying and modifying identity data; &lt;strong&gt;Kerberos 5&lt;/strong&gt; as the authentication protocol for issuing tickets that prove identity without transmitting passwords; &lt;strong&gt;DNS&lt;/strong&gt; as the service location mechanism that clients use to discover domain controllers, Kerberos KDCs, and LDAP servers; and &lt;strong&gt;Group Policy&lt;/strong&gt; as the configuration management system that pushes security settings, software installation, and policy enforcement to every joined machine. These four components are inseparable in practice: a Linux host joining an AD domain receives a Kerberos principal in AD&amp;rsquo;s KDC, a machine account object in the AD LDAP directory, a DNS record for its hostname, and (optionally) Group Policy Objects applied to it. The AD forest is the trust boundary: multiple domains can exist within a forest and all share a common schema, configuration, and Global Catalog, with transitive Kerberos trust between them.&lt;/p&gt;</description></item><item><title>AES (Advanced Encryption Standard)</title><link>https://lesitedefrancois.be/en/security/aes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/aes/</guid><description>&lt;p&gt;&lt;strong&gt;AES (Advanced Encryption Standard)&lt;/strong&gt;, standardised as NIST FIPS 197 in 2001, is the symmetric block cipher that underlies virtually all data encryption in modern infrastructure. It was selected through a five-year open competition that evaluated 15 candidate algorithms; the winner, &lt;strong&gt;Rijndael&lt;/strong&gt; (designed by Joan Daemen and Vincent Rijmen), became AES. A block cipher takes a fixed-size block of plaintext and a key and produces a fixed-size block of ciphertext — AES always operates on &lt;strong&gt;128-bit (16-byte) blocks&lt;/strong&gt;, regardless of key size. Three key lengths are standardised: &lt;strong&gt;AES-128&lt;/strong&gt; (128-bit key, 10 rounds), &lt;strong&gt;AES-192&lt;/strong&gt; (192-bit key, 12 rounds), and &lt;strong&gt;AES-256&lt;/strong&gt; (256-bit key, 14 rounds), providing 128, 192, and 256 bits of security respectively against classical attacks. AES-256 is the conservative choice for data with long confidentiality requirements and is mandated by CNSA 2.0 for national security systems; AES-128 is widely deployed in TLS and provides adequate security for most workloads. The internal structure — SubBytes, ShiftRows, MixColumns, AddRoundKey — is fully public and has withstood over two decades of cryptanalysis; the best known attacks against full-round AES are theoretical and computationally infeasible, requiring work far beyond brute force but not threatening practical security.&lt;/p&gt;</description></item><item><title>AIDE (Advanced Intrusion Detection Environment)</title><link>https://lesitedefrancois.be/en/security/aide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/aide/</guid><description>&lt;p&gt;&lt;strong&gt;AIDE (Advanced Intrusion Detection Environment)&lt;/strong&gt; is a host-based intrusion detection tool that implements &lt;strong&gt;file integrity monitoring (FIM)&lt;/strong&gt;: it builds a baseline database capturing cryptographic hashes and metadata for every file it is configured to watch, and on subsequent runs compares the live filesystem against that database, reporting anything that has been added, removed, or changed. Its security premise is detection after the fact: AIDE does not prevent modifications (that is the role of &lt;strong&gt;fapolicyd&lt;/strong&gt;, &lt;strong&gt;SELinux&lt;/strong&gt;, and &lt;strong&gt;IMA&lt;/strong&gt;), but it provides a reliable, auditable record that modifications occurred, when a check was run, and which specific attributes changed. An attacker who compromises a system and modifies a binary, a configuration file, a cron job, or an SSH &lt;code&gt;authorized_keys&lt;/code&gt; file will leave a fingerprint in the next AIDE check — provided the database has not also been compromised, which is the central operational concern the tool&amp;rsquo;s deployment model must address.&lt;/p&gt;</description></item><item><title>AppArmor (Application Armor)</title><link>https://lesitedefrancois.be/en/security/apparmor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/apparmor/</guid><description>&lt;p&gt;&lt;strong&gt;AppArmor (Application Armor)&lt;/strong&gt; is a &lt;strong&gt;Mandatory Access Control (MAC)&lt;/strong&gt; system implemented as a major &lt;strong&gt;LSM&lt;/strong&gt; (Linux Security Module), developed originally by Immunix and now maintained by Canonical. It is the default MAC system on Ubuntu, Debian, and their derivatives, and the default container confinement mechanism for containerd and Docker on those distributions. Where &lt;strong&gt;SELinux&lt;/strong&gt; assigns security labels to every object on the system and enforces policy based on label interactions, AppArmor takes a fundamentally different approach: it confines programs by &lt;strong&gt;filesystem path&lt;/strong&gt;. A profile for &lt;code&gt;nginx&lt;/code&gt; lists the specific file paths that nginx is allowed to read, write, and execute, the network operations it may perform, and the Linux capabilities it may use — anything not listed is denied. No relabelling of the filesystem is required and no extended attributes are set: AppArmor&amp;rsquo;s confinement decisions are made purely from the path of the file being accessed and the identity of the confined process. This path-based model makes AppArmor profiles far simpler to read, write, and audit than SELinux policy, and eliminates the mislabelled-file failure mode that is the most common SELinux operational problem.&lt;/p&gt;</description></item><item><title>Bastion Host (Jump Server)</title><link>https://lesitedefrancois.be/en/security/bastion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/bastion/</guid><description>&lt;p&gt;A &lt;strong&gt;bastion host&lt;/strong&gt; (also called a jump server or jump host) is a hardened server placed at the boundary between a public network and a protected private network, through which all administrative access to internal systems must pass. Rather than exposing every server, database, or network device directly to the internet or to operator workstations, the network is designed so that only the bastion host has a publicly reachable address; internal systems accept SSH or RDP connections only from the bastion&amp;rsquo;s IP. An administrator who needs to reach an internal host connects first to the bastion — authenticating with a key, certificate, or MFA — and then hops onward to the target from there. The bastion&amp;rsquo;s narrow exposure makes it a concentrated target, which is why it receives disproportionate hardening: a minimal OS with only the necessary services running, strict firewall rules, aggressive patch cadence, and comprehensive session logging. The name comes from military fortification: a bastion is a protruding element of a castle wall designed to be defended at all costs.&lt;/p&gt;</description></item><item><title>bootc (Bootable Containers)</title><link>https://lesitedefrancois.be/en/security/bootc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/bootc/</guid><description>&lt;p&gt;&lt;strong&gt;bootc&lt;/strong&gt; is a CNCF sandbox project, created by Colin Walters, that applies the OCI container model to operating system delivery. Where conventional container images package an application to run inside a host OS, a bootc image packages the entire OS — kernel (under &lt;code&gt;/usr/lib/modules&lt;/code&gt;), initrd, systemd units, firmware, and all userspace — as a standard &lt;strong&gt;OCI&lt;/strong&gt; image that can be built with &lt;code&gt;podman build&lt;/code&gt; or &lt;code&gt;buildah&lt;/code&gt;, stored in any OCI-conformant registry, signed with standard supply chain tools, and pulled to a machine where it becomes the running system. At runtime the base OS is not running inside a container; systemd is pid 1 as usual. The container image format is purely a transport and build model, not an execution model.&lt;/p&gt;</description></item><item><title>Break-Glass User (Emergency Access Account)</title><link>https://lesitedefrancois.be/en/security/break-glass/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/break-glass/</guid><description>&lt;p&gt;A &lt;strong&gt;break-glass user&lt;/strong&gt; (or break-glass account, emergency access account) is a privileged account that exists outside the normal access control workflow — bypassing &lt;strong&gt;PAM&lt;/strong&gt; approval gates, MFA requirements, or SSO dependencies — and is reserved for situations where those normal mechanisms are themselves unavailable or would prevent responding to a critical incident in time. The name is a physical analogy: like the fire alarm panel behind a pane of glass that reads &lt;em&gt;break glass in emergency&lt;/em&gt;, the account is designed so that accessing it requires a deliberate, detectable act. It is not a convenience mechanism; it is an organisational safety net for scenarios such as an identity provider outage locking all administrators out of their own infrastructure, a PAM platform failing during an active incident, or a ransomware attack disabling the tooling needed to contain it.&lt;/p&gt;</description></item><item><title>cert-manager</title><link>https://lesitedefrancois.be/en/security/cert-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/cert-manager/</guid><description>&lt;p&gt;&lt;strong&gt;cert-manager&lt;/strong&gt; is a CNCF graduated project that brings &lt;strong&gt;PKI&lt;/strong&gt; lifecycle management into Kubernetes as a first-class controller, eliminating the manual processes — CSR generation, CA submission, secret rotation, renewal tracking — that cause certificate-related outages in clusters that manage TLS manually. Its premise is that &lt;strong&gt;X.509&lt;/strong&gt; certificates should be declared as Kubernetes resources with the same GitOps-friendly, reconciliation-driven lifecycle as any other workload configuration: an operator declares the desired certificate, cert-manager continuously ensures that a valid, non-expired certificate matching that declaration exists and is stored in a Kubernetes &lt;code&gt;Secret&lt;/code&gt;, and renews it automatically before expiry. The default renewal threshold is two-thirds of the certificate&amp;rsquo;s validity period, so a certificate with a 90-day lifetime is renewed at 60 days without operator intervention.&lt;/p&gt;</description></item><item><title>cgroups (Control Groups) v2</title><link>https://lesitedefrancois.be/en/security/cgroups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/cgroups/</guid><description>&lt;p&gt;&lt;strong&gt;Control Groups (cgroups)&lt;/strong&gt; is a Linux kernel mechanism, introduced in 2.6.24 (2008), that organises processes into a hierarchy of named groups and uses &lt;strong&gt;controllers&lt;/strong&gt; to account for and limit each group&amp;rsquo;s consumption of CPU time, memory, I/O bandwidth, and process count. Every container runtime in existence — Docker, containerd, CRI-O, Podman — uses cgroups to enforce the resource limits declared in a container spec (&lt;code&gt;--memory&lt;/code&gt;, &lt;code&gt;--cpus&lt;/code&gt;, &lt;code&gt;requests.memory&lt;/code&gt;, &lt;code&gt;limits.cpu&lt;/code&gt;). Every systemd service on a modern Linux system runs in its own cgroup slice. Without cgroups, a container or service could consume all available memory, CPU, or file descriptors, starving other workloads on the same host. The current production version is &lt;strong&gt;cgroups v2&lt;/strong&gt; (also written cgroupv2, unified hierarchy), stable since kernel 4.5 and the default on all major distributions since RHEL 9, Ubuntu 21.10, and Fedora 31.&lt;/p&gt;</description></item><item><title>composefs</title><link>https://lesitedefrancois.be/en/security/composefs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/composefs/</guid><description>&lt;p&gt;&lt;strong&gt;composefs&lt;/strong&gt; is a Linux filesystem technology created by Alexander Larsson and Giuseppe Scrivano at Red Hat that provides cryptographically verified, read-only filesystem trees with opportunistic file-level sharing across images. Its motivating problem is a gap that neither &lt;strong&gt;dm-verity&lt;/strong&gt; nor plain &lt;strong&gt;overlayfs&lt;/strong&gt; fills cleanly: dm-verity provides strong integrity over a whole block device but requires a self-contained disk image and cannot share files between images; overlayfs allows layered, shared filesystems but protects only file contents (via &lt;strong&gt;fs-verity&lt;/strong&gt;) and not the directory structure or metadata — an attacker who can manipulate a file&amp;rsquo;s name, permissions, or position in the tree is not caught. composefs closes that gap by separately protecting content and metadata, then composing them at mount time.&lt;/p&gt;</description></item><item><title>Confidential Cluster</title><link>https://lesitedefrancois.be/en/security/confidential-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/confidential-cluster/</guid><description>&lt;p&gt;A &lt;strong&gt;Confidential Cluster&lt;/strong&gt; is a Kubernetes cluster designed so that the cloud or infrastructure operator — including hypervisor administrators, datacenter staff, and anyone who can access the underlying hardware — is entirely outside the trusted computing base. It achieves this by running every Kubernetes node, including control plane nodes, as a &lt;strong&gt;Confidential VM&lt;/strong&gt;, and by extending the confidential boundary to cover not just individual workloads but the cluster&amp;rsquo;s network traffic, persistent storage, and control plane state. The goal is that a workload owner can cryptographically verify the entire cluster before trusting it, and that no privileged party outside the cluster&amp;rsquo;s own CVMs can read or tamper with workload data, cluster secrets, or etcd contents.&lt;/p&gt;</description></item><item><title>Confidential Containers (CoCo)</title><link>https://lesitedefrancois.be/en/security/coco/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/coco/</guid><description>&lt;p&gt;&lt;strong&gt;Confidential Containers (CoCo)&lt;/strong&gt; is a CNCF sandbox project that lifts hardware confidential computing — &lt;strong&gt;TDX&lt;/strong&gt;, &lt;strong&gt;SEV-SNP&lt;/strong&gt;, Intel SGX, IBM Secure Execution — up to the Kubernetes pod level, providing a unified software layer that abstracts away the underlying TEE technology. Its defining trust model is unusually strict: the Kubernetes control plane, the kubelet, the container runtime, and the cloud operator are all treated as &lt;strong&gt;explicitly untrusted&lt;/strong&gt;. Only the hardware itself and the workload owner&amp;rsquo;s own supply chain are in scope for trust.&lt;/p&gt;</description></item><item><title>Confidential GPU</title><link>https://lesitedefrancois.be/en/security/confidential-gpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/confidential-gpu/</guid><description>&lt;p&gt;A &lt;strong&gt;Confidential GPU&lt;/strong&gt; is a GPU whose memory, computation state, and data transfers are hardware-encrypted and isolated from the host system — extending the Trusted Execution Environment (TEE) boundary that technologies like TDX and SEV-SNP provide at the CPU level to encompass the GPU accelerator as well. The primary implementation today is &lt;strong&gt;NVIDIA Confidential Computing&lt;/strong&gt; on the &lt;strong&gt;Hopper architecture&lt;/strong&gt; (H100 and later), which encrypts all data resident in GPU High Bandwidth Memory (HBM) using per-context keys managed by the GPU&amp;rsquo;s on-die security processor. This means that model weights, training data, activations, and intermediate computations are cryptographically protected throughout GPU processing — a host administrator, hypervisor, or co-tenant with DMA access to the PCIe bus sees only ciphertext. The GPU also participates in a dedicated attestation flow: the &lt;strong&gt;NVIDIA Remote Attestation Service (NRAS)&lt;/strong&gt; produces signed evidence that a specific GPU is genuine NVIDIA hardware running in Confidential Computing mode with unmodified firmware, analogous to how Intel DCAP or AMD KDS attest CPU TEEs. This GPU attestation is verified alongside CPU attestation before secrets (model decryption keys, dataset credentials) are released to the combined CPU+GPU TEE. The technology requires no application code changes — existing TensorFlow, PyTorch, and CUDA workloads run unmodified inside the confidential boundary. The primary threat model is the same as CPU-level confidential computing (protecting data-in-use from the infrastructure operator) but applied to the specific risk of AI workloads: model intellectual property theft, training data exfiltration, and inference input/output interception during GPU computation.&lt;/p&gt;</description></item><item><title>Confidential VM (CVM)</title><link>https://lesitedefrancois.be/en/security/confidential-vm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/confidential-vm/</guid><description>&lt;p&gt;A &lt;strong&gt;Confidential VM (CVM)&lt;/strong&gt; is a virtual machine in which the guest&amp;rsquo;s memory contents, CPU register state, and execution flow are hardware-encrypted and isolated from everything outside it: the hypervisor, the host operating system, the cloud operator, other tenants, and anyone with physical access to the machine. The isolation is enforced not by software policy but by the CPU itself, using TEE technology — &lt;strong&gt;Intel TDX&lt;/strong&gt;, &lt;strong&gt;AMD SEV-SNP&lt;/strong&gt;, or Arm CCA — so that no amount of privilege on the host side grants access to the guest&amp;rsquo;s private state. A CVM is the VM-granularity equivalent of what SGX enclaves provide at the process level: the key difference is that a CVM requires no application changes, making it the practical path for lifting existing workloads into a confidential computing environment.&lt;/p&gt;</description></item><item><title>CRL (Certificate Revocation List)</title><link>https://lesitedefrancois.be/en/security/crl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/crl/</guid><description>&lt;p&gt;&lt;strong&gt;A Certificate Revocation List (CRL)&lt;/strong&gt; is a signed data structure, published by a &lt;strong&gt;Certificate Authority&lt;/strong&gt; as part of its &lt;strong&gt;PKI&lt;/strong&gt; operations, that lists the serial numbers of &lt;strong&gt;X.509&lt;/strong&gt; certificates the CA has revoked before their scheduled expiry date. A CA revokes a certificate when its private key is compromised, the subject&amp;rsquo;s identity information changes, the certificate was mis-issued, or the subject is no longer authorised. Without revocation, a compromised certificate remains trusted by all verifiers until it expires — which for long-lived CA and infrastructure certificates can be years. The CRL is the oldest revocation mechanism, defined in RFC 5280 alongside the X.509 v3 certificate format, and remains widely deployed for CA certificates, code signing certificates, and client certificates in contexts where &lt;strong&gt;OCSP&lt;/strong&gt; is impractical.&lt;/p&gt;</description></item><item><title>CVSS (Common Vulnerability Scoring System)</title><link>https://lesitedefrancois.be/en/security/cvss/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/cvss/</guid><description>&lt;p&gt;&lt;strong&gt;CVSS (Common Vulnerability Scoring System)&lt;/strong&gt; is an open framework published by FIRST (Forum of Incident Response and Security Teams) for characterising and communicating the technical severity of software vulnerabilities through a standardised numerical score. The current version is &lt;strong&gt;CVSS v4.0&lt;/strong&gt; (released November 2023), which introduced a fourth metric group and clarified nomenclature to address the persistent misuse of CVSS Base scores as standalone risk measurements. CVSS scores appear in the NVD (National Vulnerability Database), CVE entries, scanner output from Qualys, Tenable, Rapid7, Grype, and Trivy, and in compliance frameworks that specify remediation SLAs based on severity bands — &amp;ldquo;critical (9.0–10.0) within 15 days, high (7.0–8.9) within 30 days.&amp;rdquo; The score ranges from 0.0 (no impact) to 10.0 (maximum severity) and maps to five qualitative ratings: None (0.0), Low (0.1–3.9), Medium (4.0–6.9), High (7.0–8.9), and Critical (9.0–10.0).&lt;/p&gt;</description></item><item><title>Diffie-Hellman (DH / ECDH / X25519)</title><link>https://lesitedefrancois.be/en/security/diffie-hellman/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/diffie-hellman/</guid><description>&lt;p&gt;&lt;strong&gt;Diffie-Hellman (DH)&lt;/strong&gt; is a key exchange protocol published by Whitfield Diffie and Martin Hellman in 1976 — the first public description of asymmetric cryptography and one of the most consequential cryptographic publications in history. Its fundamental contribution is solving the &lt;strong&gt;key establishment problem&lt;/strong&gt;: two parties who have never communicated before, communicating over a channel that an adversary can fully observe, can nonetheless agree on a shared secret that the adversary cannot determine. The security of finite-field DH rests on the &lt;strong&gt;discrete logarithm problem&lt;/strong&gt;: given &lt;code&gt;g^a mod p&lt;/code&gt; and &lt;code&gt;g^b mod p&lt;/code&gt; (the public values exchanged), computing &lt;code&gt;g^ab mod p&lt;/code&gt; (the shared secret) requires solving for either &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;b&lt;/code&gt;, which is computationally infeasible for sufficiently large groups. The 1976 original uses multiplicative groups of integers modulo a prime &lt;code&gt;p&lt;/code&gt;; the security level is determined by the size of &lt;code&gt;p&lt;/code&gt; (currently 2048-bit minimum, 3072-bit recommended) and the group&amp;rsquo;s structure. &lt;strong&gt;Finite-field DH&lt;/strong&gt; is still deployed in TLS 1.2 &lt;code&gt;DHE&lt;/code&gt; cipher suites and legacy IPsec configurations, but has been supplanted in new deployments by &lt;strong&gt;Elliptic Curve Diffie-Hellman (ECDH)&lt;/strong&gt; and specifically by &lt;strong&gt;X25519&lt;/strong&gt;, which provide equivalent security at dramatically smaller key sizes.&lt;/p&gt;</description></item><item><title>dm-verity</title><link>https://lesitedefrancois.be/en/security/dm-verity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/dm-verity/</guid><description>&lt;p&gt;&lt;strong&gt;dm-verity&lt;/strong&gt; is a Linux device mapper target, available since kernel 3.4, that provides &lt;strong&gt;transparent read-only integrity verification&lt;/strong&gt; for block devices. When a block device is mapped through dm-verity, every data block read from the underlying device is verified against a pre-computed &lt;strong&gt;Merkle tree&lt;/strong&gt; of cryptographic hashes before being returned to the caller — any modification to any block, whether from corruption, bit rot, or deliberate tampering, produces a hash mismatch that dm-verity detects and handles according to its configured error mode. The verification is transparent to the filesystem and applications mounted above it: they read from the dm-verity device as if it were a normal block device, with no awareness that every read is being hash-checked. The security guarantee is that the integrity of the entire block device is committed to by a single &lt;strong&gt;root hash&lt;/strong&gt; — a 32-byte SHA-256 value that covers the entire Merkle tree and therefore the entire data volume. If the root hash is known to be correct (because it was measured into a &lt;strong&gt;TPM&lt;/strong&gt; PCR, embedded in a &lt;strong&gt;UKI&lt;/strong&gt;, or signed by a &lt;strong&gt;Secure Boot&lt;/strong&gt; key), then any verified read from the dm-verity device is guaranteed to return exactly the data that was present when the Merkle tree was computed.&lt;/p&gt;</description></item><item><title>eBPF (Extended Berkeley Packet Filter)</title><link>https://lesitedefrancois.be/en/security/ebpf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ebpf/</guid><description>&lt;p&gt;&lt;strong&gt;eBPF (Extended Berkeley Packet Filter)&lt;/strong&gt; is a Linux kernel subsystem, its modern form dating to kernel 3.18 (2014), that allows user-authored programs to run inside the kernel with near-native performance, subject to safety guarantees enforced at load time by a &lt;strong&gt;verifier&lt;/strong&gt;. The name is historical: the original BPF (Berkeley Packet Filter, 1992) was a narrow packet filtering mechanism for tools like &lt;code&gt;tcpdump&lt;/code&gt;. eBPF extended the instruction set, registers, and capabilities far beyond packet filtering into a general-purpose in-kernel programmability platform. The central design constraint is that eBPF programs must be provably safe: they cannot crash the kernel, loop infinitely, or access memory out of bounds. The verifier statically analyses every program at load time, checking that all memory accesses are bounds-checked, all loops are bounded or unrolled, and all pointer dereferences are preceded by null checks. Only programs that pass verification are accepted; once accepted, the kernel JIT-compiles the eBPF bytecode to native machine code for the host architecture — x86-64, ARM64, RISC-V — so eBPF programs run at the same speed as compiled kernel code, not as an interpreter.&lt;/p&gt;</description></item><item><title>ECC (Elliptic Curve Cryptography)</title><link>https://lesitedefrancois.be/en/security/ecc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ecc/</guid><description>&lt;p&gt;&lt;strong&gt;Elliptic Curve Cryptography (ECC)&lt;/strong&gt; is a family of public-key cryptographic algorithms built on the mathematics of elliptic curves over finite fields. Its security rests on the &lt;strong&gt;Elliptic Curve Discrete Logarithm Problem (ECDLP)&lt;/strong&gt;: given a public point &lt;code&gt;Q = k × G&lt;/code&gt; on a curve (where &lt;code&gt;G&lt;/code&gt; is a fixed base point and &lt;code&gt;k&lt;/code&gt; is the private key scalar), recovering &lt;code&gt;k&lt;/code&gt; from &lt;code&gt;Q&lt;/code&gt; and &lt;code&gt;G&lt;/code&gt; is computationally infeasible on classical computers. The practical advantage over &lt;strong&gt;RSA&lt;/strong&gt; is dramatic key size efficiency: a 256-bit ECC key provides roughly the same classical security as a 3072-bit RSA key, because the best known classical algorithms for ECDLP (Pollard&amp;rsquo;s rho) are exponential whereas the best RSA algorithms (GNFS) are sub-exponential. This size difference has compounding benefits — smaller keys mean faster operations, smaller certificates, smaller TLS handshake messages, and lower power consumption on constrained devices. ECC is now the dominant choice for all new asymmetric cryptography deployments: TLS 1.3 mandates ECDHE for key exchange, and ECDSA or EdDSA for authentication; SSH defaults to Ed25519; code signing infrastructure increasingly uses ECDSA P-256 or Ed25519.&lt;/p&gt;</description></item><item><title>ECDSA (Elliptic Curve Digital Signature Algorithm)</title><link>https://lesitedefrancois.be/en/security/ecdsa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ecdsa/</guid><description>&lt;p&gt;&lt;strong&gt;ECDSA (Elliptic Curve Digital Signature Algorithm)&lt;/strong&gt; is the elliptic curve analogue of DSA, standardised in FIPS 186 and the IETF, that produces digital signatures using a private key and verifies them with the corresponding public key. It is the most widely deployed signature algorithm in &lt;strong&gt;X.509&lt;/strong&gt; certificates (P-256 with SHA-256 is the default for certificate authorities issuing TLS certificates), in code signing (Authenticode, macOS, Linux package signing), in TLS 1.3 certificate authentication, in SSH host keys and user keys (though Ed25519 is increasingly preferred), and in blockchain and cryptocurrency systems. An ECDSA signature over a message &lt;code&gt;m&lt;/code&gt; with private key &lt;code&gt;d&lt;/code&gt; on curve with base point &lt;code&gt;G&lt;/code&gt; produces a pair &lt;code&gt;(r, s)&lt;/code&gt;, where &lt;code&gt;r&lt;/code&gt; is the x-coordinate of an ephemeral public key &lt;code&gt;k × G&lt;/code&gt; and &lt;code&gt;s&lt;/code&gt; encodes the relationship between the message hash, &lt;code&gt;r&lt;/code&gt;, the private key &lt;code&gt;d&lt;/code&gt;, and the nonce &lt;code&gt;k&lt;/code&gt;. Verification requires only the public key &lt;code&gt;Q = d × G&lt;/code&gt; and is fast; signing requires the private key and a nonce.&lt;/p&gt;</description></item><item><title>ESO (External Secrets Operator)</title><link>https://lesitedefrancois.be/en/security/eso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/eso/</guid><description>&lt;p&gt;&lt;strong&gt;External Secrets Operator (ESO)&lt;/strong&gt; is a CNCF incubating project that bridges the gap between Kubernetes-native secrets and enterprise secret management backends. Its premise is that native Kubernetes Secrets — base64-encoded values stored in etcd — are not adequate as a primary secret store: they offer no encryption at rest by default, no access audit trail, no versioning or rotation lifecycle, and no single source of truth across multiple clusters. Rather than replacing Kubernetes Secrets as a consumption mechanism (applications still mount them as environment variables or files in the familiar way), ESO replaces etcd as their &lt;em&gt;source of authority&lt;/em&gt;, pulling the real values from a backend that does provide those properties and keeping the Kubernetes Secret as a synchronised, ephemeral projection.&lt;/p&gt;</description></item><item><title>fapolicyd (File Access Policy Daemon)</title><link>https://lesitedefrancois.be/en/security/fapolicyd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/fapolicyd/</guid><description>&lt;p&gt;&lt;strong&gt;fapolicyd (File Access Policy Daemon)&lt;/strong&gt; is an application allowlisting framework for Linux, developed by Red Hat and shipped as a supported component of RHEL 8+. Its security premise is supply-chain integrity at the execution layer: only software that was installed through a trusted package manager (DNF/RPM) or explicitly declared as trusted by an administrator may execute on the system. An attacker who achieves a foothold and drops a new binary — a reverse shell, a lateral movement tool, a cryptominer — will find that binary blocked at execution time, because it is absent from the trust database, regardless of its Unix permissions or SELinux label. fapolicyd addresses a different dimension of access control than &lt;strong&gt;SELinux&lt;/strong&gt;: SELinux models how applications behave (what resources they may access); fapolicyd models whether applications are trusted at all (whether they may execute in the first place). The two are complementary: SELinux confines a trusted application&amp;rsquo;s behaviour; fapolicyd prevents untrusted applications from running.&lt;/p&gt;</description></item><item><title>FIDO (Fast IDentity Online) / FIDO2</title><link>https://lesitedefrancois.be/en/security/fido/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/fido/</guid><description>&lt;p&gt;&lt;strong&gt;FIDO2&lt;/strong&gt; is the current generation of authentication standards produced jointly by the &lt;strong&gt;FIDO Alliance&lt;/strong&gt; and the &lt;strong&gt;W3C&lt;/strong&gt;, combining two specifications: &lt;strong&gt;WebAuthn&lt;/strong&gt; (Web Authentication API, W3C Level 3, 2025) and &lt;strong&gt;CTAP2&lt;/strong&gt; (Client to Authenticator Protocol 2, FIDO Alliance). Its defining security property is &lt;strong&gt;origin binding&lt;/strong&gt;: every FIDO2 credential is generated and used with a cryptographic binding to the specific Relying Party ID (RP ID — typically the registering domain&amp;rsquo;s origin) encoded into every authentication assertion. An authenticator will refuse to produce an assertion for &lt;code&gt;evil.com&lt;/code&gt; using a credential registered with &lt;code&gt;bank.com&lt;/code&gt;, even if the phishing site presents an identical login page and intercepts the WebAuthn call — the origin check is enforced inside the authenticator, not in JavaScript, and cannot be bypassed by a man-in-the-middle who controls the network or the browser DOM. This property is what makes FIDO2 &lt;strong&gt;phishing-resistant&lt;/strong&gt; by construction, whereas TOTP, SMS OTP, and push-notification MFA are all interceptable by a real-time phishing proxy. FIDO2 is the direct successor to FIDO U2F (Universal 2nd Factor), which provided phishing resistance as a second factor only; FIDO2 extends the model to full passwordless primary authentication.&lt;/p&gt;</description></item><item><title>firewalld</title><link>https://lesitedefrancois.be/en/security/firewalld/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/firewalld/</guid><description>&lt;p&gt;&lt;strong&gt;firewalld&lt;/strong&gt; is the firewall management daemon on RHEL, CentOS Stream, Fedora, SUSE, and their derivatives, providing a higher-level policy model and a runtime-safe management API on top of &lt;strong&gt;nftables&lt;/strong&gt; (RHEL 8+ / Fedora 32+) or iptables (older systems). Its defining feature is &lt;strong&gt;runtime versus permanent configuration&lt;/strong&gt;: firewall rule changes can be applied immediately to the running system without restarting the service or dropping existing connections (&lt;code&gt;--runtime&lt;/code&gt;, the default), and separately persisted to disk so they survive reboots (&lt;code&gt;--permanent&lt;/code&gt;). This two-phase model solves the operational problem that raw nftables or iptables rule changes traditionally required either accepting a momentary policy gap during reload or building custom transaction logic. The daemon exposes its API over &lt;strong&gt;D-Bus&lt;/strong&gt;, allowing NetworkManager, libvirt, Podman, and other system components to request firewall policy changes programmatically — when a VM is started in libvirt or a container port is published in Podman, the respective tool calls firewalld over D-Bus to open the required port rather than directly manipulating nftables rules.&lt;/p&gt;</description></item><item><title>fs-verity</title><link>https://lesitedefrancois.be/en/security/fs-verity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/fs-verity/</guid><description>&lt;p&gt;&lt;strong&gt;fs-verity&lt;/strong&gt; is a Linux kernel filesystem feature, merged in kernel 5.4, that provides &lt;strong&gt;read-only, content-addressable integrity verification at the individual file level&lt;/strong&gt;. When fs-verity is enabled on a file (via the &lt;code&gt;FS_IOC_ENABLE_VERITY&lt;/code&gt; ioctl), the kernel builds a &lt;strong&gt;Merkle tree&lt;/strong&gt; of the file&amp;rsquo;s content blocks and stores it in a filesystem-specific location (in an ext4 or f2fs Merkle tree block range, or in a separate xattr-adjacent structure on btrfs). From that point, the file becomes immutable — writes are rejected — and every page read from the file is verified against the Merkle tree before being returned to userspace. The file&amp;rsquo;s &lt;strong&gt;fs-verity digest&lt;/strong&gt; is the SHA-256 (or SHA-512) root hash of the Merkle tree, computable without reading the file at all once the tree is built: &lt;code&gt;fsverity digest file&lt;/code&gt; returns this digest. A file&amp;rsquo;s fs-verity digest is a stable, content-derived identity: two files with the same content have the same digest, and any byte-level modification produces a different digest that verification will detect and reject with &lt;code&gt;EIO&lt;/code&gt;. The kernel caches verified Merkle tree nodes in the page cache alongside file data, so the amortised verification overhead is low for sequentially-read files.&lt;/p&gt;</description></item><item><title>GRUB (GNU GRand Unified Bootloader)</title><link>https://lesitedefrancois.be/en/security/grub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/grub/</guid><description>&lt;p&gt;&lt;strong&gt;GRUB (GNU GRand Unified Bootloader)&lt;/strong&gt; is the bootloader used by the majority of Linux distributions on x86 and x86-64 systems. Its role is to bridge the gap between what firmware hands control to and what the Linux kernel needs: firmware (BIOS or UEFI) loads GRUB, and GRUB locates the kernel image and initrd on disk, assembles a kernel command line, and transfers control to the kernel. Because GRUB understands a wide range of filesystem formats — ext4, XFS, Btrfs, FAT, and more — it can read its own configuration and the kernel directly from the root or boot partition without any intermediate step, which is what distinguishes it from simpler bootloaders that can only read from FAT.&lt;/p&gt;</description></item><item><title>Hash Function (Cryptographic Hash Function)</title><link>https://lesitedefrancois.be/en/security/hash/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/hash/</guid><description>&lt;p&gt;A &lt;strong&gt;cryptographic hash function&lt;/strong&gt; maps an input of arbitrary length (a file, a certificate, a password, a block of network data) to a fixed-length &lt;strong&gt;digest&lt;/strong&gt; (also called a hash or fingerprint) with three security properties that distinguish it from non-cryptographic checksums. &lt;strong&gt;Preimage resistance&lt;/strong&gt;: given a digest &lt;code&gt;h&lt;/code&gt;, it is computationally infeasible to find any input &lt;code&gt;m&lt;/code&gt; such that &lt;code&gt;H(m) = h&lt;/code&gt;. &lt;strong&gt;Second preimage resistance&lt;/strong&gt;: given an input &lt;code&gt;m1&lt;/code&gt;, it is computationally infeasible to find a different input &lt;code&gt;m2&lt;/code&gt; such that &lt;code&gt;H(m1) = H(m2)&lt;/code&gt;. &lt;strong&gt;Collision resistance&lt;/strong&gt;: it is computationally infeasible to find any pair &lt;code&gt;(m1, m2)&lt;/code&gt; with &lt;code&gt;m1 ≠ m2&lt;/code&gt; such that &lt;code&gt;H(m1) = H(m2)&lt;/code&gt;. Collision resistance is the strongest property and implies second preimage resistance but not preimage resistance. These properties together make a hash function a one-way, tamper-evident fingerprint: two inputs that produce the same digest cannot be found by an adversary, and knowing the digest reveals nothing about the input beyond its length.&lt;/p&gt;</description></item><item><title>HMAC (Hash-based Message Authentication Code)</title><link>https://lesitedefrancois.be/en/security/hmac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/hmac/</guid><description>&lt;p&gt;&lt;strong&gt;HMAC (Hash-based Message Authentication Code)&lt;/strong&gt;, standardised in RFC 2104 (1997) and FIPS 198-1, is a construction that produces a &lt;strong&gt;Message Authentication Code (MAC)&lt;/strong&gt; by combining a cryptographic hash function with a shared secret key. A plain &lt;strong&gt;hash function&lt;/strong&gt; provides integrity — any modification to a message changes its digest — but anyone can recompute the digest of a modified message, so a hash alone cannot prove that a message came from a specific party who holds a secret. HMAC adds authenticity: only a party who knows the key &lt;code&gt;K&lt;/code&gt; can produce a valid &lt;code&gt;HMAC(K, message)&lt;/code&gt;, and only a party who knows &lt;code&gt;K&lt;/code&gt; can verify it. The construction is &lt;code&gt;HMAC(K, m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))&lt;/code&gt; — two rounds of hashing with the key XOR&amp;rsquo;d against inner and outer padding constants — a design chosen to be provably secure against length-extension attacks that affect naive &lt;code&gt;H(K ∥ m)&lt;/code&gt; constructions with Merkle-Damgård hash functions like SHA-256. HMAC is proven secure as long as the underlying hash function is a pseudorandom function, a weaker requirement than collision resistance, meaning HMAC-SHA-256 remains secure even in scenarios where SHA-256 collision resistance might be weakened.&lt;/p&gt;</description></item><item><title>HSM (Hardware Security Module)</title><link>https://lesitedefrancois.be/en/security/hsm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/hsm/</guid><description>&lt;p&gt;A &lt;strong&gt;Hardware Security Module (HSM)&lt;/strong&gt; is a purpose-built, tamper-resistant hardware device that holds cryptographic keys and performs cryptographic operations — signing, encryption, decryption, random number generation — entirely within its own protected boundary. The defining property is that private keys generated inside an HSM never exist in plaintext outside it: operations that need the key are sent into the HSM and the result is returned, but the key material itself cannot be extracted. This property is enforced both logically (the firmware refuses export in plaintext) and physically (the device detects and responds to tampering by erasing key material before an attacker can read it). HSMs come in several physical forms: network-attached appliances (rack-mounted devices accessed over the network by many clients), PCIe cards (embedded in a server), and compact USB devices for lower-throughput use cases like protecting CA root keys offline.&lt;/p&gt;</description></item><item><title>IMA (Integrity Measurement Architecture)</title><link>https://lesitedefrancois.be/en/security/ima/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ima/</guid><description>&lt;p&gt;&lt;strong&gt;IMA (Integrity Measurement Architecture)&lt;/strong&gt; is a Linux kernel subsystem, merged in kernel 2.6.30, that hooks into the kernel&amp;rsquo;s file access paths — &lt;code&gt;execve()&lt;/code&gt;, &lt;code&gt;mmap()&lt;/code&gt;, &lt;code&gt;open()&lt;/code&gt; — and computes a cryptographic hash of each file&amp;rsquo;s contents before it is accessed, according to a configurable policy. It is the &lt;strong&gt;runtime&lt;/strong&gt; half of the Linux integrity story: where &lt;strong&gt;TPM&lt;/strong&gt; PCR measurements and &lt;strong&gt;Secure Boot&lt;/strong&gt; cover what was loaded during the boot sequence, IMA covers what happens after the OS is running, hashing executables, libraries, kernel modules, firmware, and configuration files as they are opened, creating a continuously updated record of everything the system has actually used.&lt;/p&gt;</description></item><item><title>initramfs (initial RAM filesystem)</title><link>https://lesitedefrancois.be/en/security/initramfs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/initramfs/</guid><description>&lt;p&gt;&lt;strong&gt;initramfs (initial RAM filesystem)&lt;/strong&gt; is the temporary root filesystem the Linux kernel mounts immediately after loading itself and before switching to the machine’s real root. The bootloader — &lt;strong&gt;GRUB&lt;/strong&gt;, &lt;strong&gt;systemd-boot&lt;/strong&gt;, or firmware loading a &lt;strong&gt;UKI&lt;/strong&gt; — passes a compressed &lt;strong&gt;cpio&lt;/strong&gt; image (historically called an &lt;em&gt;initrd&lt;/em&gt;, though modern Linux always unpacks it as an initramfs into &lt;strong&gt;tmpfs&lt;/strong&gt;, not a separate ramdisk block device). The kernel extracts this archive into an in-memory tree, executes &lt;code&gt;/init&lt;/code&gt; as pid 1, and that early userspace environment is responsible for everything the bare kernel cannot yet do: loading storage and filesystem kernel modules, bringing up networking, discovering and unlocking &lt;strong&gt;LUKS&lt;/strong&gt; volumes, activating &lt;strong&gt;LVM&lt;/strong&gt; or multipath devices, mounting the true root partition, and finally calling &lt;code&gt;switch_root&lt;/code&gt; (or &lt;code&gt;pivot_root&lt;/code&gt;) to hand control to the installed system’s init — typically &lt;strong&gt;systemd&lt;/strong&gt; on current distributions. If the initramfs fails, the boot stops before userspace on the real root ever starts; if it succeeds, it is discarded and its memory reclaimed once the pivot completes.&lt;/p&gt;</description></item><item><title>IPsec (Internet Protocol Security)</title><link>https://lesitedefrancois.be/en/security/ipsec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ipsec/</guid><description>&lt;p&gt;&lt;strong&gt;IPsec (Internet Protocol Security)&lt;/strong&gt; is a suite of IETF standards (core specification RFC 4301) that adds cryptographic security to IP packets at the network layer, transparently to applications running above it. Where &lt;strong&gt;TLS&lt;/strong&gt; secures a specific connection between two application endpoints, IPsec secures all IP traffic between two hosts or networks — including traffic from applications that have no TLS support, protocols that predate encryption (routing protocols, SNMP, ICMP), and layer-3 metadata that TLS cannot protect. IPsec provides two protocol headers: &lt;strong&gt;AH (Authentication Header, IP protocol 51)&lt;/strong&gt; signs the IP packet including immutable header fields, providing integrity and source authentication without confidentiality — rarely used in modern deployments because NAT rewrites fields that AH covers. &lt;strong&gt;ESP (Encapsulating Security Payload, IP protocol 50)&lt;/strong&gt; encrypts the payload and provides authenticated encryption with AES-GCM or ChaCha20-Poly1305, optionally protecting the inner IP header as well; ESP is the universally deployed choice. Both operate in two modes: &lt;strong&gt;transport mode&lt;/strong&gt; protects only the payload of an existing IP packet (used for host-to-host encryption between endpoints that share routing), and &lt;strong&gt;tunnel mode&lt;/strong&gt; encapsulates the entire original IP packet inside a new one with new source and destination addresses — the basis of VPN gateways where traffic from one network is tunnelled to another through the public internet.&lt;/p&gt;</description></item><item><title>iptables</title><link>https://lesitedefrancois.be/en/security/iptables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/iptables/</guid><description>&lt;p&gt;&lt;strong&gt;iptables&lt;/strong&gt; is the user-space command-line interface to the Linux kernel&amp;rsquo;s &lt;strong&gt;Netfilter&lt;/strong&gt; packet filtering framework, the dominant firewall tool on Linux from its introduction in 2001 until nftables began replacing it in the mid-2010s. Netfilter inserts hook points at five positions in the kernel&amp;rsquo;s IPv4 (and separately IPv6, via &lt;code&gt;ip6tables&lt;/code&gt;) packet processing path: &lt;strong&gt;PREROUTING&lt;/strong&gt; (immediately after a packet arrives, before routing), &lt;strong&gt;INPUT&lt;/strong&gt; (packets destined for the local host), &lt;strong&gt;FORWARD&lt;/strong&gt; (packets being routed through the host), &lt;strong&gt;OUTPUT&lt;/strong&gt; (packets generated by local processes), and &lt;strong&gt;POSTROUTING&lt;/strong&gt; (after routing, before transmission). At each hook point, Netfilter calls into the active &lt;strong&gt;tables&lt;/strong&gt;, each of which contains ordered &lt;strong&gt;chains&lt;/strong&gt; of &lt;strong&gt;rules&lt;/strong&gt;. A rule is a match condition (source IP, destination port, protocol, connection state, interface, packet mark, and many more via match extensions) paired with a &lt;strong&gt;target&lt;/strong&gt; — the action to take if the rule matches: &lt;code&gt;ACCEPT&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt;, &lt;code&gt;REJECT&lt;/code&gt;, &lt;code&gt;LOG&lt;/code&gt;, &lt;code&gt;MASQUERADE&lt;/code&gt;, &lt;code&gt;DNAT&lt;/code&gt;, &lt;code&gt;SNAT&lt;/code&gt;, or a jump to a user-defined chain. Rules are evaluated in order; the first matching rule&amp;rsquo;s target is applied and evaluation stops (unless the target is &lt;code&gt;LOG&lt;/code&gt; or another non-terminating target). If no rule matches, the chain&amp;rsquo;s &lt;strong&gt;policy&lt;/strong&gt; (the default target) applies.&lt;/p&gt;</description></item><item><title>JWT (JSON Web Token)</title><link>https://lesitedefrancois.be/en/security/jwt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/jwt/</guid><description>&lt;p&gt;&lt;strong&gt;JWT (JSON Web Token)&lt;/strong&gt;, standardised in RFC 7519, is a compact, self-contained token format that encodes a set of &lt;strong&gt;claims&lt;/strong&gt; — assertions about a subject, an issuer, an audience, and arbitrary application-defined attributes — as a JSON object, signs or encrypts it, and serialises the result as three base64url-encoded segments separated by dots: &lt;code&gt;header.payload.signature&lt;/code&gt;. The header is a JSON object specifying the algorithm (&lt;code&gt;alg&lt;/code&gt;) and optionally a key ID (&lt;code&gt;kid&lt;/code&gt;) used to produce the signature. The payload is a JSON object containing the claims. The signature is computed over &lt;code&gt;base64url(header) + &amp;quot;.&amp;quot; + base64url(payload)&lt;/code&gt; using the algorithm declared in the header. The entire token is URL-safe, fits in an HTTP header or query parameter, and is self-describing — a verifier can locate the signing key, check the algorithm, verify the signature, and read the claims without any external lookup beyond fetching the issuer&amp;rsquo;s public key. This self-contained nature is what makes JWTs efficient at scale: unlike opaque tokens, which require a network call to the issuer&amp;rsquo;s introspection endpoint per verification, a JWT can be verified locally with a cached public key, making it suitable for high-throughput API gateways and distributed systems.&lt;/p&gt;</description></item><item><title>Kata Containers</title><link>https://lesitedefrancois.be/en/security/kata-containers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/kata-containers/</guid><description>&lt;p&gt;&lt;strong&gt;Kata Containers&lt;/strong&gt; is an Open Infrastructure Foundation (OpenInfra Foundation) project that replaces the Linux namespace and cgroup isolation of a conventional container runtime with a full VM boundary, while remaining entirely compatible with the &lt;strong&gt;OCI&lt;/strong&gt; runtime specification and the Kubernetes CRI. From the perspective of containerd, CRI-O, or the Kubernetes kubelet, a Kata pod is indistinguishable from a runc or crun pod — the same API calls, the same lifecycle verbs, the same pod spec — but instead of calling &lt;code&gt;clone()&lt;/code&gt; to create a new namespace, Kata starts a lightweight virtual machine. The workload runs inside that VM with its own kernel, its own device model, and a hardware-enforced isolation boundary between itself and the host kernel. The premise is that Linux namespaces, while convenient, share the same kernel as the host: a kernel vulnerability exploitable from inside a container can affect the host and every other container running on the same node. A VM boundary means that even a full guest kernel compromise cannot directly affect the host.&lt;/p&gt;</description></item><item><title>KEV (CISA Known Exploited Vulnerabilities Catalog)</title><link>https://lesitedefrancois.be/en/security/kev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/kev/</guid><description>&lt;p&gt;The &lt;strong&gt;CISA Known Exploited Vulnerabilities (KEV) Catalog&lt;/strong&gt; is a living database maintained by the US Cybersecurity and Infrastructure Security Agency that lists CVEs for which CISA has obtained reliable evidence of active exploitation in the wild. It was established under &lt;strong&gt;Binding Operational Directive 22-01 (BOD 22-01)&lt;/strong&gt;, issued in November 2021, which requires all US Federal Civilian Executive Branch (FCEB) agencies to remediate KEV-listed vulnerabilities within prescribed timeframes — typically 2 weeks for critical vulnerabilities and up to 6 months for older ones. A vulnerability must meet three criteria to be added: it must have a &lt;strong&gt;CVE ID&lt;/strong&gt;, there must be &lt;strong&gt;reliable evidence of exploitation in the wild&lt;/strong&gt; (not just a proof-of-concept or theoretical risk), and there must be &lt;strong&gt;clear remediation guidance&lt;/strong&gt; available. CISA accepts nominations from the public and adds vulnerabilities continuously; the catalog is available in CSV and JSON formats at a stable URL, making it machine-consumable for integration into vulnerability management platforms and asset inventory tools.&lt;/p&gt;</description></item><item><title>Keylime</title><link>https://lesitedefrancois.be/en/security/keylime/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/keylime/</guid><description>&lt;p&gt;&lt;strong&gt;Keylime&lt;/strong&gt; is a CNCF project, originating at MIT Lincoln Laboratory, that turns the raw cryptographic primitives of the &lt;strong&gt;TPM&lt;/strong&gt; into an operable remote attestation system for fleets of Linux machines. Its mission is narrow but important: given that a TPM can produce a signed quote over PCR values, and that &lt;strong&gt;IMA&lt;/strong&gt; can accumulate a runtime measurement log into PCR 10, Keylime provides the infrastructure to continuously collect those quotes from many machines, verify them against policy, react to failures, and gate secret delivery on attestation success — without requiring operators to understand TPM protocols directly.&lt;/p&gt;</description></item><item><title>KMS v2 (Kubernetes KMS Provider v2)</title><link>https://lesitedefrancois.be/en/security/kmsv2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/kmsv2/</guid><description>&lt;p&gt;&lt;strong&gt;KMS v2 (Kubernetes KMS Provider version 2)&lt;/strong&gt; is the stable (GA since Kubernetes 1.29, KMS v1 deprecated in 1.28 and disabled by default in 1.29) mechanism for encrypting the contents of the Kubernetes etcd datastore at rest using an external key management service. Without encryption, Kubernetes Secrets stored in etcd are base64-encoded — trivially decodable by anyone with read access to the etcd data files or a snapshot. With KMS v2 enabled, resources written to etcd — Secrets, ConfigMaps, and any other API objects selected by the &lt;code&gt;EncryptionConfiguration&lt;/code&gt; — are encrypted before being persisted, using a unique per-object key derived locally. The &lt;strong&gt;envelope encryption&lt;/strong&gt; scheme means those per-object keys are never stored in plaintext: only their encrypted form lives in etcd, and only the external KMS holds the wrapping key. The encryption configuration is declared in a file referenced by the API server&amp;rsquo;s &lt;code&gt;--encryption-provider-config&lt;/code&gt; flag, with &lt;code&gt;kms: apiVersion: v2&lt;/code&gt; selecting the KMS v2 code path, and &lt;code&gt;endpoint: unix:///path/to/plugin.sock&lt;/code&gt; pointing at the plugin&amp;rsquo;s Unix domain socket.&lt;/p&gt;</description></item><item><title>KubeVirt</title><link>https://lesitedefrancois.be/en/security/kubevirt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/kubevirt/</guid><description>&lt;p&gt;&lt;strong&gt;KubeVirt&lt;/strong&gt; is a CNCF project that makes Kubernetes a native hypervisor management plane, allowing KVM virtual machines to be declared, scheduled, and operated through the Kubernetes API without a separate virtualisation management layer. The motivating use case is organisational convergence: teams running a mix of legacy VM workloads and modern containerised services no longer need two separate platforms (an OpenStack or vSphere cluster for VMs, a Kubernetes cluster for containers) with separate networking, storage, RBAC, and CI/CD integration. With KubeVirt, both workload types live in the same cluster, share the same &lt;code&gt;kubectl&lt;/code&gt; and GitOps tooling, and are subject to the same scheduling, resource quota, and network policy primitives. KubeVirt reached 1.0 in 2023 and is the engine behind &lt;strong&gt;Red Hat OpenShift Virtualization&lt;/strong&gt;, the downstream product used by organisations migrating away from VMware.&lt;/p&gt;</description></item><item><title>KVM/QEMU</title><link>https://lesitedefrancois.be/en/security/kvm-qemu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/kvm-qemu/</guid><description>&lt;p&gt;&lt;strong&gt;KVM&lt;/strong&gt; (Kernel-based Virtual Machine) and &lt;strong&gt;QEMU&lt;/strong&gt; (Quick Emulator) solve different halves of the same problem and are almost always used together. &lt;strong&gt;KVM&lt;/strong&gt; is a Linux kernel module that turns the kernel into a hypervisor: with &lt;strong&gt;Intel VT-x&lt;/strong&gt; or &lt;strong&gt;AMD-V&lt;/strong&gt;, guest CPUs run on real hardware at near-native speed and guest memory is managed through extended page tables. KVM has no device model of its own — no disk, network, or firmware emulation. &lt;strong&gt;QEMU&lt;/strong&gt; supplies that in userspace (virtio, USB, VGA, ACPI) and controls KVM by issuing &lt;strong&gt;ioctl&lt;/strong&gt; calls on &lt;strong&gt;&lt;code&gt;/dev/kvm&lt;/code&gt;&lt;/strong&gt; — creating VMs, mapping memory, running vCPUs via &lt;code&gt;KVM_RUN&lt;/code&gt; — while &lt;strong&gt;QMP&lt;/strong&gt; exposes external management over a Unix socket. &lt;strong&gt;libvirt&lt;/strong&gt;, originally from Red Hat, sits above both: it translates &lt;strong&gt;domain XML&lt;/strong&gt; into QEMU command lines and lifecycle operations. The stack is the default on Linux: &lt;strong&gt;RHEL&lt;/strong&gt; ships &lt;code&gt;qemu-kvm&lt;/code&gt;, &lt;strong&gt;OpenShift Virtualization&lt;/strong&gt; runs &lt;strong&gt;KubeVirt&lt;/strong&gt; (&lt;code&gt;virt-launcher&lt;/code&gt; → libvirt → QEMU), and &lt;strong&gt;OpenShift Sandboxed Containers&lt;/strong&gt; uses &lt;strong&gt;Kata Containers&lt;/strong&gt; with the same hypervisor to isolate pods in micro-VMs.&lt;/p&gt;</description></item><item><title>LDAP (Lightweight Directory Access Protocol)</title><link>https://lesitedefrancois.be/en/security/ldap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ldap/</guid><description>&lt;p&gt;&lt;strong&gt;LDAP (Lightweight Directory Access Protocol)&lt;/strong&gt; is a client-server protocol for accessing and modifying a &lt;strong&gt;directory service&lt;/strong&gt;: a specialised database optimised for read-heavy, hierarchically-organised identity data. It was derived from the X.500 directory standard in the early 1990s, stripping out OSI transport dependencies to run over TCP/IP, and standardised in its current form in RFC 4511 (LDAPv3, 2006). A directory in the LDAP sense is not a general-purpose database — it is a tree of &lt;strong&gt;entries&lt;/strong&gt; (also called objects), each identified by a &lt;strong&gt;Distinguished Name (DN)&lt;/strong&gt; that encodes its position in the hierarchy: &lt;code&gt;cn=alice,ou=users,dc=example,dc=com&lt;/code&gt;. Each entry is an instance of one or more &lt;strong&gt;object classes&lt;/strong&gt; (defined in a &lt;strong&gt;schema&lt;/strong&gt;), and each object class defines a set of mandatory and optional &lt;strong&gt;attributes&lt;/strong&gt; — typed, multi-valued fields such as &lt;code&gt;uid&lt;/code&gt;, &lt;code&gt;cn&lt;/code&gt; (common name), &lt;code&gt;mail&lt;/code&gt;, &lt;code&gt;userPassword&lt;/code&gt;, &lt;code&gt;memberOf&lt;/code&gt;, &lt;code&gt;sshPublicKey&lt;/code&gt;, &lt;code&gt;objectClass&lt;/code&gt;, and &lt;code&gt;userCertificate&lt;/code&gt;. The schema is extensible: LDAP servers ship with standard schema files (RFC 2307 for POSIX users and groups, RFC 4519 for person entries) and organisations add custom schema for application-specific attributes. The tree structure makes hierarchical policy delegation natural — all objects under &lt;code&gt;ou=engineering,dc=example,dc=com&lt;/code&gt; can be administered by a different set of ACL rules than objects under &lt;code&gt;ou=ops&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>libvirt</title><link>https://lesitedefrancois.be/en/security/libvirt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/libvirt/</guid><description>&lt;p&gt;&lt;strong&gt;libvirt&lt;/strong&gt; is an open-source library, daemon, and toolset that provides a unified, stable API for managing virtualisation infrastructure — virtual machines, storage volumes, virtual networks, and host devices — across multiple hypervisor backends. It was originally written by Daniel Berrange at Red Hat and has since become the standard virtualisation management layer on Linux, underpinning &lt;strong&gt;KubeVirt&lt;/strong&gt;, OpenStack Nova, oVirt/RHEV, Proxmox, and the &lt;code&gt;virsh&lt;/code&gt; / &lt;code&gt;virt-manager&lt;/code&gt; administrative tools. The core value proposition is &lt;strong&gt;hypervisor abstraction&lt;/strong&gt;: the same &lt;code&gt;libvirt&lt;/code&gt; API call creates a VM on KVM/QEMU, Xen, LXC, or (historically) VMware ESXi, without the management layer caring about the underlying implementation. In practice, the KVM/QEMU driver is the dominant use case on Linux; the others are progressively less-maintained but remain supported. libvirt communicates with hypervisors through driver-specific mechanisms — with QEMU, it generates the full QEMU command line from the domain XML definition and manages the QEMU process lifecycle, communicating with the running VM through the QEMU Monitor Protocol (QMP) over a Unix socket.&lt;/p&gt;</description></item><item><title>LSM (Linux Security Module)</title><link>https://lesitedefrancois.be/en/security/lsm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/lsm/</guid><description>&lt;p&gt;&lt;strong&gt;Linux Security Modules (LSM)&lt;/strong&gt; is a hook-based framework integrated into the Linux kernel since 2.6 (2003) that provides a general mechanism for implementing Mandatory Access Control (MAC) without modifying the core kernel. Its origin is the NSA&amp;rsquo;s presentation of SELinux at the 2001 Linux Kernel Summit: Linus Torvalds accepted the need for flexible access control but refused to hardcode a single security model, directing instead the development of a framework into which any security model could be plugged. The result is LSM: a set of strategically placed hook functions throughout the kernel&amp;rsquo;s execution paths — over 240 hooks in recent kernels — at points where security-relevant decisions occur: file open, process creation, capability checks, socket operations, IPC access, memory mapping, and more. Each hook is a call into the currently active security module(s), which examine the operation&amp;rsquo;s context and return allow or deny. The core kernel enforces whatever the security module decides.&lt;/p&gt;</description></item><item><title>LUKS (Linux Unified Key Setup)</title><link>https://lesitedefrancois.be/en/security/luks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/luks/</guid><description>&lt;p&gt;&lt;strong&gt;LUKS (Linux Unified Key Setup)&lt;/strong&gt; is the standard specification for block device encryption on Linux, created by Clemens Fruhwirth in 2004. It sits above the kernel&amp;rsquo;s &lt;strong&gt;dm-crypt&lt;/strong&gt; subsystem — which performs the actual AES sector-by-sector encryption via the device mapper — and adds a structured, on-disk header that decouples key management from the encryption itself. Any block device can be a LUKS container: a partition, a logical volume, a loop device; anything that sits beneath it (filesystem, swap, LVM) is encrypted transparently, with no changes required to the software using it. The managed &lt;code&gt;cryptsetup&lt;/code&gt; tool and the &lt;code&gt;libcryptsetup&lt;/code&gt; library provide userspace access to LUKS volumes, and are the canonical interface for all operations on them.&lt;/p&gt;</description></item><item><title>MACsec (IEEE 802.1AE)</title><link>https://lesitedefrancois.be/en/security/macsec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/macsec/</guid><description>&lt;p&gt;&lt;strong&gt;MACsec (MAC Security, IEEE 802.1AE)&lt;/strong&gt; is an IEEE standard, first published in 2006 and supported in the Linux kernel since 4.6 (2016), that encrypts and authenticates Ethernet frames at layer 2 — hop by hop between directly connected devices. Its operating layer is what distinguishes it from &lt;strong&gt;IPsec&lt;/strong&gt; (layer 3) and &lt;strong&gt;TLS&lt;/strong&gt; (layer 4): MACsec wraps Ethernet frames, not IP packets or TCP streams, so it can protect every byte that traverses a link segment regardless of what protocol it carries. ARP replies, DHCP offers, LLDP frames, routing protocol adjacencies, and layer-2 broadcast traffic are all encrypted and authenticated alongside application data — something neither IPsec nor TLS can accomplish because both require an IP header to already be present and unenforced. The topology implication of this is that MACsec is &lt;strong&gt;link-local and hop-by-hop&lt;/strong&gt;: it encrypts between two directly adjacent Ethernet peers (a host and a switch, or two switches), decrypts at each hop for forwarding decisions, and re-encrypts toward the next hop. It cannot stretch across a routed boundary; for that, IPsec is the right tool.&lt;/p&gt;</description></item><item><title>Measured Boot</title><link>https://lesitedefrancois.be/en/security/measured-boot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/measured-boot/</guid><description>&lt;p&gt;&lt;strong&gt;Measured Boot&lt;/strong&gt; is a boot process architecture in which each component in the boot chain — firmware, bootloader, kernel, initrd, kernel command line — is cryptographically hashed and that hash is recorded into a &lt;strong&gt;TPM&lt;/strong&gt; Platform Configuration Register (PCR) before the component executes. The critical distinction from &lt;strong&gt;Secure Boot&lt;/strong&gt; is in what each mechanism provides: Secure Boot is an &lt;em&gt;enforcement&lt;/em&gt; mechanism that prevents unauthorised components from running at all; Measured Boot is a &lt;em&gt;recording&lt;/em&gt; mechanism that creates a tamper-evident log of exactly what did run, without necessarily preventing anything. The two are complementary and typically deployed together — Secure Boot enforces a policy at boot time, Measured Boot produces the evidence that the policy was enforced as claimed. A system can have Measured Boot without Secure Boot (it records everything that ran, even unsigned components), but Secure Boot without Measured Boot provides enforcement with no attestable evidence of what was enforced.&lt;/p&gt;</description></item><item><title>ML-DSA (Module-Lattice-Based Digital Signature Algorithm)</title><link>https://lesitedefrancois.be/en/security/ml-dsa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ml-dsa/</guid><description>&lt;p&gt;&lt;strong&gt;ML-DSA (Module-Lattice-Based Digital Signature Algorithm)&lt;/strong&gt;, standardised as &lt;strong&gt;NIST FIPS 204&lt;/strong&gt; in August 2024, is the primary post-quantum replacement for digital signatures. It replaces &lt;strong&gt;ECDSA&lt;/strong&gt;, &lt;strong&gt;EdDSA&lt;/strong&gt;, and &lt;strong&gt;RSA&lt;/strong&gt; PSS/PKCS#1 signatures in &lt;strong&gt;X.509&lt;/strong&gt; certificates, code signing, TLS client and server authentication, SSH, JWT signing, and any other context where a party proves possession of a private key by producing a signature that others verify with the public key. ML-DSA is derived from CRYSTALS-Dilithium, the submission that won NIST&amp;rsquo;s lattice-based signature selection, and its security rests on the &lt;strong&gt;Module Learning With Errors (MLWE)&lt;/strong&gt; and &lt;strong&gt;Module Short Integer Solution (MSIS)&lt;/strong&gt; problems — the same mathematical family as &lt;strong&gt;ML-KEM&lt;/strong&gt;, which is significant because both algorithms can share implementation code and hardware acceleration for the underlying polynomial arithmetic (NTT, number-theoretic transform).&lt;/p&gt;</description></item><item><title>ML-KEM (Module-Lattice-Based Key Encapsulation Mechanism)</title><link>https://lesitedefrancois.be/en/security/ml-kem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ml-kem/</guid><description>&lt;p&gt;&lt;strong&gt;ML-KEM (Module-Lattice-Based Key Encapsulation Mechanism)&lt;/strong&gt;, standardised as &lt;strong&gt;NIST FIPS 203&lt;/strong&gt; in August 2024, is the primary post-quantum replacement for key encapsulation and key exchange. It replaces the role of &lt;strong&gt;ECDH&lt;/strong&gt; (X25519, P-256) and RSA key transport in &lt;strong&gt;TLS&lt;/strong&gt; handshakes, &lt;strong&gt;IPsec&lt;/strong&gt; IKEv2 negotiations, and any other protocol that needs two parties to establish a shared secret without prior key material. ML-KEM is derived from CRYSTALS-Kyber, the submission that won NIST&amp;rsquo;s lattice-based KEM selection, and its security rests on the &lt;strong&gt;Module Learning With Errors (MLWE)&lt;/strong&gt; problem: distinguishing a structured noisy linear system from a random one is computationally hard, and no efficient quantum algorithm for this problem is known. The &amp;ldquo;module&amp;rdquo; qualifier means the construction uses polynomial rings structured in a way that allows a good balance between security and efficiency, contrasting with pure LWE (larger keys, simpler structure) and NTRU (smaller keys, different structure).&lt;/p&gt;</description></item><item><title>mTLS (Mutual TLS)</title><link>https://lesitedefrancois.be/en/security/mtls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/mtls/</guid><description>&lt;p&gt;&lt;strong&gt;mTLS (Mutual TLS)&lt;/strong&gt; is the configuration of &lt;strong&gt;TLS&lt;/strong&gt; in which certificate-based authentication is required from both sides of the connection, not just the server. In standard TLS, only the server presents an &lt;strong&gt;X.509&lt;/strong&gt; certificate, which the client verifies to confirm it is talking to the intended host; the client is typically anonymous to the server, or authenticates separately via a password or session token at the application layer. In mTLS, the client also presents a certificate during the TLS handshake; the server verifies it against a trusted CA before completing the connection. The result is cryptographic proof of identity in both directions: the client knows it is talking to the legitimate server (as in standard TLS), and the server knows the exact identity of the connecting client — without any password, API key, or token exchanged in the application layer.&lt;/p&gt;</description></item><item><title>NBDE / Clevis / Tang (Network-Bound Disk Encryption)</title><link>https://lesitedefrancois.be/en/security/nbde-clevis-tang/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/nbde-clevis-tang/</guid><description>&lt;p&gt;&lt;strong&gt;NBDE (Network-Bound Disk Encryption)&lt;/strong&gt; is an approach to automatic &lt;strong&gt;LUKS&lt;/strong&gt; disk unlocking that binds the volume key not to hardware state (a &lt;strong&gt;TPM&lt;/strong&gt; PCR measurement) but to network presence: a &lt;strong&gt;LUKS&lt;/strong&gt;-encrypted volume unlocks automatically at boot if and only if the machine can reach a designated &lt;strong&gt;Tang&lt;/strong&gt; server on a trusted network. Remove the machine from that network — because it was stolen, because a data centre drive was pulled, because someone exfiltrated the hardware — and the volume key becomes unrecoverable without a fallback passphrase. The threat model is therefore complementary to TPM-based unlocking: TPM sealing asks &amp;ldquo;is this the right software stack?&amp;rdquo; and locks the key to a specific platform measurement; NBDE asks &amp;ldquo;is this machine on the trusted network?&amp;rdquo; and locks the key to network presence. Neither addresses both threat classes alone, which is why the two are routinely combined — and why RHEL formalises NBDE as a subcategory of the broader &lt;strong&gt;Policy-Based Decryption (PBD)&lt;/strong&gt; framework that the Clevis pin system implements.&lt;/p&gt;</description></item><item><title>nftables</title><link>https://lesitedefrancois.be/en/security/nftables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/nftables/</guid><description>&lt;p&gt;&lt;strong&gt;nftables&lt;/strong&gt; is the successor to &lt;strong&gt;iptables&lt;/strong&gt; within the Linux Netfilter framework, merged into the mainline kernel in 3.13 (2014) and now the default firewall backend on all major distributions — Debian 10+, Ubuntu 20.04+, RHEL 8+, Fedora 32+. It replaces not just iptables but the entire family of legacy Netfilter frontends: &lt;code&gt;ip6tables&lt;/code&gt; (IPv6), &lt;code&gt;arptables&lt;/code&gt; (ARP), and &lt;code&gt;ebtables&lt;/code&gt; (Ethernet bridging) are all unified under a single &lt;code&gt;nft&lt;/code&gt; command and a single kernel subsystem. The kernel component is a generic, protocol-independent packet classification engine; the protocol-specific logic (IPv4, IPv6, ARP, bridging) is expressed in user-space rule syntax rather than hardcoded in separate kernel modules. This unification eliminates the fragmented ruleset management of the iptables era, where a firewall with consistent IPv4/IPv6 and bridging policy required coordinating four separate tools with four separate rulesets and four separate persistence mechanisms.&lt;/p&gt;</description></item><item><title>OAuth 2.0</title><link>https://lesitedefrancois.be/en/security/oauth2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/oauth2/</guid><description>&lt;p&gt;&lt;strong&gt;OAuth 2.0&lt;/strong&gt; (RFC 6749, 2012) is an authorisation delegation framework — not an authentication protocol — that solves a specific problem: how does a user grant a third-party application access to their resources on a server, without giving that application their password? The canonical example is a user granting a calendar app access to their Google Drive files: OAuth 2.0 lets Google issue the calendar app a scoped, time-limited &lt;strong&gt;access token&lt;/strong&gt; that permits it to read Drive files, without the app ever seeing the user&amp;rsquo;s Google password. The distinction between authorisation and authentication is fundamental: OAuth 2.0 proves that a token was issued by an authorisation server for a specific scope — it says nothing about who the user is. Attempting to use OAuth 2.0 for authentication (treating token possession as proof of identity) is a well-documented anti-pattern with concrete exploits; &lt;strong&gt;OIDC&lt;/strong&gt; (OpenID Connect) is the authentication layer built on top of OAuth 2.0 that addresses this correctly.&lt;/p&gt;</description></item><item><title>OCI (Open Container Initiative)</title><link>https://lesitedefrancois.be/en/security/oci/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/oci/</guid><description>&lt;p&gt;&lt;strong&gt;The Open Container Initiative (OCI)&lt;/strong&gt; is a Linux Foundation project founded in June 2015 by Docker, CoreOS, and others to prevent the container ecosystem from fragmenting around proprietary formats. It maintains three interlocking specifications that together describe the complete lifecycle of a container: how an image is structured, how it is transported, and how it is run. Any tool that conforms to these specs — builder, registry, runtime — is interoperable with any other conformant tool, which is why an image built by &lt;code&gt;buildah&lt;/code&gt; can be pushed to a registry running Harbor, pulled by containerd, and executed by a runtime written in Rust.&lt;/p&gt;</description></item><item><title>OCI Referrers API</title><link>https://lesitedefrancois.be/en/security/oci-referrers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/oci-referrers/</guid><description>&lt;p&gt;&lt;strong&gt;OCI Referrers&lt;/strong&gt; is a mechanism introduced in the OCI Image and Distribution Specification v1.1 (finalised 2024) that allows arbitrary artifacts — signatures, SBOMs, vulnerability scan reports, attestations, provenance documents — to be attached to an existing image in a registry without modifying the image itself and without requiring out-of-band storage or tag conventions. The attachment is expressed through a &lt;code&gt;subject&lt;/code&gt; field added to any OCI manifest: a descriptor pointing to the digest of the target image. The registry then indexes these relationships, and the referrers API makes them discoverable.&lt;/p&gt;</description></item><item><title>OCSP (Online Certificate Status Protocol)</title><link>https://lesitedefrancois.be/en/security/ocsp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ocsp/</guid><description>&lt;p&gt;&lt;strong&gt;OCSP (Online Certificate Status Protocol)&lt;/strong&gt;, standardised in RFC 6960, is a request-response protocol that allows a verifier to query an &lt;strong&gt;OCSP responder&lt;/strong&gt; — a service operated by the &lt;strong&gt;CA&lt;/strong&gt; or a delegated party — for the current revocation status of a specific &lt;strong&gt;X.509&lt;/strong&gt; certificate. Where a &lt;strong&gt;CRL&lt;/strong&gt; requires downloading an entire list and searching it locally, an OCSP query asks about exactly one certificate and receives a signed response: &lt;code&gt;good&lt;/code&gt; (the certificate is currently valid and not revoked), &lt;code&gt;revoked&lt;/code&gt; (revoked, with the revocation time and reason), or &lt;code&gt;unknown&lt;/code&gt; (the responder does not know this certificate). The OCSP response is signed by the CA&amp;rsquo;s OCSP signing key (or a dedicated OCSP responder key with the &lt;code&gt;id-pkix-ocsp-nocheck&lt;/code&gt; extension, exempt from its own revocation checking to prevent circularity) and carries a &lt;code&gt;thisUpdate&lt;/code&gt; and &lt;code&gt;nextUpdate&lt;/code&gt; timestamp defining its freshness window. Verifiers in strict mode reject responses outside the freshness window; in practice, OCSP responses are valid for 24 hours to 7 days depending on the CA&amp;rsquo;s policy, meaning OCSP shares CRL&amp;rsquo;s staleness problem, albeit with a smaller window.&lt;/p&gt;</description></item><item><title>OIDC (OpenID Connect)</title><link>https://lesitedefrancois.be/en/security/oidc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/oidc/</guid><description>&lt;p&gt;&lt;strong&gt;OpenID Connect (OIDC)&lt;/strong&gt; is an authentication protocol built as a thin layer on top of &lt;strong&gt;OAuth 2.0&lt;/strong&gt;, published by the OpenID Foundation in 2014. Where OAuth 2.0 defines how to delegate authorisation (granting access to resources), OIDC adds the missing authentication semantics: a standard &lt;strong&gt;ID token&lt;/strong&gt; that proves who the user is, a &lt;strong&gt;UserInfo endpoint&lt;/strong&gt; that returns standardised identity claims, and a &lt;strong&gt;discovery document&lt;/strong&gt; that allows clients to configure themselves automatically from a single well-known URL. The separation is precise: OAuth 2.0 access tokens prove that a client is authorised to call an API; OIDC ID tokens prove that a specific user authenticated with a specific identity provider at a specific time. OIDC is the protocol behind virtually every &amp;ldquo;Sign in with Google / GitHub / Microsoft&amp;rdquo; flow, every SAML-to-modern-stack migration, and every Kubernetes service account token issued today — making it the dominant authentication federation standard in cloud-native infrastructure.&lt;/p&gt;</description></item><item><title>OpenPGP / GPG</title><link>https://lesitedefrancois.be/en/security/gpg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/gpg/</guid><description>&lt;p&gt;&lt;strong&gt;OpenPGP&lt;/strong&gt; is an open standard for encryption and digital signatures of arbitrary data, defined in RFC 4880 (2007) and substantially revised in RFC 9580 (2024, adding Ed25519, X25519, and modern AEAD encryption). &lt;strong&gt;GnuPG (GPG)&lt;/strong&gt; is the dominant open-source implementation, maintained by Werner Koch and the GnuPG project, and the tool most users interact with. OpenPGP predates the &lt;strong&gt;PKI&lt;/strong&gt;/CA model and takes a fundamentally different approach to trust: rather than a hierarchy of certificate authorities that users must trust transitively, OpenPGP uses a &lt;strong&gt;Web of Trust&lt;/strong&gt; in which individual users sign each other&amp;rsquo;s public keys, and trust is established through chains of personal endorsements. In the Web of Trust model, Alice trusts Bob&amp;rsquo;s key because she verified it in person and signed it; Carol trusts Bob&amp;rsquo;s key because Alice (whom Carol trusts) signed it. This decentralised, peer-to-peer trust model made sense for email encryption between individuals who could meet at key-signing parties, but does not scale to automated infrastructure verification, which is why OpenPGP&amp;rsquo;s role in modern infrastructure is primarily &lt;strong&gt;supply chain signing&lt;/strong&gt; — package repositories, Git commits, and release artifacts — rather than interactive authentication.&lt;/p&gt;</description></item><item><title>OpenSSL</title><link>https://lesitedefrancois.be/en/security/openssl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/openssl/</guid><description>&lt;p&gt;&lt;strong&gt;OpenSSL&lt;/strong&gt; is an open-source cryptographic library and command-line toolkit, originally derived from SSLeay in 1998 and now governed by the OpenSSL Software Foundation under an Apache 2.0 licence (since version 3.0). It is the default cryptographic substrate for the majority of Linux server software: Apache httpd, nginx, curl, wget, PostgreSQL, MySQL, Postfix, OpenLDAP, and hundreds of other projects link against &lt;code&gt;libssl&lt;/code&gt; and &lt;code&gt;libcrypto&lt;/code&gt; by default. It implements &lt;strong&gt;TLS&lt;/strong&gt; (all versions from 1.2 through 1.3), &lt;strong&gt;X.509&lt;/strong&gt; certificate parsing and validation, &lt;strong&gt;PKI&lt;/strong&gt; operations (CSR generation, certificate signing, CRL and OCSP processing), and the full range of cryptographic primitives — symmetric ciphers (AES-GCM, ChaCha20-Poly1305), &lt;strong&gt;hash functions&lt;/strong&gt; (SHA-2, SHA-3, SHAKE), &lt;strong&gt;RSA&lt;/strong&gt;, &lt;strong&gt;ECC&lt;/strong&gt; (ECDSA, ECDH, Ed25519, X25519), HMAC, HKDF, and key derivation functions. The library has two primary components: &lt;code&gt;libcrypto&lt;/code&gt;, the algorithm library, and &lt;code&gt;libssl&lt;/code&gt;, the TLS protocol layer built on top of it. The &lt;code&gt;openssl&lt;/code&gt; command-line tool exposes both as a single swiss-army interface for certificate management, key generation, encryption, hashing, benchmarking, and protocol testing.&lt;/p&gt;</description></item><item><title>ORAS (OCI Registry As Storage)</title><link>https://lesitedefrancois.be/en/security/oras/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/oras/</guid><description>&lt;p&gt;&lt;strong&gt;ORAS (OCI Registry As Storage)&lt;/strong&gt; is a CNCF project that treats an OCI-conformant registry not as a container image store but as a general-purpose content-addressable storage system for any kind of artifact. Its central insight is that the OCI Distribution and Image specifications are already a well-understood, widely-deployed, access-controlled, geo-replicated, content-addressed storage substrate — and that the ecosystem does not need a separate storage solution for every new artifact type (Helm charts, WebAssembly modules, ML models, firmware images, OPA policies, SBOMs, attestations) when the same registry infrastructure can store all of them, using the same authentication, the same tooling, and the same pull-by-digest semantics that container images already use.&lt;/p&gt;</description></item><item><title>PAM (Privileged Access Management)</title><link>https://lesitedefrancois.be/en/security/pam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/pam/</guid><description>&lt;p&gt;&lt;strong&gt;Privileged Access Management (PAM)&lt;/strong&gt; is the security discipline concerned with controlling, auditing, and minimising the use of privileged accounts: root access, domain administrator rights, cloud IAM roles with wide permissions, database superuser credentials, service account tokens, and any other identity that can cause systemic damage if misused. The threat PAM addresses is specific: an attacker who obtains a regular user credential can typically access that user&amp;rsquo;s data; an attacker who obtains a privileged credential can move laterally, disable security controls, exfiltrate everything, and deploy ransomware. PAM is therefore not a generalisation of identity and access management (IAM) but a specialisation of it — the same concepts of authentication and authorisation, applied with far higher friction to the accounts that most need it.&lt;/p&gt;</description></item><item><title>Peer Pods</title><link>https://lesitedefrancois.be/en/security/peer-pods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/peer-pods/</guid><description>&lt;p&gt;&lt;strong&gt;Peer Pods&lt;/strong&gt; is the deployment model for &lt;strong&gt;CoCo (Confidential Containers)&lt;/strong&gt; designed for public cloud environments where the Kubernetes worker nodes are standard VMs — not bare metal — and therefore cannot host a nested confidential VM for each pod. The fundamental constraint it solves is physical: confidential computing hardware (&lt;strong&gt;TDX&lt;/strong&gt;, &lt;strong&gt;SEV-SNP&lt;/strong&gt;) does not support nested virtualisation, meaning a confidential guest cannot be launched inside another VM. In the conventional CoCo deployment, the Kata Containers runtime asks a local hypervisor (QEMU/KVM) on the worker node to create a micro-VM for each pod; if the worker node is itself a VM, this requires nested virtualisation that the TEE hardware cannot provide. Peer Pods sidestep this entirely by moving the pod&amp;rsquo;s VM off the worker node and onto a separate, cloud-provisioned instance running directly on bare-metal TEE-capable hardware.&lt;/p&gt;</description></item><item><title>PKI (Public Key Infrastructure)</title><link>https://lesitedefrancois.be/en/security/pki/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/pki/</guid><description>&lt;p&gt;&lt;strong&gt;Public Key Infrastructure (PKI)&lt;/strong&gt; is the framework that makes asymmetric cryptography operationally useful at scale. Asymmetric cryptography provides a mathematical relationship between a public key and a private key, but by itself it cannot answer the question a relying party cares about: &lt;em&gt;whose&lt;/em&gt; public key is this? PKI answers that question by introducing a trusted third party — the &lt;strong&gt;Certificate Authority (CA)&lt;/strong&gt; — that cryptographically binds a public key to an identity (a hostname, an organisation name, an email address, a SPIFFE ID) by signing a certificate. A relying party that trusts the CA can therefore trust any certificate the CA signs, without needing to know the subject directly. The chain of trust extends recursively: a &lt;strong&gt;Root CA&lt;/strong&gt; signs &lt;strong&gt;Intermediate CA&lt;/strong&gt; certificates, which sign &lt;strong&gt;end-entity certificates&lt;/strong&gt; (also called leaf certificates). Root CA private keys are kept offline in &lt;strong&gt;HSMs&lt;/strong&gt; and used rarely; intermediate CAs handle day-to-day issuance and can be revoked without rotating the root. The set of root CA certificates a system trusts is its &lt;strong&gt;trust store&lt;/strong&gt; — browsers and operating systems ship with a pre-populated trust store of publicly-trusted roots, while private PKIs use custom roots distributed by administrators.&lt;/p&gt;</description></item><item><title>Port-based Network Access Control (IEEE 802.1X)</title><link>https://lesitedefrancois.be/en/security/8021x/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/8021x/</guid><description>&lt;p&gt;&lt;strong&gt;IEEE 802.1X&lt;/strong&gt; is a standard for &lt;strong&gt;Port-Based Network Access Control (PNAC)&lt;/strong&gt; that prevents any device from sending or receiving traffic on a network port until it has successfully authenticated. Originally designed for wired Ethernet and ratified in 2001, it now equally underpins enterprise Wi-Fi (WPA-Enterprise/WPA3-Enterprise), where access points act as the port gatekeeper. The core premise is that physical access to a port — plugging in a cable or being in range of an access point — does not grant network access. The port is logically divided into two channels: the &lt;strong&gt;uncontrolled port&lt;/strong&gt;, which passes only EAP authentication traffic (EAPOL frames), and the &lt;strong&gt;controlled port&lt;/strong&gt;, which is fully blocked until authentication succeeds. Only after the authentication server approves the device does the switch or access point open the controlled port and allow normal traffic. This port-level gate is what separates 802.1X from higher-layer authentication: a device that fails 802.1X receives no IP address, cannot reach any network resource, and cannot even attempt an attack at layer 3.&lt;/p&gt;</description></item><item><title>PQC (Post-Quantum Cryptography)</title><link>https://lesitedefrancois.be/en/security/pqc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/pqc/</guid><description>&lt;p&gt;&lt;strong&gt;Post-Quantum Cryptography (PQC)&lt;/strong&gt; is the set of cryptographic algorithms designed to resist attacks from a &lt;strong&gt;Cryptographically Relevant Quantum Computer (CRQC)&lt;/strong&gt; — a quantum computer large and stable enough to run Shor&amp;rsquo;s algorithm at scale. Shor&amp;rsquo;s algorithm can solve the integer factorisation and discrete logarithm problems that underpin RSA, ECDSA, and ECDH in polynomial time, meaning that every asymmetric algorithm in wide use today — TLS key exchange, X.509 certificate signatures, SSH host keys, code signing, and encrypted email — becomes trivially breakable by a CRQC. Symmetric algorithms (AES, SHA-256) are substantially less affected: Grover&amp;rsquo;s algorithm provides only a quadratic speedup against them, which is mitigated by doubling key lengths (AES-256 remains appropriate). PQC replaces the asymmetric primitives only, on hard mathematical problems for which no efficient quantum algorithm is known: &lt;strong&gt;structured lattices&lt;/strong&gt; (the Learning With Errors and Module-LWE problems), &lt;strong&gt;hash functions&lt;/strong&gt; (the security of SHA-3 family variants), and &lt;strong&gt;error-correcting codes&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>PSA (Pod Security Admission)</title><link>https://lesitedefrancois.be/en/security/psa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/psa/</guid><description>&lt;p&gt;&lt;strong&gt;Pod Security Admission (PSA)&lt;/strong&gt; is the built-in Kubernetes admission controller that enforces the &lt;strong&gt;Pod Security Standards (PSS)&lt;/strong&gt;, a set of predefined security profiles that constrain what a pod is allowed to do. It became stable in Kubernetes 1.25, at which point its predecessor &lt;strong&gt;PodSecurityPolicy (PSP)&lt;/strong&gt; was simultaneously removed. Where PSP was a complex, cluster-scoped object requiring deep RBAC wiring and prone to misconfiguration, PSA is deliberately simpler: it is always enabled, requires no CRDs or RBAC setup, and is configured entirely through namespace labels. The trade-off for that simplicity is that PSA is opinionated and coarse-grained — it enforces fixed profiles rather than arbitrary custom rules, and its granularity is the namespace rather than the individual workload or service account. Teams needing finer-grained policy beyond what PSA offers typically combine it with a policy engine such as Kyverno or OPA Gatekeeper.&lt;/p&gt;</description></item><item><title>RHCOS (Red Hat Enterprise Linux CoreOS)</title><link>https://lesitedefrancois.be/en/security/rhcos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/rhcos/</guid><description>&lt;p&gt;&lt;strong&gt;RHCOS (Red Hat Enterprise Linux CoreOS)&lt;/strong&gt; is the operating system that runs on every OpenShift control plane and worker node. It is not a general-purpose Linux distribution — it is a purpose-built, immutable, container-optimised OS designed to run exclusively as a managed node in an OpenShift cluster. Its security posture is architecturally different from a hardened RHEL installation: rather than hardening a mutable system through configuration management, RHCOS makes the OS layer structurally resistant to modification by design. The root filesystem&amp;rsquo;s &lt;code&gt;/usr&lt;/code&gt; tree is &lt;strong&gt;read-only&lt;/strong&gt; (enforced at mount time by rpm-ostree and, in recent versions, by &lt;strong&gt;composefs&lt;/strong&gt; over the OSTree object store), &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/var&lt;/code&gt; are writable but managed exclusively by the &lt;strong&gt;Machine Config Operator (MCO)&lt;/strong&gt;, and no package manager is available at runtime for ad-hoc software installation. An operator who wants to change any node-level configuration — kernel arguments, sysctl settings, systemd units, certificates, kubelet configuration — creates a &lt;strong&gt;MachineConfig&lt;/strong&gt; object in the OpenShift API; the MCO renders it into an Ignition config, applies it to the target MachineConfigPool (master, worker, or custom), and drains and reboots the affected nodes in a rolling fashion. Direct SSH access to nodes for configuration changes is explicitly unsupported and actively discouraged — &lt;code&gt;oc debug node/&amp;lt;name&amp;gt;&lt;/code&gt; is the supported emergency access path, dropping into a privileged container on the node&amp;rsquo;s host namespaces under audit.&lt;/p&gt;</description></item><item><title>RSA (Rivest–Shamir–Adleman)</title><link>https://lesitedefrancois.be/en/security/rsa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/rsa/</guid><description>&lt;p&gt;&lt;strong&gt;RSA (Rivest–Shamir–Adleman)&lt;/strong&gt;, published in 1977, was the first widely adopted public-key cryptosystem and for decades the most deployed asymmetric algorithm in existence. Its security rests on the &lt;strong&gt;integer factorisation problem&lt;/strong&gt;: given a public modulus &lt;code&gt;n = p × q&lt;/code&gt; (the product of two large primes), recovering &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;q&lt;/code&gt; is computationally infeasible on classical computers for sufficiently large &lt;code&gt;n&lt;/code&gt;. The public key is the pair &lt;code&gt;(n, e)&lt;/code&gt; and the private key is &lt;code&gt;(n, d)&lt;/code&gt;, where &lt;code&gt;e&lt;/code&gt; and &lt;code&gt;d&lt;/code&gt; are related by the modular arithmetic of Euler&amp;rsquo;s totient function. RSA enables two operations: &lt;strong&gt;encryption&lt;/strong&gt; (the sender uses the public key to encrypt a message that only the private key holder can decrypt) and &lt;strong&gt;signing&lt;/strong&gt; (the private key holder produces a signature that anyone with the public key can verify). In practice, RSA encryption is used almost exclusively for &lt;strong&gt;key encapsulation&lt;/strong&gt; — encrypting a randomly generated symmetric key — rather than encrypting arbitrary data directly, both because RSA is slow and because direct RSA encryption of large messages requires padding schemes that are historically error-prone.&lt;/p&gt;</description></item><item><title>SBOM (Software Bill of Materials)</title><link>https://lesitedefrancois.be/en/security/sbom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sbom/</guid><description>&lt;p&gt;A &lt;strong&gt;Software Bill of Materials (SBOM)&lt;/strong&gt; is a structured, machine-readable list of the components that make up a software artifact: open-source libraries, proprietary packages, operating system packages, programming language dependencies, and the transitive dependencies of all of the above. It is the software analogue of the ingredient list on packaged food — the thing that tells a consumer (or an automated system) precisely what is inside. The term and concept predate current security mandates but became a regulatory requirement in the US through Executive Order 14028 (May 2021), which directed NIST and NTIA to define minimum SBOM elements for software sold to the federal government. The NTIA&amp;rsquo;s resulting guidance specifies seven minimum data fields per component: supplier name, component name, version, component identifier (CPE or PURL), dependency relationships, SBOM author, and timestamp. The practical use cases SBOMs enable are vulnerability management (correlating component versions against CVE databases to identify affected software), licence compliance (detecting GPL or other licence obligations across the dependency graph), and incident response (determining within minutes which systems in a fleet contain a newly-disclosed vulnerable component, as organisations that had SBOMs could do during the Log4Shell response and those without could not).&lt;/p&gt;</description></item><item><title>SCC (Security Context Constraints)</title><link>https://lesitedefrancois.be/en/security/scc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/scc/</guid><description>&lt;p&gt;&lt;strong&gt;Security Context Constraints (SCCs)&lt;/strong&gt; are OpenShift&amp;rsquo;s mechanism for controlling and enforcing the security posture of pods at admission time. They predate and are more expressive than Kubernetes &lt;strong&gt;PSA&lt;/strong&gt;: where PSA validates a pod spec against a fixed profile and either admits or rejects it, an SCC acts as both a validator &lt;em&gt;and&lt;/em&gt; a mutator — it can inject missing fields into the pod spec (a UID from the namespace&amp;rsquo;s allocated range, an SELinux context, capability drops) so that a pod that did not specify its full security context in its manifest is brought into compliance automatically rather than rejected. SCCs are cluster-scoped resources, and access to them is controlled via RBAC: a service account must be granted &lt;code&gt;use&lt;/code&gt; of an SCC through a &lt;code&gt;Role&lt;/code&gt; or &lt;code&gt;ClusterRole&lt;/code&gt; binding before pods running under that service account can be admitted with the permissions that SCC grants.&lt;/p&gt;</description></item><item><title>Sealed Secrets</title><link>https://lesitedefrancois.be/en/security/sealed-secrets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sealed-secrets/</guid><description>&lt;p&gt;&lt;strong&gt;Sealed Secrets&lt;/strong&gt; is a Kubernetes controller and companion CLI tool (&lt;code&gt;kubeseal&lt;/code&gt;) created by Bitnami that solves a specific GitOps problem: how to store Kubernetes Secret manifests in a Git repository without exposing their contents. A standard Kubernetes Secret is base64-encoded, not encrypted — anyone who can read the manifest file or the Git history can decode the values instantly. Sealed Secrets resolves this by encrypting the secret values using asymmetric cryptography before they ever leave the developer&amp;rsquo;s machine, producing a &lt;code&gt;SealedSecret&lt;/code&gt; custom resource that contains only ciphertext and is safe to commit to any repository, public or private. The corresponding plaintext Secret is materialised exclusively inside the cluster by the controller, which holds the only private key capable of decryption.&lt;/p&gt;</description></item><item><title>seccomp (Secure Computing Mode)</title><link>https://lesitedefrancois.be/en/security/seccomp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/seccomp/</guid><description>&lt;p&gt;&lt;strong&gt;seccomp (Secure Computing Mode)&lt;/strong&gt; is a Linux kernel facility, activated by the &lt;code&gt;seccomp(2)&lt;/code&gt; syscall, that restricts which system calls a process may subsequently invoke. In its original &lt;code&gt;SECCOMP_SET_MODE_STRICT&lt;/code&gt; form (2005) it was a blunt instrument: the process could call only &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;write&lt;/code&gt;, &lt;code&gt;_exit&lt;/code&gt;, and &lt;code&gt;sigreturn&lt;/code&gt;. The operationally useful form is &lt;code&gt;SECCOMP_SET_MODE_FILTER&lt;/code&gt;, introduced in kernel 3.5 (2012), which accepts a &lt;strong&gt;BPF&lt;/strong&gt; (classic BPF, predating eBPF) filter program that receives each syscall&amp;rsquo;s number and arguments and returns one of several verdicts: &lt;code&gt;ALLOW&lt;/code&gt; (continue normally), &lt;code&gt;ERRNO&lt;/code&gt; (return a specified error to the process), &lt;code&gt;KILL_PROCESS&lt;/code&gt; or &lt;code&gt;KILL_THREAD&lt;/code&gt; (terminate immediately without giving the process a chance to handle signals), &lt;code&gt;TRAP&lt;/code&gt; (deliver &lt;code&gt;SIGSYS&lt;/code&gt;), or &lt;code&gt;TRACE&lt;/code&gt; (notify a ptracer). Once installed, a seccomp filter cannot be removed, and child processes created by &lt;code&gt;fork()&lt;/code&gt; or threads created by &lt;code&gt;clone()&lt;/code&gt; inherit it. Filters may only add restrictions, never loosen them — so a chain of filters is the intersection of all their allowlists. The filter runs entirely in the kernel, in BPF bytecode verified for safety, before the syscall implementation is entered, making it extremely low-overhead relative to the security it provides.&lt;/p&gt;</description></item><item><title>Secrets Store CSI Driver</title><link>https://lesitedefrancois.be/en/security/csi-secret-store/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/csi-secret-store/</guid><description>&lt;p&gt;&lt;strong&gt;Secrets Store CSI Driver&lt;/strong&gt; (formally &lt;code&gt;secrets-store.csi.k8s.io&lt;/code&gt;) is a Kubernetes SIG Auth project that uses the Container Storage Interface to mount secrets, certificates, and keys from external secret backends directly into pod filesystems as ephemeral &lt;code&gt;tmpfs&lt;/code&gt; volumes, bypassing the Kubernetes &lt;code&gt;Secret&lt;/code&gt; object and etcd entirely. The driver runs as a DaemonSet on every node; when a pod referencing a CSI volume of type &lt;code&gt;secrets-store.csi.k8s.io&lt;/code&gt; is scheduled, the driver communicates with a &lt;strong&gt;provider plugin&lt;/strong&gt; over gRPC to retrieve the secret content from the configured backend, writes it to a per-pod &lt;code&gt;tmpfs&lt;/code&gt; mount, and makes it available inside the container at the specified path. When the pod terminates, the &lt;code&gt;tmpfs&lt;/code&gt; is unmounted and the data is gone — secrets have no persistence beyond the lifetime of the pod that requested them.&lt;/p&gt;</description></item><item><title>Secure Boot (UEFI Secure Boot)</title><link>https://lesitedefrancois.be/en/security/secure-boot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/secure-boot/</guid><description>&lt;p&gt;&lt;strong&gt;UEFI Secure Boot&lt;/strong&gt; is a firmware-level mechanism that ensures each binary executed during the boot process — bootloader, kernel, UEFI drivers — is cryptographically signed by a key the firmware trusts, before it is allowed to run. It is defined in the UEFI specification and implemented by the firmware on virtually all modern x86 and ARM platforms. Its threat model is bootkits and rootkits that install themselves before the OS loads and therefore survive reboots, OS reinstalls, and cannot be detected by any software running after them.&lt;/p&gt;</description></item><item><title>SELinux (Security-Enhanced Linux)</title><link>https://lesitedefrancois.be/en/security/selinux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/selinux/</guid><description>&lt;p&gt;&lt;strong&gt;SELinux (Security-Enhanced Linux)&lt;/strong&gt; is a &lt;strong&gt;Mandatory Access Control (MAC)&lt;/strong&gt; implementation developed by the NSA and released as open source in 2000, merged into the mainline Linux kernel in 2.6 via the &lt;strong&gt;LSM&lt;/strong&gt; framework in 2003. Its defining characteristic is &lt;strong&gt;default deny&lt;/strong&gt;: unlike the standard Linux Discretionary Access Control model (file permission bits), where anything not explicitly forbidden is permitted, SELinux refuses all access that is not explicitly allowed by policy. Every process and every object — every file, socket, pipe, device node, and IPC object — carries a &lt;strong&gt;security context&lt;/strong&gt; (also called a label) of the form &lt;code&gt;user:role:type:level&lt;/code&gt;. The policy is a compiled set of rules, loaded at boot, that defines precisely which combinations of process context and object context may interact and how. An Apache web server process running in the &lt;code&gt;httpd_t&lt;/code&gt; domain can read files labelled &lt;code&gt;httpd_sys_content_t&lt;/code&gt; but is denied access to files labelled &lt;code&gt;user_home_t&lt;/code&gt; or &lt;code&gt;shadow_t&lt;/code&gt;, regardless of what Unix file permission bits say. If the web server is compromised, the attacker is confined to what &lt;code&gt;httpd_t&lt;/code&gt; permits — typically a narrow, well-defined set of files and network operations — rather than having the full access of the user account running Apache.&lt;/p&gt;</description></item><item><title>SEV-SNP (AMD Secure Encrypted Virtualization – Secure Nested Paging)</title><link>https://lesitedefrancois.be/en/security/sev-snp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sev-snp/</guid><description>&lt;p&gt;&lt;strong&gt;SEV-SNP&lt;/strong&gt; is AMD&amp;rsquo;s third-generation confidential computing technology for EPYC processors, and the generation in production use across major cloud providers (AWS, Google Cloud) and Linux distributions today. It builds on two predecessors: &lt;strong&gt;SEV&lt;/strong&gt; (2016), which encrypted each VM&amp;rsquo;s memory with a per-VM AES key managed by the AMD Secure Processor, and &lt;strong&gt;SEV-ES&lt;/strong&gt; (2017), which additionally encrypted CPU register state on VM exit to prevent the hypervisor from reading guest execution state. SEV-SNP&amp;rsquo;s defining addition is &lt;strong&gt;memory integrity&lt;/strong&gt;: using Secure Nested Paging, the firmware enforces that if a guest can read an encrypted memory location, the value returned must be exactly what the guest last wrote there — closing the replay, remap, and memory aliasing attacks that made earlier generations insufficient for a fully untrusted hypervisor threat model.&lt;/p&gt;</description></item><item><title>SHA (Secure Hash Algorithm)</title><link>https://lesitedefrancois.be/en/security/sha/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sha/</guid><description>&lt;p&gt;&lt;strong&gt;SHA (Secure Hash Algorithm)&lt;/strong&gt; is the name given to a series of cryptographic hash function families standardised by NIST under FIPS 180 and FIPS 202. Three generations exist with fundamentally different design lineages. &lt;strong&gt;SHA-1&lt;/strong&gt; (1995, FIPS 180-1) produces a 160-bit digest and is &lt;strong&gt;fully broken for collision resistance&lt;/strong&gt;: the SHAttered attack (Google and CWI Amsterdam, 2017) produced a chosen-prefix collision — two different PDF files with identical SHA-1 hashes — using approximately 9.2 × 10^18 SHA-1 operations, within practical reach of well-resourced attackers. SHA-1 must not be used for any security purpose; it persists only in legacy Git object identifiers (SHA-1 is being phased out in Git&amp;rsquo;s object store in favour of SHA-256 under the &lt;code&gt;sha256&lt;/code&gt; object format) and in TOTP&amp;rsquo;s HMAC-SHA-1 inner construction (where collision resistance is not the relevant security property, but migration to SHA-256 variants is still recommended). &lt;strong&gt;SHA-2&lt;/strong&gt; (2001, FIPS 180-2 and subsequent revisions) is the Merkle-Damgård family that includes SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, and SHA-512/256. SHA-256 and SHA-512 are the two variants in universal production use; the others serve niche roles. &lt;strong&gt;SHA-3&lt;/strong&gt; (2015, FIPS 202) is the Keccak sponge construction — structurally independent of SHA-2 — providing algorithm diversity and including fixed-output variants (SHA3-256, SHA3-512) and extendable output functions (SHAKE128, SHAKE256).&lt;/p&gt;</description></item><item><title>SIEM (Security Information and Event Management)</title><link>https://lesitedefrancois.be/en/security/siem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/siem/</guid><description>&lt;p&gt;&lt;strong&gt;SIEM (Security Information and Event Management)&lt;/strong&gt; is a platform that aggregates security telemetry from across an organisation&amp;rsquo;s infrastructure, normalises it into a common schema, applies correlation rules and behavioural analytics to detect threats, and retains the data for investigation and compliance reporting. The name combines two earlier disciplines: &lt;strong&gt;SIM (Security Information Management)&lt;/strong&gt; — long-term log retention, compliance reporting, and forensic search — and &lt;strong&gt;SEM (Security Event Management)&lt;/strong&gt; — real-time alert correlation and incident detection. Modern SIEMs do both simultaneously, serving as the primary visibility layer for a Security Operations Centre (SOC). Leading platforms include Splunk Enterprise Security, IBM QRadar, Microsoft Sentinel, Elastic Security, Exabeam, and LogRhythm; all share the same fundamental architecture despite differing in query language (SPL for Splunk, KQL for Sentinel, EQL/KQL for Elastic, AQL for QRadar), correlation engine design (search-based vs dedicated CEP engine), and deployment model (on-premises, SaaS, or hybrid).&lt;/p&gt;</description></item><item><title>Sigstore</title><link>https://lesitedefrancois.be/en/security/sigstore/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sigstore/</guid><description>&lt;p&gt;&lt;strong&gt;Sigstore&lt;/strong&gt; is an OpenSSF project, initiated by Google, Red Hat, and Purdue University, that provides a free public-good infrastructure for cryptographically signing software artifacts — container images, binaries, SBOMs, attestations — without the operational burden of managing long-lived private keys. Its founding insight is that the two hardest problems in code signing are key management (generating, protecting, distributing, rotating, and revoking signing keys across thousands of developers and CI pipelines) and signature discoverability (how does a verifier find and trust the correct public key for an artifact it has never seen before). Sigstore solves both by eliminating long-lived keys entirely: every signing operation generates a fresh ephemeral key pair, uses it once, discards the private key, and records the event in a public transparency log — replacing &amp;ldquo;do you trust this key?&amp;rdquo; with &amp;ldquo;do you trust this identity at this moment in time?&amp;rdquo;.&lt;/p&gt;</description></item><item><title>SLH-DSA (Stateless Hash-Based Digital Signature Algorithm)</title><link>https://lesitedefrancois.be/en/security/slh-dsa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/slh-dsa/</guid><description>&lt;p&gt;&lt;strong&gt;SLH-DSA (Stateless Hash-Based Digital Signature Algorithm)&lt;/strong&gt;, standardised as &lt;strong&gt;NIST FIPS 205&lt;/strong&gt; in August 2024, is the post-quantum signature standard based on hash functions rather than lattice problems. Where &lt;strong&gt;ML-DSA&lt;/strong&gt; and &lt;strong&gt;ML-KEM&lt;/strong&gt; both rest their security on the hardness of Module Learning With Errors — a relatively young mathematical assumption first formulated in 2005 — SLH-DSA&amp;rsquo;s security rests exclusively on the collision resistance and preimage resistance of an underlying hash function (SHA-256, SHA-512, or SHAKE, depending on parameter set). Hash function security against quantum computers is well-understood: Grover&amp;rsquo;s algorithm provides at most a quadratic speedup, which is fully mitigated by doubling output size (SHA-256 remains adequate against classical attacks; SHA-512 provides AES-256-equivalent quantum resistance). The decades-long cryptanalytic confidence in SHA-2 and SHA-3 makes SLH-DSA&amp;rsquo;s security argument the most conservative available: it requires no new mathematical assumption beyond the hash functions already trusted throughout the entire cryptographic stack.&lt;/p&gt;</description></item><item><title>SLSA (Supply-chain Levels for Software Artifacts)</title><link>https://lesitedefrancois.be/en/security/slsa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/slsa/</guid><description>&lt;p&gt;&lt;strong&gt;SLSA (Supply-chain Levels for Software Artifacts)&lt;/strong&gt;, pronounced &amp;ldquo;salsa&amp;rdquo;, is a security framework published by OpenSSF (originally proposed by Google in 2021, version 1.0 released April 2023) that defines progressively stronger requirements for build integrity and provenance — the verifiable record of where a software artifact came from, what source it was built from, how it was built, and what the build environment looked like. The motivating threat is supply chain attacks like SolarWinds (malicious code injected into the build system) and XZ Utils (malicious code injected into the source repository): in both cases the artifact that reached users was not what the source code claimed, and consumers had no way to verify the discrepancy. SLSA&amp;rsquo;s answer is a &lt;strong&gt;provenance attestation&lt;/strong&gt;: a signed, machine-readable document produced by the build platform that records the source repository and commit, the build instructions, the builder&amp;rsquo;s identity, the build environment&amp;rsquo;s properties, and the digest of the resulting artifact. Signed provenance is the basis on which consumers can make automated trust decisions rather than relying on reputation or manual inspection.&lt;/p&gt;</description></item><item><title>SOAR (Security Orchestration, Automation and Response)</title><link>https://lesitedefrancois.be/en/security/soar/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/soar/</guid><description>&lt;p&gt;&lt;strong&gt;SOAR (Security Orchestration, Automation and Response)&lt;/strong&gt; is the actuation complement to a &lt;strong&gt;SIEM&lt;/strong&gt;: where the SIEM detects and alerts, SOAR responds and acts. It receives alerts — primarily from the SIEM, but also directly from EDR platforms, vulnerability scanners, cloud security posture tools, and CNI/container security platforms — and executes structured response &lt;strong&gt;playbooks&lt;/strong&gt;: predefined, branching workflows that enrich the alert with additional context from connected systems, make automated or human-gated decisions based on that context, and issue remediation actions across the organisation&amp;rsquo;s security tooling. The three pillars of SOAR are &lt;strong&gt;orchestration&lt;/strong&gt; (connecting disparate security tools into a unified, API-driven workflow so they exchange data and coordinate actions without human clipboard-copying), &lt;strong&gt;automation&lt;/strong&gt; (executing repeatable investigation and containment steps at machine speed, consistently and without analyst fatigue), and &lt;strong&gt;case management&lt;/strong&gt; (tracking the full lifecycle of a security incident — detection, triage, investigation, containment, eradication, recovery, and post-incident review — in a structured, auditable record). Leading platforms include Splunk SOAR (formerly Phantom), IBM QRadar SOAR (formerly Resilient), Palo Alto XSOAR (formerly Demisto), Microsoft Sentinel with Playbooks (Logic Apps), and open-source options such as TheHive with Cortex.&lt;/p&gt;</description></item><item><title>SOC (Security Operations Centre)</title><link>https://lesitedefrancois.be/en/security/soc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/soc/</guid><description>&lt;p&gt;A &lt;strong&gt;SOC (Security Operations Centre)&lt;/strong&gt; is the organisational function responsible for defending an infrastructure against security threats through continuous monitoring, alert triage, incident investigation, and coordinated response. It is not a single product: it is the combination of &lt;strong&gt;people&lt;/strong&gt; (security analysts operating in tiered roles), &lt;strong&gt;processes&lt;/strong&gt; (runbooks, escalation paths, incident classification, post-incident review), and &lt;strong&gt;technology&lt;/strong&gt; (primarily a &lt;strong&gt;SIEM&lt;/strong&gt; for detection and visibility, a &lt;strong&gt;SOAR&lt;/strong&gt; platform for orchestration and actuation, EDR agents, vulnerability scanners, threat intelligence feeds, and ticketing or case management systems). The SOC&amp;rsquo;s purpose is to close the loop between something going wrong in the infrastructure and someone doing something about it — with enough structure that the response is consistent, attributable, and auditable regardless of which analyst is on shift. Operating models range from a fully internal 24×7 team, through a virtual SOC (vSOC) sharing analysts across business units, to an outsourced &lt;strong&gt;MDR (Managed Detection and Response)&lt;/strong&gt; or MSSP engagement where a third party operates the SIEM and initial triage on the organisation&amp;rsquo;s behalf; the technology stack is largely the same across models, but the boundary of who performs each tier of work changes. Analyst tiers are conventionally structured as &lt;strong&gt;L1&lt;/strong&gt; (alert triage, false-positive filtering, initial enrichment, escalation decisions), &lt;strong&gt;L2&lt;/strong&gt; (deeper investigation, correlation across data sources, containment recommendations), and &lt;strong&gt;L3&lt;/strong&gt; (threat hunting, malware reverse engineering, incident lead, playbook authoring, purple-team exercises) — with escalation governed by severity classification (P1–P4 or equivalent), SLA targets for &lt;strong&gt;MTTD (Mean Time to Detect)&lt;/strong&gt; and &lt;strong&gt;MTTR (Mean Time to Respond)&lt;/strong&gt;, and documented runbooks that define what each tier may do autonomously versus what requires approval.&lt;/p&gt;</description></item><item><title>SPIFFE / SPIRE</title><link>https://lesitedefrancois.be/en/security/spiffe-spire/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/spiffe-spire/</guid><description>&lt;p&gt;&lt;strong&gt;SPIFFE (Secure Production Identity Framework for Everyone)&lt;/strong&gt; is a CNCF graduated specification that defines a standard for workload identity: a universal answer to the question &amp;ldquo;how does a service prove who it is to another service, without a human provisioning a secret?&amp;rdquo; The core primitives are simple. A &lt;strong&gt;SPIFFE ID&lt;/strong&gt; is a URI of the form &lt;code&gt;spiffe://trust-domain/path&lt;/code&gt; that unambiguously names a workload within a trust domain — for example &lt;code&gt;spiffe://prod.example.com/payments/api&lt;/code&gt;. A &lt;strong&gt;SVID (SPIFFE Verifiable Identity Document)&lt;/strong&gt; is a cryptographically signed document asserting that SPIFFE ID, in one of two forms: an &lt;strong&gt;X.509-SVID&lt;/strong&gt;, which is a standard X.509 certificate with the SPIFFE ID encoded in the Subject Alternative Name field (used for mTLS), or a &lt;strong&gt;JWT-SVID&lt;/strong&gt;, which is a short-lived JWT bearing the SPIFFE ID as the &lt;code&gt;sub&lt;/code&gt; claim (used for service-to-service authentication where TLS termination is handled elsewhere). A &lt;strong&gt;trust bundle&lt;/strong&gt; is the set of CA certificates for a trust domain that relying parties use to validate SVIDs — analogous to a root CA store, but scoped to a SPIFFE trust domain. The &lt;strong&gt;Workload API&lt;/strong&gt; is the local gRPC API through which a workload retrieves its SVID and the trust bundles of domains it needs to communicate with, with automatic rotation before expiry.&lt;/p&gt;</description></item><item><title>SSH (Secure Shell)</title><link>https://lesitedefrancois.be/en/security/ssh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/ssh/</guid><description>&lt;p&gt;&lt;strong&gt;SSH (Secure Shell)&lt;/strong&gt; is a cryptographic protocol, standardised in RFC 4251–4254, that provides a secure channel over an unsecured network for remote login, remote command execution, file transfer (via SFTP and SCP), and general TCP port forwarding. It replaced the plaintext protocols it was designed to obsolete — Telnet, rlogin, rsh, rcp — by providing mutual authentication and full session encryption. SSH is the universal administrative access mechanism for Linux servers, network devices, and embedded systems, and the transport layer for Git over SSH, Ansible, Fabric, and most configuration management tooling. The protocol stack has three layers: &lt;strong&gt;SSH-TRANS&lt;/strong&gt; (the transport layer — handles the initial key exchange, server authentication, and establishes the encrypted channel), &lt;strong&gt;SSH-AUTH&lt;/strong&gt; (the authentication protocol — authenticates the client to the server using one of several methods), and &lt;strong&gt;SSH-CONN&lt;/strong&gt; (the connection protocol — multiplexes the encrypted channel into multiple logical channels for sessions, port forwards, and X11 forwarding).&lt;/p&gt;</description></item><item><title>SSSD (System Security Services Daemon)</title><link>https://lesitedefrancois.be/en/security/sssd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/sssd/</guid><description>&lt;p&gt;&lt;strong&gt;SSSD (System Security Services Daemon)&lt;/strong&gt; is a multi-daemon suite that connects Linux systems to remote identity and authentication providers, presenting their data through the standard Linux identity interfaces — &lt;strong&gt;NSS (Name Service Switch)&lt;/strong&gt; for identity lookups (user names, UIDs, GIDs, group membership) and &lt;strong&gt;PAM (Pluggable Authentication Modules)&lt;/strong&gt; for authentication and session management — without creating local user accounts. It was originally developed as a component of the FreeIPA project at Red Hat, introduced in Fedora 11 (2009), and quickly became the standard identity integration layer across RHEL, Fedora, Ubuntu, Debian, and most enterprise Linux distributions. Before SSSD, integrating a Linux host with &lt;strong&gt;LDAP&lt;/strong&gt; or &lt;strong&gt;AD&lt;/strong&gt; required configuring &lt;code&gt;nss_ldap&lt;/code&gt;, &lt;code&gt;pam_ldap&lt;/code&gt;, &lt;code&gt;pam_krb5&lt;/code&gt;, and &lt;code&gt;pam_winbind&lt;/code&gt; independently — each with its own caching (or lack thereof), its own reconnection logic, and its own configuration syntax. SSSD replaced this collection with a single, unified daemon providing caching, offline authentication, multi-domain support, and access control in one place.&lt;/p&gt;</description></item><item><title>Storage Encryption</title><link>https://lesitedefrancois.be/en/security/storage-encryption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/storage-encryption/</guid><description>&lt;p&gt;Storage encryption is not a single feature but a &lt;strong&gt;four-layer decision&lt;/strong&gt; that must be made independently, because each layer addresses a different adversary and a different failure mode. &lt;strong&gt;Layer 1 — disk/OSD at-rest encryption&lt;/strong&gt; protects against physical media theft: a decommissioned OSD or stolen drive is unreadable without the key. &lt;strong&gt;Layer 2 — cluster-internal wire encryption&lt;/strong&gt; protects against a network-layer attacker who can observe traffic between storage nodes: OSDs, monitors, and clients on the cluster network. &lt;strong&gt;Layer 3 — PV/volume-level encryption&lt;/strong&gt; protects against a storage operator or another tenant reading a workload&amp;rsquo;s data through the storage system itself — the threat model where the storage cluster is itself potentially untrusted or multi-tenant. &lt;strong&gt;Layer 4 — object storage server-side encryption&lt;/strong&gt; provides per-object key management for S3-compatible workloads, enabling customer-managed keys (CMK) and per-tenant key isolation in object stores. These layers are &lt;strong&gt;independent and composable&lt;/strong&gt;: enabling Layer 1 without Layer 2 protects against physical theft but not a network interceptor; enabling Layer 3 without Layer 1 protects against the storage operator but not physical media extraction. A complete encryption posture addresses all four explicitly, even if some layers are deliberately left disabled with a documented rationale.&lt;/p&gt;</description></item><item><title>Syscall (System Call)</title><link>https://lesitedefrancois.be/en/security/syscall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/syscall/</guid><description>&lt;p&gt;A &lt;strong&gt;system call (syscall)&lt;/strong&gt; is the formal interface through which a user-space process asks the kernel to perform a privileged operation on its behalf — opening a file, allocating memory, creating a process, establishing a network connection, sending a signal, or any other action that requires kernel mediation. User-space code runs at CPU privilege level 3 (ring 3) and cannot directly access hardware, manipulate kernel data structures, or perform I/O; the kernel runs at ring 0 with unrestricted access. A syscall is the crossing point: the process places its request in a defined register convention and issues a &lt;code&gt;syscall&lt;/code&gt; instruction (on x86-64) that atomically switches the CPU to ring 0 and transfers control to the kernel&amp;rsquo;s syscall dispatch table. The kernel validates the request, performs the operation if permitted by standard Unix permissions and any active &lt;strong&gt;LSM&lt;/strong&gt; hooks, and returns the result. From a security perspective, the syscall boundary is the complete list of what a process can ask the kernel to do — and therefore the complete list of operations that security controls like &lt;strong&gt;seccomp&lt;/strong&gt; and &lt;strong&gt;BPF LSM&lt;/strong&gt; can police.&lt;/p&gt;</description></item><item><title>TCB (Trusted Computing Base)</title><link>https://lesitedefrancois.be/en/security/tcb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tcb/</guid><description>&lt;p&gt;The &lt;strong&gt;Trusted Computing Base (TCB)&lt;/strong&gt; is everything you must trust for your security guarantees to hold: CPU and firmware, the host kernel, the hypervisor, the container runtime, the kubelet, identity and secrets infrastructure, and any management plane that can change workload configuration. If any component in the TCB is buggy, misconfigured, or controlled by an adversary, the whole security argument fails — regardless of how well the application itself is written. The classic design principle is &lt;strong&gt;TCB minimisation&lt;/strong&gt;: keep this set as small as possible, because every added component is another place where a flaw can void your policy. &amp;ldquo;Trusted&amp;rdquo; here does not mean &amp;ldquo;trustworthy in practice&amp;rdquo;; it means &amp;ldquo;assumed correct by the security model.&amp;rdquo;&lt;/p&gt;</description></item><item><title>TDX (Intel Trust Domain Extensions)</title><link>https://lesitedefrancois.be/en/security/tdx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tdx/</guid><description>&lt;p&gt;&lt;strong&gt;Intel Trust Domain Extensions (TDX)&lt;/strong&gt; is a confidential computing technology built into Intel CPUs that allows entire virtual machines — called &lt;strong&gt;Trust Domains (TDs)&lt;/strong&gt; — to run with hardware-enforced isolation from the host hypervisor, VMM, and any other software on the platform, including privileged system software with administrative access. Unlike &lt;strong&gt;SGX&lt;/strong&gt;, which protects small application-level enclaves, TDX operates at the VM level, making it suitable for lifting existing workloads into a confidential environment without significant code changes.&lt;/p&gt;</description></item><item><title>TEE (Trusted Execution Environment)</title><link>https://lesitedefrancois.be/en/security/tee/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tee/</guid><description>&lt;p&gt;A &lt;strong&gt;Trusted Execution Environment (TEE)&lt;/strong&gt; is a hardware-enforced isolated execution context whose confidentiality and integrity are protected by the CPU itself, rather than by software policy. The defining property of a TEE is that its guarantees hold against an adversary with full control of the software stack outside it — the hypervisor, the host operating system, the BIOS firmware, and even a user with physical access to the machine — because the enforcement is implemented in silicon and cannot be overridden by software. Code and data inside a TEE are encrypted in DRAM using a key held within the CPU&amp;rsquo;s memory controller or on-die security processor, CPU register state is isolated from the host at context switch boundaries, and memory integrity protection prevents the host from replaying, remapping, or aliasing TEE memory pages. The threat model TEEs are designed against is therefore the &lt;strong&gt;infrastructure provider&lt;/strong&gt;: a cloud operator, a data centre staff member, or a co-tenant who controls the hypervisor layer — the party that traditional virtualisation, namespaces, and access control cannot protect against because they depend on a trusted host kernel.&lt;/p&gt;</description></item><item><title>TLS (Transport Layer Security)</title><link>https://lesitedefrancois.be/en/security/tls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tls/</guid><description>&lt;p&gt;&lt;strong&gt;TLS (Transport Layer Security)&lt;/strong&gt; is the protocol that establishes an encrypted, integrity-protected, and authenticated channel between two parties over an untrusted network. It is the successor to SSL (which is deprecated and broken) and the mechanism behind HTTPS, gRPC, LDAPS, SMTPS, database connections, and most other encrypted transport in modern infrastructure. The current version is &lt;strong&gt;TLS 1.3&lt;/strong&gt; (RFC 8446, 2018); TLS 1.2 remains in wide use but TLS 1.0 and 1.1 are deprecated by RFC 8996. The fundamental security properties TLS provides are: &lt;strong&gt;confidentiality&lt;/strong&gt; (a passive observer cannot read the session content), &lt;strong&gt;integrity&lt;/strong&gt; (an active attacker cannot modify session content without detection), and &lt;strong&gt;server authentication&lt;/strong&gt; (the client can verify it is talking to the intended server rather than an impersonator). Client authentication is optional in standard TLS and is provided by &lt;strong&gt;mTLS&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>TPM (Trusted Platform Module)</title><link>https://lesitedefrancois.be/en/security/tpm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/tpm/</guid><description>&lt;p&gt;A &lt;strong&gt;Trusted Platform Module (TPM)&lt;/strong&gt; is a tamper-resistant security chip — implemented in hardware (dTPM), firmware (fTPM), or software — that acts as a hardware-anchored root of trust for a system. It provides a secure enclave for generating and storing cryptographic keys, performing cryptographic operations, and recording integrity measurements of the boot process.&lt;/p&gt;</description></item><item><title>Trustee</title><link>https://lesitedefrancois.be/en/security/trustee/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/trustee/</guid><description>&lt;p&gt;&lt;strong&gt;Trustee&lt;/strong&gt; is the server-side attestation infrastructure for the &lt;strong&gt;CoCo (Confidential Containers)&lt;/strong&gt; project, previously known as CoCo-KBS. It implements the relying-party and verifier roles from the IETF RATS (Remote ATtestation procedureS) architecture: it receives hardware attestation evidence from workloads running inside TEEs, verifies that evidence against known-good reference values, evaluates it against policy, and — if the workload passes — releases the secrets it needs to operate. Trustee runs outside the TEE in a separately trusted environment (a dedicated server, a different confidential VM, or a Kubernetes operator deployment) and is by design not accessible to the untrusted host or hypervisor.&lt;/p&gt;</description></item><item><title>UKI (Unified Kernel Image)</title><link>https://lesitedefrancois.be/en/security/uki/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/uki/</guid><description>&lt;p&gt;A &lt;strong&gt;Unified Kernel Image (UKI)&lt;/strong&gt; is a single EFI executable that packages together the Linux kernel, the initramfs (initrd), the kernel command line, and optionally other resources like a splash screen or system credentials. Instead of relying on a bootloader to assemble these components at runtime, a UKI bundles them statically into one signed binary.&lt;/p&gt;</description></item><item><title>USBGuard</title><link>https://lesitedefrancois.be/en/security/usbguard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/usbguard/</guid><description>&lt;p&gt;&lt;strong&gt;USBGuard&lt;/strong&gt; is a security framework for Linux that controls which USB devices are permitted to interact with the system. It sits above the kernel&amp;rsquo;s native USB authorisation subsystem — a per-device authorisation flag in the USB core that determines whether a device can be configured and begin sending data — and enforces a policy defined in a rule file against every device that connects or is present at startup. The threat model USBGuard addresses is both insider threat (unauthorised storage devices, data exfiltration) and hardware attack: &lt;strong&gt;BadUSB&lt;/strong&gt; devices — malicious firmware embedded in devices that present themselves as HID keyboards, network adapters, or other trusted classes — can be blocked by a sufficiently specific USBGuard policy that restricts which USB interface classes are permitted. A USB device that claims to be a keyboard (&lt;code&gt;03:01:01&lt;/code&gt;) but was not explicitly authorised cannot send keystrokes; a USB storage device plugged into a workstation with a policy that only allows a specific keyboard and mouse is blocked outright. USBGuard cannot protect against devices present at boot (before the daemon starts), so it is a defence-in-depth control for the running OS rather than a substitute for physical port security.&lt;/p&gt;</description></item><item><title>Vault (HashiCorp Vault)</title><link>https://lesitedefrancois.be/en/security/vault/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/vault/</guid><description>&lt;p&gt;&lt;strong&gt;HashiCorp Vault&lt;/strong&gt; is a secrets management platform designed to replace the pattern of static, long-lived credentials scattered across configuration files, environment variables, and CI pipelines with a centralised, policy-enforced, fully audited secrets API. Its core abstraction is that every secret has an identity (a path), an owner (determined by an auth method), a policy (an HCL &lt;code&gt;HashiCorp Configuration Language&lt;/code&gt; document granting access to specific paths), and a lease (a TTL after which the secret expires or must be renewed). Nothing in Vault is persistent by default — every access is authenticated, every secret access is logged to an immutable audit trail, and credentials that are no longer needed expire automatically rather than accumulating indefinitely.&lt;/p&gt;</description></item><item><title>VEX (Vulnerability Exploitability eXchange)</title><link>https://lesitedefrancois.be/en/security/vex/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/vex/</guid><description>&lt;p&gt;&lt;strong&gt;VEX (Vulnerability Exploitability eXchange)&lt;/strong&gt; is a machine-readable assertion format that answers the question an &lt;strong&gt;SBOM&lt;/strong&gt; alone cannot: given that a product contains a component affected by a known CVE, is that vulnerability actually exploitable in this specific product? An SBOM identifies components and versions; a CVE database maps those versions to known vulnerabilities; but the intersection of the two systematically overstates actual risk. A container image built on a minimal base may include a library with a known buffer overflow in a network-parsing function — but if that function is never called by anything in the image, or the affected code path requires a configuration flag that is hardcoded off, the CVE is present but not exploitable. Without VEX, every scanner that ingests the SBOM raises an alert; with VEX, the supplier asserts the non-exploitability with a machine-readable justification that automated tooling can consume to suppress the alert without human triage. VEX originated in the same NTIA multistakeholder process that produced the SBOM minimum elements framework, and was formalised by CISA in 2021–2022.&lt;/p&gt;</description></item><item><title>WireGuard</title><link>https://lesitedefrancois.be/en/security/wireguard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/wireguard/</guid><description>&lt;p&gt;&lt;strong&gt;WireGuard&lt;/strong&gt; is a VPN protocol and implementation designed by Jason Donenfeld, merged into the Linux kernel in 5.6 (2020) and subsequently ported to Windows, macOS, iOS, Android, and BSD. Its defining characteristic is &lt;strong&gt;radical simplicity&lt;/strong&gt;: the reference Linux kernel implementation is approximately 4,000 lines of code, compared to tens of thousands for &lt;strong&gt;IPsec&lt;/strong&gt;&amp;rsquo;s XFRM subsystem and hundreds of thousands for OpenVPN. This simplicity is a deliberate security property — a smaller codebase has a smaller attack surface, is easier to audit, and is less likely to contain implementation vulnerabilities. WireGuard achieves this by making every design decision that allows optionality to be eliminated: there is no algorithm negotiation, no handshake negotiation, no cipher suite selection. The cryptographic suite is fixed: &lt;strong&gt;X25519&lt;/strong&gt; for key exchange, &lt;strong&gt;ChaCha20-Poly1305&lt;/strong&gt; for authenticated encryption, &lt;strong&gt;BLAKE2s&lt;/strong&gt; for hashing and key derivation (via a custom HKDF-like construction), and &lt;strong&gt;Curve25519&lt;/strong&gt; for the static key pairs that identify peers. Peers are identified exclusively by their 32-byte Curve25519 public key, making WireGuard a &lt;strong&gt;public-key routed&lt;/strong&gt; VPN: there are no usernames, passwords, certificates, or CAs; access control is entirely a function of which public keys are listed in each peer&amp;rsquo;s configuration.&lt;/p&gt;</description></item><item><title>X.509</title><link>https://lesitedefrancois.be/en/security/x509/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lesitedefrancois.be/en/security/x509/</guid><description>&lt;p&gt;&lt;strong&gt;X.509&lt;/strong&gt; is the ITU-T standard (first published in 1988, currently at version 3) that defines the structure of a &lt;strong&gt;digital certificate&lt;/strong&gt;: a signed data structure that binds a public key to an identity and a set of constraints, issued by a Certificate Authority whose signature vouches for the binding. It is the near-universal format for certificates in &lt;strong&gt;PKI&lt;/strong&gt;, &lt;strong&gt;TLS&lt;/strong&gt;, code signing, S/MIME encrypted email, SPIFFE X.509-SVIDs, and SSH host certificates. When someone refers to a TLS certificate, a CA certificate, or a code-signing certificate, they are referring to an X.509 certificate. The format is defined using ASN.1 (Abstract Syntax Notation One) and most commonly serialised as &lt;strong&gt;DER&lt;/strong&gt; (Distinguished Encoding Rules, binary) or &lt;strong&gt;PEM&lt;/strong&gt; (base64-wrapped DER with &lt;code&gt;-----BEGIN CERTIFICATE-----&lt;/code&gt; headers, the format seen in most configuration files).&lt;/p&gt;</description></item></channel></rss>