<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Storage on Le Site de François</title><link>https://lesitedefrancois.be/en/tags/storage/</link><description>Recent content in Storage 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/tags/storage/index.xml" rel="self" type="application/rss+xml"/><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>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>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>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>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></channel></rss>