<?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>Git on 이영욱</title>
    <link>https://lyuk98.com/tags/git/</link>
    <description>Recent content in Git on 이영욱</description>
    <image>
      <title>이영욱</title>
      <url>https://images.lyuk98.com/5052433f-7965-498c-8799-4e7ac343dbf5.avif</url>
      <link>https://images.lyuk98.com/5052433f-7965-498c-8799-4e7ac343dbf5.avif</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>This work is marked CC0 1.0 Universal</copyright>
    <lastBuildDate>Wed, 27 May 2026 13:24:13 -0400</lastBuildDate>
    <atom:link href="https://lyuk98.com/tags/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Post-quantum keys and Sequoia PGP</title>
      <link>https://lyuk98.com/blog/2026/05/post-quantum-keys-and-sequoia-pgp/</link>
      <pubDate>Wed, 27 May 2026 13:24:13 -0400</pubDate>
      <guid>https://lyuk98.com/blog/2026/05/post-quantum-keys-and-sequoia-pgp/</guid>
      <description>&lt;p&gt;Some time ago, I saw news that &lt;a href=&#34;https://proton.me/blog/introducing-post-quantum-encryption&#34; title=&#34;Proton Mail introduces post-quantum encryption | Proton&#34;&gt;&amp;ldquo;Proton Mail now supports post-quantum encryption&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote cite=&#34;https://proton.me/blog/introducing-post-quantum-encryption&#34;&gt;&lt;p&gt;&lt;strong&gt;Post-quantum protection is now available in Proton Mail&lt;/strong&gt;, on all plans including free. Once enabled, Proton Mail will generate and use post-quantum-ready keys for new encrypted emails to protect your personal messages and business communications against today’s threats and a future where current public-key cryptography may no longer be enough.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I use &lt;a href=&#34;https://gnupg.org/&#34; title=&#34;The GNU Privacy Guard&#34;&gt;GNU Privacy Guard&lt;/a&gt; (GnuPG), which implements the &lt;a href=&#34;https://www.openpgp.org/&#34; title=&#34;OpenPGP - OpenPGP&#34;&gt;OpenPGP&lt;/a&gt; standard&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, to encrypt my data. Even though the standard aims to provide email encryption, which I think is still useful to me, I use it more as a way to encrypt personal data that would be uploaded to cloud providers I do not fully trust.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Some time ago, I saw news that <a href="https://proton.me/blog/introducing-post-quantum-encryption" title="Proton Mail introduces post-quantum encryption | Proton">&ldquo;Proton Mail now supports post-quantum encryption&rdquo;</a>.</p>
<blockquote cite="https://proton.me/blog/introducing-post-quantum-encryption"><p><strong>Post-quantum protection is now available in Proton Mail</strong>, on all plans including free. Once enabled, Proton Mail will generate and use post-quantum-ready keys for new encrypted emails to protect your personal messages and business communications against today’s threats and a future where current public-key cryptography may no longer be enough.</p>
</blockquote>
<p>I use <a href="https://gnupg.org/" title="The GNU Privacy Guard">GNU Privacy Guard</a> (GnuPG), which implements the <a href="https://www.openpgp.org/" title="OpenPGP - OpenPGP">OpenPGP</a> standard<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, to encrypt my data. Even though the standard aims to provide email encryption, which I think is still useful to me, I use it more as a way to encrypt personal data that would be uploaded to cloud providers I do not fully trust.</p>
<p>It has been about five years since I started using <a href="https://en.wikipedia.org/wiki/Elliptic-curve_cryptography" title="Elliptic-curve cryptography - Wikipedia">elliptic-curve cryptography</a> for my OpenPGP key (which was itself a result of migration from <a href="https://en.wikipedia.org/wiki/RSA_cryptosystem" title="RSA cryptosystem - Wikipedia">RSA</a>), and I thought it was now time for another change. Given that I currently have no one contacting me with the existing key, it seemed like a good opportunity to prevent <a href="https://en.wikipedia.org/wiki/Harvest_now,_decrypt_later" title="Harvest now, decrypt later - Wikipedia">&ldquo;harvest now, decrypt later&rdquo;</a> attacks in advance, without having to worry about building another <a href="https://en.wikipedia.org/wiki/Web_of_trust" title="Web of trust - Wikipedia">web of trust</a>.</p>
<h1 id="enabling-post-quantum-protection">Enabling post-quantum protection</h1>
<p>To generate a new set of keys, I went to <a href="https://account.proton.me/mail/encryption-keys" title="Encryption and keys - Proton Account">my Proton account&rsquo;s settings</a> and enabled post-quantum protection.</p>
<picture>
  <source srcset="https://images.lyuk98.com/876d2ce2-5041-497b-8605-a9e173609802.avif" media="(prefers-color-scheme: dark)" type="image/avif">
  <source srcset="https://images.lyuk98.com/8a39dd9b-a90b-4dce-81cd-9f322b9655f3.avif" type="image/avif">
  <source srcset="https://images.lyuk98.com/876d2ce2-5041-497b-8605-a9e173609802.webp" media="(prefers-color-scheme: dark)">
  <img src="https://images.lyuk98.com/8a39dd9b-a90b-4dce-81cd-9f322b9655f3.webp" alt="Proton account settings for &quot;Encryption and keys&quot;. In a section named &quot;Post-quantum protection&quot;, a button to &quot;Enable post-quantum protection&quot; is present.">
</picture>
<p>By doing so, a dialogue showed up and asked me if I am sure. I proceeded after acknowledging the consequences.</p>
<picture>
  <source srcset="https://images.lyuk98.com/3f022cc3-0d26-48c5-8c7f-e6536451af74.avif" media="(prefers-color-scheme: dark)" type="image/avif">
  <source srcset="https://images.lyuk98.com/d3a68d75-1afc-42e2-a7d5-4601f81ff4f6.avif" type="image/avif">
  <source srcset="https://images.lyuk98.com/3f022cc3-0d26-48c5-8c7f-e6536451af74.webp" media="(prefers-color-scheme: dark)">
  <img src="https://images.lyuk98.com/d3a68d75-1afc-42e2-a7d5-4601f81ff4f6.webp" alt="A dialogue box asking for confirmation before enabling post-quantum protection. Two warnings are shown as follows: &quot;Your recovery methods will be invalidated: you can generate new recovery data later.&quot; and &quot;You must update all Proton mobile apps: your new keys won't work on older app versions.&quot;. A checkbox with a message that says &quot;I understand that I will no longer be able to sign in to older versions of Proton mobile apps.&quot; is checked.">
</picture>
<p>Some new keys were generated, with old keys still being active as fallbacks. To add them to my device&rsquo;s keyring, from the same <a href="https://account.proton.me/mail/encryption-keys" title="Encryption and keys - Proton Account">account settings page</a>, I exported some private keys.</p>
<picture>
  <source srcset="https://images.lyuk98.com/e7c79044-8466-4a63-90f6-81da41cedf94.avif" media="(prefers-color-scheme: dark)" type="image/avif">
  <source srcset="https://images.lyuk98.com/b67b8235-d9f1-4dbc-8597-f0149de78ce7.avif" type="image/avif">
  <source srcset="https://images.lyuk98.com/e7c79044-8466-4a63-90f6-81da41cedf94.webp" media="(prefers-color-scheme: dark)">
  <img src="https://images.lyuk98.com/b67b8235-d9f1-4dbc-8597-f0149de78ce7.webp" alt="A list of email encryption keys. On top of existing key with type &quot;ECC (Curve25519)&quot;, a new one with type &quot;PQC_V6 (MLDSA_ED25519), PQC_V6 (MKLEM_X25519)&quot; is present.">
</picture>
<p>However, adding them with <code>gpg</code> was unsuccessful.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ gpg --import privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc
</span></span><span style="display:flex;"><span>gpg: packet(5) with unknown version 6
</span></span><span style="display:flex;"><span>gpg: read_block: read error: Invalid packet
</span></span><span style="display:flex;"><span>gpg: no valid OpenPGP data found.
</span></span><span style="display:flex;"><span>gpg: import from &#39;privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc&#39; failed: Invalid keyring
</span></span><span style="display:flex;"><span>gpg: Total number processed: 0
</span></span></code></pre></div><h1 id="openpgp-v6-and-librepgp">OpenPGP v6 and LibrePGP</h1>
<p>The reason the command failed was that GnuPG does not support OpenPGP v6 (or <a href="https://www.ietf.org/rfc/rfc9580.txt">RFC 9580</a>), which is necessary to support newer keys that I have just generated. I then became aware of the <a href="https://lwn.net/Articles/953797/" title="A schism in the OpenPGP world [LWN.net]">&ldquo;schism in the OpenPGP world&rdquo;</a>, where some &ldquo;major implementers&rdquo; (including GnuPG) opposing the new email encryption standard created their own one named <a href="https://librepgp.org/" title="LibrePGP">LibrePGP</a>.</p>
<p>Without knowing much about disagreements between two camps, it looked like another X/Wayland or SysV/systemd debate. I seemed to have already taken sides though, albeit unknowingly, by creating OpenPGP v6 keys that are incompatible with GnuPG.</p>
<p>After doing some research and personally concluding that the new OpenPGP standard is the way forward, I stuck with the plan; I can use my existing OpenPGP v4 (<a href="https://www.ietf.org/rfc/rfc4880.txt">RFC 4880</a>) keys with other people that took a different path, anyway. The next step to the migration was therefore to replace GnuPG with a compatible client, where I chose <a href="https://sequoia-pgp.org/" title="Sequoia-PGP">Sequoia PGP</a>.</p>
<h1 id="migrating-to-sequoia-pgp">Migrating to Sequoia PGP</h1>
<p>Before making <a href="https://gitlab.com/sequoia-pgp/sequoia-sq" title="sequoia-pgp / sequoia-sq · GitLab"><code>sq</code></a> (the command-line interface for Sequoia) available to my NixOS environment, I decided to first give it a try.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ nix shell nixpkgs#sequoia-sq
</span></span></code></pre></div><p>Importing the new key still failed, however, with messages that seemed cryptic at first.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ sq key import privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc
</span></span><span style="display:flex;"><span>Error reading privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc: Unsupported
</span></span><span style="display:flex;"><span>Cert: Unsupported primary key: Malformed packet: public_mpis: length 1984 but consumed 2099 bytes
</span></span><span style="display:flex;"><span>Imported 0 new certificates, updated 0 certificates, 0 certificates unchanged, 0 errors.
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>  Error: Unsupported Cert: Unsupported primary key: Malformed packet: public_mpis: length 1984 but consumed
</span></span><span style="display:flex;"><span>         2099 bytes
</span></span></code></pre></div><p>After some searching, I found out that the current stable version of <code>sq</code> (<a href="https://gitlab.com/sequoia-pgp/sequoia-sq/-/tags/v1.3.1" title="v1.3.1 · Tags · sequoia-pgp / sequoia-sq · GitLab"><code>v1.3.1</code></a>) <a href="https://gitlab.com/sequoia-pgp/sequoia-sq/-/work_items/607#note_2944414857" title="sq packet dump claims the secret subkey packets of unknown algorithms are malformed (#607) · Issue · sequoia-pgp/sequoia-sq">does not support post-quantum cryptography (PQC)</a>. Fortunately, though, a more recent pre-release version (<a href="https://gitlab.com/sequoia-pgp/sequoia-sq/-/tags/v1.4.0-pqc.1" title="v1.4.0-pqc.1 · Tags · sequoia-pgp / sequoia-sq · GitLab"><code>v1.4.0-pqc.1</code></a>) apparently does.</p>

<details>
	<summary>To use the new version of <code>sq</code> in my NixOS (<a href="https://github.com/nix-community/home-manager" title="nix-community/home-manager: Manage a user environment using Nix [maintainer=@khaneliman, @rycee]">Home Manager</a>, to be precise) configuration, I overrode some parts of the package definition.</summary>
	<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>{ pkgs<span style="color:#f92672">,</span> <span style="color:#f92672">...</span> }:
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  nixpkgs<span style="color:#f92672">.</span>overlays <span style="color:#f92672">=</span> [
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Use pre-release version of sq to enable support for post-quantum cryptography</span>
</span></span><span style="display:flex;"><span>    (final: prev: {
</span></span><span style="display:flex;"><span>      sequoia-sq <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>sequoia-sq<span style="color:#f92672">.</span>overrideAttrs (<span style="color:#66d9ef">rec</span> {
</span></span><span style="display:flex;"><span>        version <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;1.4.0-pqc.1&#34;</span>;
</span></span><span style="display:flex;"><span>        src <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>fetchFromGitLab {
</span></span><span style="display:flex;"><span>          owner <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sequoia-pgp&#34;</span>;
</span></span><span style="display:flex;"><span>          repo <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sequoia-sq&#34;</span>;
</span></span><span style="display:flex;"><span>          tag <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;v</span><span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>          hash <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sha256-ep3il5In0ecyNWHvCo0yh4yL92VTy3/FligzKkY+SJQ=&#34;</span>;
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Fetch latest Cargo dependencies</span>
</span></span><span style="display:flex;"><span>        cargoDeps <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>rustPlatform<span style="color:#f92672">.</span>fetchCargoVendor {
</span></span><span style="display:flex;"><span>          <span style="color:#66d9ef">inherit</span> src;
</span></span><span style="display:flex;"><span>          hash <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sha256-NYUYQCKG4XWchvuEzzAD+R25Wk0YrHN4ISVtQnhPkcM=&#34;</span>;
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>      });
</span></span><span style="display:flex;"><span>    })
</span></span><span style="display:flex;"><span>  ];
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div></details>

<p>However, I later realised that using the OpenSSL backend for <code>sq</code> <a href="https://sequoia-pgp.org/blog/2025/11/15/202511-post-quantum-cryptography/#sequoia-pgp" title="Blog - Post Quantum Cryptography in Sequoia PGP">is required for post-quantum cryptography</a> (instead of the default <a href="https://www.lysator.liu.se/~nisse/nettle/" title="Nettle - a low-level crypto library">Nettle</a> backend). As such, I <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#LINK-WHERE" title="Where link">added overrides</a> for that, too.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>{ pkgs<span style="color:#f92672">,</span> <span style="color:#f92672">...</span> }:
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  nixpkgs<span style="color:#f92672">.</span>overlays <span style="color:#f92672">=</span> [
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Use pre-release version of sq to enable support for post-quantum cryptography</span>
</span></span><span style="display:flex;"><span>    (final: prev: {
</span></span><span style="display:flex;"><span>      sequoia-sq <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>sequoia-sq<span style="color:#f92672">.</span>overrideAttrs (oldAttrs: <span style="color:#66d9ef">rec</span> {
</span></span><span style="display:flex;"><span>        version <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;1.4.0-pqc.1&#34;</span>;
</span></span><span style="display:flex;"><span>        src <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>fetchFromGitLab {
</span></span><span style="display:flex;"><span>          owner <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sequoia-pgp&#34;</span>;
</span></span><span style="display:flex;"><span>          repo <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sequoia-sq&#34;</span>;
</span></span><span style="display:flex;"><span>          tag <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;v</span><span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>          hash <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sha256-ep3il5In0ecyNWHvCo0yh4yL92VTy3/FligzKkY+SJQ=&#34;</span>;
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Fetch latest Cargo dependencies</span>
</span></span><span style="display:flex;"><span>        cargoDeps <span style="color:#f92672">=</span> prev<span style="color:#f92672">.</span>rustPlatform<span style="color:#f92672">.</span>fetchCargoVendor {
</span></span><span style="display:flex;"><span>          <span style="color:#66d9ef">inherit</span> src;
</span></span><span style="display:flex;"><span>          hash <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sha256-NYUYQCKG4XWchvuEzzAD+R25Wk0YrHN4ISVtQnhPkcM=&#34;</span>;
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Use OpenSSL cryptography backend as it is currently the only one supporting PQC</span>
</span></span><span style="display:flex;"><span>        buildInputs <span style="color:#f92672">=</span> oldAttrs<span style="color:#f92672">.</span>buildInputs <span style="color:#f92672">++</span> [ prev<span style="color:#f92672">.</span>openssl ];
</span></span><span style="display:flex;"><span>        cargoBuildNoDefaultFeatures <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>        cargoBuildFeatures <span style="color:#f92672">=</span> [ <span style="color:#e6db74">&#34;crypto-openssl&#34;</span> ];
</span></span><span style="display:flex;"><span>      });
</span></span><span style="display:flex;"><span>    })
</span></span><span style="display:flex;"><span>  ];
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>I then <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#WHERE-LINK" title="Link where">made the tools available</a> to my NixOS environment.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span><span style="color:#75715e"># Add packages for Sequoia</span>
</span></span><span style="display:flex;"><span>home<span style="color:#f92672">.</span>packages <span style="color:#f92672">=</span> <span style="color:#66d9ef">with</span> pkgs; [
</span></span><span style="display:flex;"><span>  sequoia-sq <span style="color:#75715e"># Command-line interface for Sequoia</span>
</span></span><span style="display:flex;"><span>  sequoia-git <span style="color:#75715e"># Authenticate changes to VCS repositories</span>
</span></span><span style="display:flex;"><span>  sequoia-sop <span style="color:#75715e"># Stateless OpenPGP implementation using Sequoia</span>
</span></span><span style="display:flex;"><span>  sequoia-sqv <span style="color:#75715e"># OpenPGP signature verification tool</span>
</span></span><span style="display:flex;"><span>  sequoia-wot <span style="color:#75715e"># Sequoia web of trust</span>
</span></span><span style="display:flex;"><span>  sequoia-chameleon-gnupg <span style="color:#75715e"># GnuPG reimplementation using Sequoia</span>
</span></span><span style="display:flex;"><span>];
</span></span></code></pre></div><p>The configuration for GnuPG was removed, but I <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#LINK-WHERE" title="Where link">kept</a> <code>gpg-agent</code> for anything that relies on it.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>services<span style="color:#f92672">.</span>gpg-agent <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Enable GnuPG private key agent</span>
</span></span><span style="display:flex;"><span>  enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Set default pinentry interface</span>
</span></span><span style="display:flex;"><span>  pinentry<span style="color:#f92672">.</span>package <span style="color:#f92672">=</span> lib<span style="color:#f92672">.</span>mkDefault pkgs<span style="color:#f92672">.</span>pinentry-gnome3;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>After applying the configuration and verifying that I am using the correct version, I tried importing the key again, which succeeded this time.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ sq version
</span></span><span style="display:flex;"><span>sq 1.4.0-pqc.1
</span></span><span style="display:flex;"><span>using sequoia-openpgp 2.2.0-pqc.1
</span></span><span style="display:flex;"><span>with cryptographic backend 3.6.1
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~]$ sq key import privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc
</span></span><span style="display:flex;"><span>Imported DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E pr@lyuk98.com &lt;pr@lyuk98.com&gt;
</span></span><span style="display:flex;"><span>(UNAUTHENTICATED) from privatekey-dadda93b070d0ba3a01371ec6bd6ec7b61b2859a0dcbb639193130ceb7b1609e.asc: new
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>Hint: If this is your key, you should  mark it as a fully trusted introducer:
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>  $ sq pki link authorize --unconstrained \
</span></span><span style="display:flex;"><span>    --cert=DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E --all
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>Hint: Otherwise, consider marking it as authenticated:
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>  $ sq pki link add --cert=DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E --all
</span></span><span style="display:flex;"><span>Imported 1 new key, updated 0 keys, 0 keys unchanged, 0 errors.
</span></span><span style="display:flex;"><span>Imported 1 new certificate, updated 0 certificates, 0 certificates unchanged, 0 errors.
</span></span></code></pre></div>
<p>As the output suggested, I ran <code>sq pki link authorize</code> to &ldquo;mark it as a fully trusted introducer&rdquo;.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ sq pki link authorize --unconstrained <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --cert=DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E --all
</span></span><span style="display:flex;"><span> - ┌ DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E
</span></span><span style="display:flex;"><span>   └ pr@lyuk98.com &lt;pr@lyuk98.com&gt;
</span></span><span style="display:flex;"><span>   - certification created
</span></span></code></pre></div><h1 id="using-sequoia-pgp">Using Sequoia PGP</h1>
<h2 id="encrypting-data-with-sq">Encrypting data with <code>sq</code></h2>

<details open>
	<summary>The key was ready, and I wanted to try encryption next. I wrote a small file and performed an encryption with <code>sq encrypt</code>.</summary>
	<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ systemd-ask-password &gt; document.txt
</span></span><span style="display:flex;"><span>🔐 Password: ••••••••                
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~]$ sq encrypt <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --output document.txt.pgp \
</span></span><span style="display:flex;"><span>  --for DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E \
</span></span><span style="display:flex;"><span>  --signer DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E \
</span></span><span style="display:flex;"><span>  document.txt
</span></span><span style="display:flex;"><span>Please enter the password to decrypt DADDA93B070D0BA3/DADDA93B070D0BA3, pr@lyuk98.com &lt;pr@lyuk98.com&gt; (authenticated): 
</span></span><span style="display:flex;"><span>Composing a message...
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span> - encrypted for pr@lyuk98.com &lt;pr@lyuk98.com&gt; (authenticated)
</span></span><span style="display:flex;"><span>   - using DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span> - signed by pr@lyuk98.com &lt;pr@lyuk98.com&gt; (authenticated)
</span></span><span style="display:flex;"><span>   - using DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~]$ cat document.txt.pgp
</span></span><span style="display:flex;"><span>-----BEGIN PGP MESSAGE-----
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>wcPUA4WtxDiulGdrI/c+yxq+LpXUVncmG4ag/oLZHuxZIe7fS+pdIWbk0GUdNdny
</span></span><span style="display:flex;"><span>5UnbBXh4SCBxc7lMwf/fkxGL+GXbT7LS1bpxEHbZ0UNIpsgSulg/ai3mSotLAnMu
</span></span><span style="display:flex;"><span>bD8KM5GPQNNYT/64QK5xE+UXFgq8opi51SqX/LHoX/2xDZ3FilesWuiEoAbtOHD2
</span></span><span style="display:flex;"><span>73sAmsDG2ew0agVgOj7qcKvly93DXuupe4U8RlxsmMwl95l0cAbW1vvMgzQZ61hB
</span></span><span style="display:flex;"><span>iVjLHEfO+xMtHjsByztlNBgNtED0gcJgseef0ssmCzT+JPs7OFiFhVMzqcXe3Y2d
</span></span><span style="display:flex;"><span>Kp65Nmh2M8+P4HaZ0s+13t9SHWt4fkwWG2TdbG7D+7s4kSXTFETEx2yWE2XWmPcy
</span></span><span style="display:flex;"><span>GdGTXwR39SJIIaT96Qmh5pahq6wg1/IXwucsobd6CXS9DFTqq62Pr1wTpzzarTE7
</span></span><span style="display:flex;"><span>pIMm3h03qR1rxOUtWM78odvshjOwirQCDd0Qat+dmgXpb/rJS/5eTDq9UPzGVnF1
</span></span><span style="display:flex;"><span>nt2FKBFjYvNnzya2tvLlMUZqsc4JHyZ2NxhOcLVt8eZp9Ekh2B7apk/g+yTFA/MN
</span></span><span style="display:flex;"><span>pI1o89uUq8G3ikO0Q7D2dpxq6xuflMNoEr07tqJnr7IJyGNS7e0LeWa4S87dgJcy
</span></span><span style="display:flex;"><span>fEWVCSiFBFHBH9L08nYvYtV/BqHYUzaXiNpr6M7UuqMsfz8E3bK9LRsb2oEIZsZr
</span></span><span style="display:flex;"><span>gm1lDQFP/Jkw18in3ksx6nLfIhA1CwotQWeZ4XmI08CX0E+zkNXX+bvtqO3bZNyO
</span></span><span style="display:flex;"><span>qDJj8HSKQ9mt394dGVRjfXErKbf+cQHMbs6oi0hfKxoqbNoocun+GeWK1KnRa5Gv
</span></span><span style="display:flex;"><span>90I8EaIl/YYaCXRTSdfQP/uHkvLgv1UX3NrD8upIwtZ69PR8lUNhn1mhlgXAwcig
</span></span><span style="display:flex;"><span>bf6SxxTM1LvLwMYShHO8lEElypWRsWaM9qMnh0LoodDc71/X7Enqo1ZNKmw3lnJu
</span></span><span style="display:flex;"><span>O2JS6gk/U7Xvk0JzCTGDfuOXAwpPjwenqt3nn2eS4mIWKpE7kmlqJ2vjJpTuwqHh
</span></span><span style="display:flex;"><span>R697T7Qv/YGcuip8yB6RFajgIs2d1xloOZXzLTXvmmAqxb5hTNKx/0Z0jJOYdMWL
</span></span><span style="display:flex;"><span>L/5g3S4tZ/mRWYP4MThUdaEkLFaT1bZR2ckVM+LN9WWyOYR/TfWwWDd9y1ujOVUJ
</span></span><span style="display:flex;"><span>+bagLjUoPSaQWzHJfW7NxZjMeIgK8aJTQHL73Qq2GNtaISBUx88JOnxxi4mJPYqO
</span></span><span style="display:flex;"><span>CLR2GJYRxkDOZWJdytP1J6E489zGfQ6EWv/xwI3bgEgePlOCmzOW4p1jLJ6vXLuV
</span></span><span style="display:flex;"><span>f3lsoSJ472EniIss9lws4kyTn/4R4Xelmmh+jCvJwL/og1mD6NqAHS/DfJDtduKW
</span></span><span style="display:flex;"><span>Z3NQWChI1bDikKgiPk4pjsCjE7LFZgpf2Y7MIztqbNY+4Apb3mKT5EwtYrkkci75
</span></span><span style="display:flex;"><span>VoTpz27JXyXube8gnWgNPvqyX/O5ihUWddvVDcEPnaBJCz+OIdH/lLe3qh5KOCue
</span></span><span style="display:flex;"><span>IhycLNpRKr92U+MX6msWeloqwA0YCCkz8lf7FPYpCX6X3qSTG70FNy4ANHOk3JE4
</span></span><span style="display:flex;"><span>mCbWQrg57fkTbSjH2xSIS069PUFpKm3SzW0Bq/tq78r6LYOaxz0xk+AL49SxbLs7
</span></span><span style="display:flex;"><span>886oRpRMGyRYFTyW63BcZnCi6innk8vEIsBXU7g0W5EskNwkRAN541lEy7uRU9xS
</span></span><span style="display:flex;"><span>L5/Avs9Ekl8EcZ7SR5fgVBJoyFzUE5BMe5SZzW3PNE8d/2zdrY+WjDnMe2RauTem
</span></span><span style="display:flex;"><span>6d/ynqktnN//WLjp/RQSRblUKXySI64PUQKrjtC+3L+fu7GuogUL9il0oNGReD2O
</span></span><span style="display:flex;"><span>tm54B203QbqV4NqIn4+5fYlF1ZOX4rJBUorTua2PjPSbygEu1+UN0tqGmJ7ikeP+
</span></span><span style="display:flex;"><span>sWrrTLLjTTpeGY7jZgSmZLcr2HOxXmAPzT5kFXrN663qW7em8LQ1fVvpUaki4tW/
</span></span><span style="display:flex;"><span>B2otXKOeIsnyOkstWJhMbQjIFcz6TQlNHuFs+F3sm2LhM2+1ZdA160PXVnz8TjBi
</span></span><span style="display:flex;"><span>AexzqlpzfO8reBpDpfrpbtBdzXpxRDV33Yx3AeseBw1KadxW6B1FCXXGtYXwOZTN
</span></span><span style="display:flex;"><span>vDDJmwdtBs6nETrG3jSNyyeMnZg0g8oIk3B2Bjwrdc/lINXmmav71qLzwcnFo1Rw
</span></span><span style="display:flex;"><span>nt27KoxT/AEOz2x/ps4yOjmX3m9sHIIonIYO4U0xlr8Q0F2K4PgQqU4tW9sezl1D
</span></span><span style="display:flex;"><span>lPRGZSYYKIw0KfynR8nYtK78AR15D9HBwm/rYy9ZQ47C3bpDp0v+apno1ykn4Mkp
</span></span><span style="display:flex;"><span>MUXUNyuIv2MvoePngbdrE6MC5ylfrGoWQKsZsg9r1bkLz2n8YrAJOE5/i+QoQPeW
</span></span><span style="display:flex;"><span>eAp7vjghyIhYac4GYaHnrlPsYcfcI5VhwVwmOaLAY+UNwcXMD+IvebGCEYWJvgkJ
</span></span><span style="display:flex;"><span>f1i+oaO9CFTLRjSkpaFoOTnSGB+/TgKCLm2VjmIBQV/iSCRRWJ666zvEKjG+ipJ1
</span></span><span style="display:flex;"><span>GqmLBxO5NTodmDfjHOfFUd2ceaNSLUssrAIW9Ns0Lb94zvgSjm7VQXhBa1ZMGgH5
</span></span><span style="display:flex;"><span>EGigrIQfsy8XH/rT6HTbEDyq7GYJ9BSRWNfvxfmEoB1hpMweWr8rOTSOtz9DfS5E
</span></span><span style="display:flex;"><span>8vH9MSwKAcPGgHZ/52hg3DKN97aAh88Ntn8VlCUawDefN5cph0qZkz8H2+ZtTYum
</span></span><span style="display:flex;"><span>WmiU39PJt5Lt9sF6JcCZVoSIG0ytEHizJJPJWUE0LrUo67oJbr6O1k55ymBl5UqA
</span></span><span style="display:flex;"><span>vd4AB6iUwVQZuFSIite+zZdVmPc218mAs5rFJoHv4rYXdW4FEWybqH+rSesTwhmp
</span></span><span style="display:flex;"><span>bTQD6r93XC2xA+eNxBNdroLV3/QCVPge2mvvDppyDxzAaLVPmfQf8fBlMK3+8mzQ
</span></span><span style="display:flex;"><span>KT3ilwCqeDJN8suk5UI2HNyBjN6JVTEymAEc4gQj5wHGQEfFP+xoUPTWKMeRNq4K
</span></span><span style="display:flex;"><span>hP1NYuh6YvKcLEvmZ8QAMk9Cw2pFEg99PiAbHzJLrnbh5L9N2DzpVG0QFsid+0wJ
</span></span><span style="display:flex;"><span>QxKk/3N4vwIEBRWIAEZPuuszMkNBAu4WvHq6Z9cjGrvBEfR+KzYSquNw0xMqdVQU
</span></span><span style="display:flex;"><span>wkBiqBmX15/NFDvhdZcklMRCkhtTXW9r+AjXxSjF1vg8FZZlkDg03AGUqu5phLRS
</span></span><span style="display:flex;"><span>dqKlnOnh++0iwuwcmHaoRZ5Uigthjk09r99+Au14VHzLaUVqhM3a2gxPDfsCdGJ2
</span></span><span style="display:flex;"><span>lNWdNTniqRi/53IfHgF+s5nba91z4AeQWP56kuvoRRz0Y7y/LqU1NMWjhVIkMElM
</span></span><span style="display:flex;"><span>I+rpe6UJAO7GuRnVM7AFlx5VO+jOPvOMD5ZMmUdflE4/aUoLnqeKpURAmTJbUB4O
</span></span><span style="display:flex;"><span>xEaO+9gpKMJaGDb+R9kiSU546PfgpXNdeEK8uu255FRml1caoKYUG7l3eB6pjMzL
</span></span><span style="display:flex;"><span>pP1r1aOGB5J0Ckzxim9XCGjjpzq0J9NJysvHZUidrctc6n1VqxcSEZIXJ3/gZClx
</span></span><span style="display:flex;"><span>AtEZtNVJWTO8FpwYvFVgCBbGXZu9BN3uFbxRQ86ukbMRwiHv/TUSZ0wNIZUoJV2F
</span></span><span style="display:flex;"><span>z7yqQJb+UjGjRpcXreFfi+hBygH9SE/gVvY2RDFtyvTgfMmEulpy1UuUO5gq46P6
</span></span><span style="display:flex;"><span>bRQRufgjB3iYJkdfd14igqebOKDSQgtXeih6lF2PwY+3yo5L0gClw/DiKNoSy0v4
</span></span><span style="display:flex;"><span>A/qPMNWeyfQnjjJoaS3zwmJsmWl7JUaEtPqoE1ZM1tsjZGGbwNCUNxSjm5HTsnIH
</span></span><span style="display:flex;"><span>6HjwQJ+gNtWap45WKs1HZoKTEgCjKfpSYraYBCimr+sZYXSQPVTfOPHGb5ylwDuc
</span></span><span style="display:flex;"><span>c37HMAfatzrFJisy3LQCwIaZ1nn7+saO2JZ3wPOzEObW2zx8opdM6AOpQM6tnfC5
</span></span><span style="display:flex;"><span>FgaVxX2tJodYZqCpUCeKuM1hC7EwEhZNZ6KFR20Plo5/QwTXikG4/SRmtN6Gawpl
</span></span><span style="display:flex;"><span>f1bodGRbce2QTDqITfW+ScUCLYo4y+yuAQoSMCvh2gWLRMPJ88I3V5jDEalvK7dT
</span></span><span style="display:flex;"><span>oierFwfsix3WXFMdBWyxlFXnzP3qSo6/4POaIqS95VySPSz15WzxSU9mMggD2M79
</span></span><span style="display:flex;"><span>UDtNxZcPiSTfmUlHtwtP2MVyn+HsoFbQ3Zq7wdnUcjxAjdbZg4hWmjIFfmzd2I/s
</span></span><span style="display:flex;"><span>ruIVBG8et26vTyrIjbwgNVvmCLjtbPCfaOl9rwcJyj8R133v3879LtmZX+15ZzKC
</span></span><span style="display:flex;"><span>JI2smJQpCMxvdXvOksZHa4n/WPXwxC48a1HxQS0LgjofoL9hu5bXISKw2lrz5sMP
</span></span><span style="display:flex;"><span>EAer3zGzvqj3bzfklQsF2IinjWtaVpgKvae3TzwYFIBV8n6woo8OniOsiWdWYz1c
</span></span><span style="display:flex;"><span>Wvcoo24fjlKZ7EUTBy+0dViQCT4Bd8MUXbS/pAZcEROoATpXhX1qOl78yDl77PSX
</span></span><span style="display:flex;"><span>Be0OT5F34s6B9cU42W/XsBiKAVWH9eEPZ4WpGYypStQ596WwrYgXVAdkeP/sETkV
</span></span><span style="display:flex;"><span>9bp3jZA1jemUIv6Ur24Zkki8iehh03eUyRlZgccqo3NiU+yjzLlwdAqBZu1bnLm+
</span></span><span style="display:flex;"><span>OTz1wVYPF0jc3fHh/1soJ1aO+r/ybsigrXw0hd3TArS8BOnyXEGKR+mk8zNy/PUE
</span></span><span style="display:flex;"><span>BOpwSiZ2KEZ0p5eEG3NUGL2J+6+KlzBynlSryAifup6eI0NY+8+8aMX/sz5ftX2d
</span></span><span style="display:flex;"><span>vmUqc8sIgcOQqkqNaBBaq3XJxEfJAyc9FLYWGgUVH8H30U0yaISE3rq6RpkG7xqf
</span></span><span style="display:flex;"><span>L+jCJAtsMOZgooiUbeK7uX5Q8oypb4YOdIORCRQqiWaLDatA9Nzhji+Vv+C/8qTY
</span></span><span style="display:flex;"><span>1AMjaOaKfTh65lyShhoWpZqZiTBuvB/u2w4qnRkokinHc2GtbISW0kZ03HfTxbfX
</span></span><span style="display:flex;"><span>EgDsC7jqSF8xCMWIY0cLTbBjESaBlTnKT5u3mOhoCFFyPnTilNPslo7UOnIcO0hn
</span></span><span style="display:flex;"><span>15AyddQ+2zz9/VwwaJa6hkhBsSyYnJCQCaKvroYtNc9KIKgEqoUO2yrFdxI33Arl
</span></span><span style="display:flex;"><span>mBuD94XDqYbg7CLgO2CR/RJSKqE0nbjdaSsqldmxFeZUN1w4JPhFzak6VfCVR2ox
</span></span><span style="display:flex;"><span>AFerBR4a5WiTVIsLAGAGQjiDp1v45b7Mi6OXDA+hX8t5NRJJyjgrTSuBMpmCLSR/
</span></span><span style="display:flex;"><span>Iboc4A+1DD9pjKQ1S9rmDr8zSu8JQPIhS+ec9wdP4bpyPWIdkUv/jjw1+htAVP5y
</span></span><span style="display:flex;"><span>JWTjf6yAHgW7WbQRqbXfVOv2aw4QHTGuO7OrNBAETaBtbHGaXXzBY0abCF4C2BFi
</span></span><span style="display:flex;"><span>tqeqkG54po3AplmGPVYPopu6BiDVH0pt5v06cE6fReEeEF1XKO67FW7FVmSVekeJ
</span></span><span style="display:flex;"><span>EfXU/xn9bjkdQnPKBphLlL9dvikcRFPN48/kZnIzy2pQoXTOtaWXc8GWjSNafm3j
</span></span><span style="display:flex;"><span>ZnNA0RJieFXScAB2V9d1Tq+e6atwIGcsfYo/rBJTJmPmx4N4P5Oxe3TtjYlmZYrw
</span></span><span style="display:flex;"><span>pW84ilhWg6zPQ7RalP3sJP8rkWvJC42iB6pw7VCl1lwhw9y6SieGl/zg1ZW0dfFn
</span></span><span style="display:flex;"><span>xb2TogQx8mADhr3xokUxMMCx2LJoDQ9RniRgMDiaaR5FIHZfHM7B0Xe8pzyj6R8F
</span></span><span style="display:flex;"><span>FXITr9XT/lDqI8xbJHQGjaJ24dYsj+1JkIYC+pygIdG2Rc8GhqRDBy83ZoVwT7Dg
</span></span><span style="display:flex;"><span>Cja9V2xnkKX++6LbSZVbR7ulQl+s5p5UUigwW0CDrNKmkz8vhy1yjAgzllRBywsN
</span></span><span style="display:flex;"><span>BZ/COeilnb3Nakfu89OF/CuSGBMAkSSpXAaeA5x0Im0mFbpIRfkqZU82H6HFjK+7
</span></span><span style="display:flex;"><span>6jiga1OfzdZFhwkeYBiOaF4+7eAVR86iboUYtyNpMe4pOjy64p+o+AmQOS3Lu89k
</span></span><span style="display:flex;"><span>cViHTfwPdSgUk2ekVjIJ4NPhoj62WQCTtYdr1WLAH8qeFIAjkQtgFB4AX0YPO/1C
</span></span><span style="display:flex;"><span>9V1GoTtieBqwlzd/DPa7GLfzhLPFKU0PK1H5xHChmQn00WbUQvafV0YwF+gfgja/
</span></span><span style="display:flex;"><span>kdS37GzaUrJ0IXobcbW+eiFcIAyTAixB2ppa9whSZmbTljCt4ZNlHPv8oY5/GMoo
</span></span><span style="display:flex;"><span>fNyK6ygLpwpLir5SMqiLW1OgDM14jwnuJkB6zvFmKHvsuicT1AtZqPEe2ZLWVFen
</span></span><span style="display:flex;"><span>SVvgZ4KHAlm9hX487plG/CLf5OnqJ7reZtUkzpNlsuhQw8fOBkBwlSs8b+lvQDLj
</span></span><span style="display:flex;"><span>7PHHYJekm0q++tP9aRXnG6HYhK8owXex2IPbm4wRTkCb3pR2kwVmye6N3EP/oiM3
</span></span><span style="display:flex;"><span>2XJkbKyenOShP5whdA6I086wxpEQ9PZY3xC+Qi+1fCao/4G6t322ceq+LZCQ+A3V
</span></span><span style="display:flex;"><span>cyOaqPaIJr66KgaVE0JcYexWFAaRUVl9ByivmeO8JP3N0KdTiNFUg7pC8BfSxQ/N
</span></span><span style="display:flex;"><span>NIxOXnT4B7otYA7uAq2LRq0HasnKI8KWOFKeSqUCWX6CPyZdiZHsIuAtsilKPKfW
</span></span><span style="display:flex;"><span>DtYEe5HVjLLLbndgXPfYpFkaqUqlJ8vA7Q7yXyOp19YnPbNOMB+fnJ3mNyXYVzaM
</span></span><span style="display:flex;"><span>yVGRvCQ6X9do/HjNmp3kCIlc842eYIfX9k/QXAEuzbF3/1Rzl5rH24xY1a8WZCIi
</span></span><span style="display:flex;"><span>sevR0mfyUA==
</span></span><span style="display:flex;"><span>=QefM
</span></span><span style="display:flex;"><span>-----END PGP MESSAGE-----
</span></span></code></pre></div></details>

<p>I was initially surprised by the size of what appeared to be an encryption overhead. Following the previous command, the decryption was next, revealing the plaintext <code>password</code> as a result.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ sq decrypt --output decrypted.txt document.txt.pgp
</span></span><span style="display:flex;"><span>Please enter the password to decrypt 85ADC438AE94676B, pr@lyuk98.com &lt;pr@lyuk98.com&gt; (authenticated) (blank to skip): 
</span></span><span style="display:flex;"><span>Encrypted using AES-256
</span></span><span style="display:flex;"><span>Authenticating DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E (pr@lyuk98.com
</span></span><span style="display:flex;"><span>&lt;pr@lyuk98.com&gt;) using the web of trust:
</span></span><span style="display:flex;"><span>  Fully authenticated (120 of 120) DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E,
</span></span><span style="display:flex;"><span>  pr@lyuk98.com &lt;pr@lyuk98.com&gt;
</span></span><span style="display:flex;"><span>    ◯─┬ 6887A438706BAE97C40556E7C3F234E3B569B03A
</span></span><span style="display:flex;"><span>    │ └ (Local Trust Root)
</span></span><span style="display:flex;"><span>    │
</span></span><span style="display:flex;"><span>    │  certified the following binding on 2026‑05‑21 as a meta-introducer (depth: unconstrained)
</span></span><span style="display:flex;"><span>    │
</span></span><span style="display:flex;"><span>    └─┬ DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E
</span></span><span style="display:flex;"><span>      └ pr@lyuk98.com &lt;pr@lyuk98.com&gt;
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>  Authenticated signature made by DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E
</span></span><span style="display:flex;"><span>  (pr@lyuk98.com &lt;pr@lyuk98.com&gt;)
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>Decrypted by DADDA93B070D0BA3A01371EC6BD6EC7B61B2859A0DCBB639193130CEB7B1609E, pr@lyuk98.com
</span></span><span style="display:flex;"><span>&lt;pr@lyuk98.com&gt; (authenticated)
</span></span><span style="display:flex;"><span>1 authenticated signature.
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~]$ cat decrypted.txt
</span></span><span style="display:flex;"><span>password
</span></span></code></pre></div><h2 id="authenticating-commits-with-sequoia-git">Authenticating commits with Sequoia <code>git</code></h2>
<p>I have always <a href="https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work" title="Git - Signing Your Work">signed my Git commits</a> ever since I created my first OpenPGP key. Nobody forced me to do so, but I felt it was important to be able to verify that the commits were not tampered with in any way. As I applied the practice to all my personal projects, some <a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration" title="Git - Git Configuration">Git configuration</a> settings were set in advance for convenience.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ git config list --global | grep sign
</span></span><span style="display:flex;"><span>commit.gpgsign=true
</span></span><span style="display:flex;"><span>tag.gpgsign=true
</span></span><span style="display:flex;"><span>user.signingkey=270CB11B1189E79A17DCB7831BDAFDC5D60E735C
</span></span></code></pre></div><p>And while being introduced to Sequoia, I found an interesting project: <a href="https://sequoia-pgp.gitlab.io/sequoia-git/" title="Sequoia git">Sequoia <code>git</code></a>.</p>
<blockquote cite="https://sequoia-pgp.gitlab.io/sequoia-git/"><p><strong>Sequoia git</strong> is a system to authenticate changes to a VCS repository. A project embeds a signing policy in their git repository, which says who is allowed to add commits, make releases, and modify the policy. <code>sq-git log</code> can then authenticate a range of commits using the embedded policy.</p>
</blockquote>
<p>It was interesting, as I could apparently verify not only that the commits were signed, but also that they were signed by trusted contributors.</p>

<details open>
	<summary>Firstly, though, I <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#LINK-WHERE" title="Where link">configured</a> what Git uses for signing commits and tags. Instead of GnuPG, its reimplementation named <a href="https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg" title="sequoia-pgp / sequoia-chameleon-gnupg · GitLab">Chameleon</a> was used.</summary>
	<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>programs<span style="color:#f92672">.</span>git <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Use GnuPG-compatible Sequoia Chameleon for signing commits</span>
</span></span><span style="display:flex;"><span>  signing<span style="color:#f92672">.</span>signer <span style="color:#f92672">=</span> lib<span style="color:#f92672">.</span>getExe pkgs<span style="color:#f92672">.</span>sequoia-chameleon-gnupg;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div></details>

<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~]$ git config list --global | grep openpgp
</span></span><span style="display:flex;"><span>gpg.format=openpgp
</span></span><span style="display:flex;"><span>gpg.openpgp.program=/nix/store/wd6m7najxjxfchqh0d3m9mbcykczhsj7-sequoia-chameleon-gnupg-0.13.1/bin/gpg-sq
</span></span></code></pre></div><p>With that taken care of, starting with <a href="https://github.com/lyuk98/nixos-config" title="lyuk98/nixos-config: NixOS configurations">my repository for NixOS configuration</a>, I ran <code>sq-git policy authorize</code> to add myself as a contributor. The fingerprint of the <a href="https://openpgpkey.lyuk98.com/.well-known/openpgpkey/lyuk98.com/hu/k1cpuqmq4kb1hbfjbtfcfk5t9bw5fx6h">existing key</a> (that was used to sign <em>all</em> of my commits there) was supplied with the <code>--cert</code> option.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~/nixos-config]$ sq-git policy authorize <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --project-maintainer \
</span></span><span style="display:flex;"><span>  --cert 270CB11B1189E79A17DCB7831BDAFDC5D60E735C \
</span></span><span style="display:flex;"><span>  lyuk98
</span></span><span style="display:flex;"><span>  - User lyuk98 was added.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right sign-commit.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right sign-tag.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right sign-archive.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right add-user.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right retire-user.
</span></span><span style="display:flex;"><span>  - User lyuk98 was granted the right audit.
</span></span><span style="display:flex;"><span>  - User lyuk98: new certificate 270CB11B1189E79A17DCB7831BDAFDC5D60E735C.
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~/nixos-config]$ git add openpgp-policy.toml
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>[lyuk98@framework:~/nixos-config]$ git commit --message <span style="color:#e6db74">&#34;Add OpenPGP signing policy&#34;</span>
</span></span></code></pre></div><p>After committing the policy document, I first set the trust root, which is the start of a range of commits that I wish to verify, to <a href="https://github.com/lyuk98/nixos-config/commit/a1d2d2fae42ae6155955422cf937b6442430cb44" title="Create NixOS configuration · lyuk98/nixos-config@a1d2d2f">the first commit</a> made to the repository.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~/nixos-config]$ git config set sequoia.trustRoot a1d2d2fae42ae6155955422cf937b6442430cb44
</span></span></code></pre></div><p>By running <code>sq-git log</code>, I could then verify that everything from the trust root was signed with the specified certificate.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash-session" data-lang="bash-session"><span style="display:flex;"><span>[lyuk98@framework:~/nixos-config]$ sq-git log --policy-file openpgp-policy.toml
</span></span><span style="display:flex;"><span>Verified that there is an authenticated path from the trust root
</span></span><span style="display:flex;"><span>a1d2d2fae42ae6155955422cf937b6442430cb44 to 45fd0dd46007157638b3dd394e1b894e089c9464.
</span></span></code></pre></div><p>Omitting <code>--policy-file</code> did not work, surprisingly, even though the default policy document it should look for is <code>openpgp-policy.toml</code>.</p>
<h1 id="closing-thoughts">Closing thoughts</h1>
<p>After learning about the &ldquo;schism&rdquo; that I have <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#openpgp-v6-and-librepgp" title="Post-quantum keys and Sequoia PGP">previously mentioned</a>, the new post-quantum key did not yet look like a perfect replacement for my existing keys, at least not in the foreseeable future. It was troubling, as fragmented and competing standards would not help end-to-end encrypted email communication reach a wider audience.</p>
<p>As a result, I decided to continue using my previous set of keys for the time being. The reasons were:</p>
<ul>
<li>Elliptic-curve cryptography is currently not considered insecure</li>
<li>The aforementioned &ldquo;harvest now, decrypt later&rdquo; attack is not the most relevant threat to me</li>
<li>Inconveniences introduced by OpenPGP v6 keys currently outweigh the potential security benefits in my case</li>
</ul>
<p>It was unfortunate, but I do not think everything I have done so far was for nothing. Before I worked on this, GnuPG was pretty much synonymous with OpenPGP to me; with Sequoia PGP, I realised the importance of recognising different implementations of the encryption standard. Furthermore, I now have a way to easily verify that my commits are signed according to the set rules.</p>
<p>My primary OpenPGP key can be discovered via <a href="https://docs.keyoxide.org/wiki/web-key-directory/" title="Web Key Directory — Keyoxide Docs">Web Key Directory (WKD)</a>, which in turn directs to the public key <a href="https://openpgpkey.lyuk98.com/.well-known/openpgpkey/lyuk98.com/hu/k1cpuqmq4kb1hbfjbtfcfk5t9bw5fx6h">hosted at my server</a>. Its fingerprint is as follows:</p>
<pre tabindex="0"><code>270C B11B 1189 E79A 17DC  B783 1BDA FDC5 D60E 735C
</code></pre><div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Technically, GnuPG implements the now-obsolete standard, <a href="https://www.ietf.org/rfc/rfc4880.txt">RFC 4880</a>. More on that is discussed <a href="/blog/2026/05/post-quantum-keys-and-sequoia-pgp/#openpgp-v6-and-librepgp" title="Post-quantum keys and Sequoia PGP">in the later part</a> of this post.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
