<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Encryption on inetshell</title><link>https://inet.sh/es/tags/encryption/</link><description>Recent content in Encryption on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Wed, 19 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/encryption/index.xml" rel="self" type="application/rss+xml"/><item><title>Cifrado nativo de ZFS (OpenZFS): crear, heredar y cambiar la key</title><link>https://inet.sh/es/posts/zfs/cifrado/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/zfs/cifrado/</guid><description>Cómo crear un dataset ZFS cifrado con passphrase o keyfile, heredar cifrado en hijos, y change-key. OpenZFS, no Solaris zfs key -c.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p><code>zfs create -o encryption=on …</code>. Los hijos heredan. Rotar key en Linux: <code>zfs change-key</code> (no Solaris <code>zfs key -c</code>).</p>
<p>OpenZFS cifra <strong>datasets</strong>, no el pool entero. El pool (etiquetas, metaslab) sigue visible; el contenido de <code>tank/secret</code> no. Sirve en TrueNAS, Proxmox y Linux.</p>
<p>Guías útiles: <a href="https://arstechnica.com/gadgets/2021/06/a-quick-start-guide-to-openzfs-native-encryption/">Ars native encryption</a>, <a href="https://mtlynch.io/zfs-encrypted-backups/">ZFS encrypted backups</a>.</p>
<h2 id="crear">Crear</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs create -o <span class="nv">encryption</span><span class="o">=</span>on -o <span class="nv">keyformat</span><span class="o">=</span>passphrase -o <span class="nv">keylocation</span><span class="o">=</span>prompt tank/encrypted
</span></span><span class="line"><span class="cl">zfs create tank/encrypted/child1
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>child1</code> hereda cifrado. No pongas <code>encryption=off</code> en un hijo: OpenZFS no permite “agujero” sin cifrar bajo un padre cifrado.</p>
<p>Keyfile en vez de prompt:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs create -o <span class="nv">encryption</span><span class="o">=</span>on -o <span class="nv">keyformat</span><span class="o">=</span>passphrase <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -o <span class="nv">keylocation</span><span class="o">=</span>file:///root/zfs.key tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p>El archivo de la key <strong>no</strong> va en el dataset cifrado. USB, TPM o un path en otro pool.</p>
<h2 id="cargar-la-key-al-boot">Cargar la key al boot</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs load-key tank/encrypted
</span></span><span class="line"><span class="cl">zfs mount tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p>Sin <code>load-key</code>, el dataset existe y <code>zfs list</code> lo muestra, pero no monta.</p>
<h2 id="recibir-un-dataset-claro-como-cifrado">Recibir un dataset claro como cifrado</h2>
<p>En el <strong>primer</strong> <code>recv</code>, puedes fijar propiedades de cifrado:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs send tank/test@snap1 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> zfs recv -o <span class="nv">encryption</span><span class="o">=</span>on -o <span class="nv">keyformat</span><span class="o">=</span>passphrase <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      -o <span class="nv">keylocation</span><span class="o">=</span>file:///path/to/keyfile tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p>Eso es un receive <strong>sin</strong> <code>-w</code>. <code>-w</code> (raw) copia el wrapping key del origen: solo aplica si el origen ya estaba cifrado. Detalle en <a href="/es/posts/zfs/send-sin-cifrar-a-cifrado/">send de dataset sin cifrar a cifrado</a>.</p>
<h2 id="rotar-passphrase-openzfs">Rotar passphrase (OpenZFS)</h2>
<p>En <strong>Solaris</strong> el comando era <code>zfs key -c</code>. En <strong>OpenZFS / Linux / TrueNAS</strong>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs change-key tank/encrypted
</span></span><span class="line"><span class="cl">zfs get keyformat,keylocation,keystatus tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p>Keyfile nueva:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs change-key -o <span class="nv">keylocation</span><span class="o">=</span>file:///media/stick/key tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>rekey</code> de wrapping key (no re-cifra todos los bloques; rota la key que envuelve las master keys) es <code>zfs change-key -i</code> según versión — lee <code>zfs change-key</code> de <strong>tu</strong> man page antes de usarlo en producción.</p>
<p>Ver también: <a href="/es/posts/zfs/hold-proteger-snapshot/">hold de snapshots</a>, <a href="/es/posts/zfs/backups-s3/">backups fuera del host</a>.</p>
]]></content:encoded></item><item><title>zfs send/recv de un dataset sin cifrar a uno cifrado</title><link>https://inet.sh/es/posts/zfs/send-sin-cifrar-a-cifrado/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/zfs/send-sin-cifrar-a-cifrado/</guid><description>Migrar un dataset ZFS en claro a uno cifrado con zfs send | zfs recv -o encryption=on en el receive inicial.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Primer <code>recv</code> con <code>-o encryption=on</code> (sin <code>-w</code>). El dataset destino debe existir con nombre.</p>
<p>Quieres el mismo contenido, otra key. El origen sigue en claro; el destino nace cifrado. OpenZFS lo permite <strong>solo en el receive inicial</strong> (dataset que todavía no existe).</p>
<p>Hilo de origen: <a href="https://www.reddit.com/r/zfs/comments/mus2gn/zfs_sendreceive_from_enencrypted_dataset_to/">r/zfs</a>.</p>
<h2 id="comando">Comando</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs snapshot tank/test@snap1
</span></span><span class="line"><span class="cl">zfs send tank/test@snap1 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> zfs recv -o <span class="nv">encryption</span><span class="o">=</span>on <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      -o <span class="nv">keyformat</span><span class="o">=</span>passphrase <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      -o <span class="nv">keylocation</span><span class="o">=</span>file:///path/to/keyfile <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      tank/encrypted
</span></span></code></pre></td></tr></table>
</div>
</div><p>Notas que rompen el send si se omiten:</p>
<ol>
<li><strong>No uses <code>-w</code>.</strong> Raw send reproduce el estado de cifrado del origen. Origen en claro → destino en claro, y los <code>-o encryption=…</code> se ignoran o fallan.</li>
<li><strong>Pon el nombre del dataset destino</strong> (<code>tank/encrypted</code>). Un <code>recv</code> sin destino no crea el dataset.</li>
<li><strong>Passphrase vs file:</strong> <code>keylocation=prompt</code> no funciona bien al otro lado de un pipe no interactivo. Keyfile o <code>keylocation=file://</code>.</li>
<li>Los incrementales siguientes (<code>-i</code>) <strong>heredan</strong> el cifrado. No vuelvas a pasar <code>-o encryption=on</code>.</li>
</ol>
<h2 id="comprobar">Comprobar</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs get encryption,keystatus,keyformat tank/encrypted
</span></span><span class="line"><span class="cl">zfs load-key tank/encrypted   <span class="c1"># si keystatus=unavailable</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="el-otro-sentido">El otro sentido</h2>
<p>Cifrado → cifrado con la <strong>misma</strong> wrapping key: <code>zfs send -w</code>. Cifrado → otro key wrapping: send <strong>sin</strong> <code>-w</code> (ZFS descifra al enviar; el recv vuelve a cifrar). Eso exige <code>load-key</code> en el origen y es más lento.</p>
<p>Ver también: <a href="/es/posts/zfs/cifrado/">cifrado nativo</a>.</p>
]]></content:encoded></item></channel></rss>