<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>COINKITE Blog</title>
    <description>World&apos;s First Bitcoin Credit Stick Wallet</description>
    <link>https://blog.coinkite.com/</link>
    <atom:link href="https://blog.coinkite.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 27 Oct 2026 04:52:10 -1200</pubDate>
    <lastBuildDate>Tue, 27 Oct 2026 04:52:10 -1200</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Understanding the COLDCARD Mk5 and Q Security Model</title>
        <description>&lt;p&gt;COLDCARD Mk5 and Q look very different, but they use the same core security
architecture: two secure elements from different vendors, an STM32
microcontroller, locally verified firmware, a clear case, and no required
companion app.&lt;/p&gt;

&lt;p&gt;This is the current version of our &lt;a href=&quot;/understanding-mk4-security-model/&quot;&gt;original Mk4 security-model
explainer&lt;/a&gt;, which remains online. The
original was written by guest author Tristan Borges Solari. This edition keeps
the useful parts and updates the setup, hardware, firmware, and seed-generation
details for Mk5 and Q.&lt;/p&gt;

&lt;h2 id=&quot;before-you-set-up-a-wallet&quot;&gt;Before You Set Up a Wallet&lt;/h2&gt;

&lt;p&gt;Inspect the device, set the PIN, then stop at the main menu. Check the
&lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;current security status&lt;/a&gt;, install the
&lt;a href=&quot;https://coldcard.com/downloads/all&quot;&gt;current standard firmware&lt;/a&gt;, and
&lt;a href=&quot;https://coldcard.com/docs/upgrade/&quot;&gt;verify the signed download&lt;/a&gt; before you
generate or import a seed.&lt;/p&gt;

&lt;p&gt;Firmware changes the device. It does not change an existing seed. If the
security status says a seed requires migration, follow the migration guidance;
an upgrade alone is not a migration.&lt;/p&gt;

&lt;h2 id=&quot;start-with-what-you-can-inspect&quot;&gt;Start with What You Can Inspect&lt;/h2&gt;

&lt;p&gt;Each COLDCARD ships in a tamper-evident bag with a unique number. Before setup,
check the bag for damage and confirm that the number on the bag, the tear-off
tab inside, and the number shown by the COLDCARD all match.&lt;/p&gt;

&lt;p&gt;The clear case is another deliberate check. You can see the board, the chips,
and the exposed traces instead of trusting a sealed black box. Neither a bag
nor a clear case is magic. Together they make interception and physical changes
harder to hide.&lt;/p&gt;

&lt;p&gt;If the packaging looks wrong, the numbers do not match, or the board looks
altered, stop. Do not enter a PIN or seed.&lt;/p&gt;

&lt;h2 id=&quot;authenticity-without-a-required-app&quot;&gt;Authenticity Without a Required App&lt;/h2&gt;

&lt;p&gt;Every authenticity system has tradeoffs. A remote attestation service can be
convenient, but it also creates another central service and a valuable key for
attackers to target. COLDCARD keeps its core checks local: inspect the clear
case, match the bag number, verify the signed firmware, and check the
&lt;strong&gt;GENUINE/CAUTION&lt;/strong&gt; LEDs.&lt;/p&gt;

&lt;p&gt;At startup, the bootloader checks the firmware and flash contents. The red
&lt;strong&gt;CAUTION&lt;/strong&gt; LED is on while verification runs. The green &lt;strong&gt;GENUINE&lt;/strong&gt; LED turns
on after the expected firmware state is confirmed. The LEDs are connected to
the secure-element path; ordinary firmware cannot simply draw a green light on
the screen and call itself genuine.&lt;/p&gt;

&lt;p&gt;If the red light remains on, do not enter your PIN. A red light can also appear
after a firmware change until the PIN holder reviews and blesses it. Follow the
&lt;a href=&quot;https://coldcard.com/docs/upgrade/&quot;&gt;firmware instructions&lt;/a&gt; rather than
guessing why it changed.&lt;/p&gt;

&lt;p&gt;This design still has trust boundaries. Coinkite signs standard firmware, and
you must obtain the verification key through a channel you trust. The firmware
source, signed release manifest, reproducible-build process, and on-device
indicator make that boundary inspectable instead of hiding it behind an app.&lt;/p&gt;

&lt;h2 id=&quot;the-pin-is-more-than-a-lock-screen&quot;&gt;The PIN Is More Than a Lock Screen&lt;/h2&gt;

&lt;p&gt;The main PIN has a prefix and suffix. After the prefix, COLDCARD shows two
anti-phishing words derived from secrets unique to that device. Record those
words during setup and check them before entering the suffix in the future.&lt;/p&gt;

&lt;p&gt;A replacement device should not produce the same words for the same prefix.
That makes the words a useful warning against an evil-maid or look-alike-device
attack. They are a check only if you remember to check them.&lt;/p&gt;

&lt;p&gt;PIN attempts are rate-limited and finite. Mk5 and Q also support
&lt;a href=&quot;https://coldcard.com/docs/pins/&quot;&gt;Trick PINs&lt;/a&gt; that can open a duress wallet,
wipe the seed, start a countdown, or brick the device. These are advanced
controls. Test any Trick PIN with a disposable setup before depending on it.&lt;/p&gt;

&lt;h2 id=&quot;two-secure-elements-and-one-mcu&quot;&gt;Two Secure Elements and One MCU&lt;/h2&gt;

&lt;p&gt;Mk5 and Q use three chips from three vendors in the secret-protection path:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SE1:&lt;/strong&gt; a Microchip ATECC608-family secure element;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SE2:&lt;/strong&gt; a Maxim DS28C36B secure element; and&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MCU:&lt;/strong&gt; an STMicroelectronics STM32L4S5 microcontroller.&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
  &lt;a href=&quot;/images/posts-img/q-mk5-shoot-these.png&quot;&gt;&lt;img src=&quot;/images/posts-img/q-mk5-shoot-these.png&quot; alt=&quot;COLDCARD Q and Mk5 with a close-up of the two secure elements&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;COLDCARD Q and Mk5 share the same dual-secure-element design.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;SE1 stores the seed material in encrypted form, but SE1 does not hold the full
key needed to decrypt it. The decryption path combines secrets held by the MCU
and SE2 and requires the correct PIN. Pairing secrets and authenticated
communications protect the short electrical links between the chips.&lt;/p&gt;

&lt;p&gt;The design goal is straightforward: compromising one chip should not be enough
to recover the wallet secret. An attacker targeting the stored seed must get
through the MCU, both secure elements, and the PIN path rather than depending
on one component.&lt;/p&gt;

&lt;p&gt;The secure elements do not implement Bitcoin transaction signing. Bitcoin
operations run on the MCU using the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libsecp256k1&lt;/code&gt; cryptographic library
used by Bitcoin Core. The secure elements protect secrets and enforce parts of
the access-control path; the public firmware implements the Bitcoin logic.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;/images/posts-img/mk5/mk5-secure-elements.jpg&quot;&gt;&lt;img src=&quot;/images/posts-img/mk5/mk5-secure-elements.jpg&quot; alt=&quot;Close-up of the secure elements visible through a COLDCARD Mk5 case&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;The secure elements remain visible through the Mk5 case.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The detailed key relationships, pairing operations, ECDH exchanges, wipe keys,
and storage slots are documented in the public
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/secure-elements.md&quot;&gt;dual-secure-element design&lt;/a&gt;
and &lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/security-model.md&quot;&gt;security-model document&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;current-seed-generation-uses-device-and-user-entropy&quot;&gt;Current Seed Generation Uses Device and User Entropy&lt;/h2&gt;

&lt;p&gt;Current standard firmware does not ask you to trust one random-number source.
For each new seed, COLDCARD combines fresh input from the STM32 hardware TRNG,
SE1, and SE2. It then requires one physical user-entropy method:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;at least 65 key presses with unpredictable timing;&lt;/li&gt;
  &lt;li&gt;at least 50 rolls of a physical six-sided die; or&lt;/li&gt;
  &lt;li&gt;at least 128 physical coin flips.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You cannot skip this step. Dice rolls are our recommended standard method.&lt;/p&gt;

&lt;p&gt;Current firmware can also display the full device-generated input as 24 BIP-39
words before dice or coin input is mixed in. The public
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/verify_seed_mix.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;verify_seed_mix.py&lt;/code&gt;&lt;/a&gt;
tool can recompute the result offline for dice rolls or coin flips. It does not
support key-mashing input.&lt;/p&gt;

&lt;p&gt;Verification exposes wallet secrets. Anyone who obtains the displayed device
words together with your complete dice or coin sequence can recreate the
wallet. The safest way to test the math is with a disposable run that will
never hold funds, then start over with new device words and fresh, unrecorded
rolls or flips for the actual wallet.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href=&quot;https://coldcard.com/docs/master-seed/&quot;&gt;Master Seed guide&lt;/a&gt; for the
current workflow and the &lt;a href=&quot;https://coldcard.com/docs/verifying-dice-roll-math/&quot;&gt;verification guide&lt;/a&gt;
before using the advanced checks.&lt;/p&gt;

&lt;h2 id=&quot;the-firmware-is-part-of-the-security-model&quot;&gt;The Firmware Is Part of the Security Model&lt;/h2&gt;

&lt;p&gt;COLDCARD firmware is developed in public. You can inspect the
&lt;a href=&quot;https://github.com/Coldcard/firmware&quot;&gt;source&lt;/a&gt;, build it, and compare builds
with a signed release. The bootloader verifies firmware before normal use, and
the GENUINE/CAUTION system reports the approved flash state locally.&lt;/p&gt;

&lt;p&gt;That does not make software bug-free. It makes changes reviewable and gives
users several independent checks: source, release history, signed hashes,
reproducible builds, and the device’s own boot verification.&lt;/p&gt;

&lt;p&gt;Keep the firmware current. Verify the release manifest and file hash yourself.
Do not rely on a version number copied from an old article, video, or social
post.&lt;/p&gt;

&lt;h2 id=&quot;signing-without-handing-the-keys-to-an-app&quot;&gt;Signing Without Handing the Keys to an App&lt;/h2&gt;

&lt;p&gt;The wallet software on your computer or phone prepares a PSBT. COLDCARD parses
it and shows the transaction details for review. If you approve it, COLDCARD
signs on the device and returns the signed transaction.&lt;/p&gt;

&lt;p&gt;Mk5 supports MicroSD, NFC, USB-C, and Virtual Disk workflows. Q adds a camera,
QR signing, two MicroSD slots, a larger screen, and a full keyboard. Neither
model requires a COLDCARD account or a particular companion wallet.&lt;/p&gt;

&lt;p&gt;The channel is not the final security decision. A MicroSD card, QR code, NFC,
or USB link can carry hostile data. The important boundary is that COLDCARD
parses the request, shows what it intends to sign, and waits for your approval.
Read the screen. Verify destination addresses and amounts before signing.&lt;/p&gt;

&lt;h2 id=&quot;what-still-depends-on-you&quot;&gt;What Still Depends on You&lt;/h2&gt;

&lt;p&gt;No hardware design can fix a bad recovery plan. You still need to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;keep the device on current, verified firmware;&lt;/li&gt;
  &lt;li&gt;protect the seed backup from theft and loss;&lt;/li&gt;
  &lt;li&gt;use a strong, unique &lt;a href=&quot;https://coldcard.com/docs/passphrase/&quot;&gt;BIP-39 passphrase&lt;/a&gt;
for a wallet whose loss would be materially harmful, back it up separately,
and test recovery;&lt;/li&gt;
  &lt;li&gt;verify receive addresses and transaction details on the COLDCARD screen; and&lt;/li&gt;
  &lt;li&gt;consider multisig when its extra recovery and operating complexity fits the
amount and threat model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point of the Mk5 and Q security model is not that any one chip, bag, light,
or workflow is perfect. The point is that the layers fail differently and can
be checked in different ways.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Get COLDCARD Q or Mk5&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;technical-references&quot;&gt;Technical References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;Current COLDCARD security status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/docs/physical-notes/&quot;&gt;Physical security notes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/docs/hardware/&quot;&gt;Hardware features and GENUINE/CAUTION LEDs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/security-model.md&quot;&gt;Mk4/Mk5/Q security model&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/secure-elements.md&quot;&gt;Dual secure elements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Coldcard/firmware&quot;&gt;Firmware source&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/docs/upgrade/&quot;&gt;Firmware verification and upgrade guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/mk5&quot;&gt;COLDCARD Mk5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://coldcard.com/q&quot;&gt;COLDCARD Q&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 26 Oct 2026 00:00:00 -1200</pubDate>
        <link>https://blog.coinkite.com/understanding-mk5-q-security-model/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/understanding-mk5-q-security-model/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>COLDCARD Firmware 5.6.3 &amp; 1.5.3Q: Codex32 and Shamir Backups</title>
        <description>&lt;p&gt;COLDCARD firmware &lt;strong&gt;5.6.3 for Mk4/Mk5&lt;/strong&gt; and &lt;strong&gt;1.5.3Q for Q&lt;/strong&gt; let you split the
wallet already on your device into Codex32 Shamir shares. No funds move, and
the wallet does not change.&lt;/p&gt;

&lt;p&gt;Codex32 is the main feature. The release also adds optional Seed Vault names
for temporary seeds, PSBTv2 locktime support, and several signing and parsing
fixes.&lt;/p&gt;

&lt;h2 id=&quot;codex32-and-shamir-secret-sharing&quot;&gt;Codex32 and Shamir Secret Sharing&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki&quot;&gt;Codex32&lt;/a&gt;,
defined by BIP-93, is a checksummed format for wallet secrets. It includes a
Shamir secret-sharing scheme for manual backup and recovery.&lt;/p&gt;

&lt;p&gt;A normal seed backup is all-or-nothing. Shamir sharing lets you make several
shares and choose how many are needed for recovery. With a 2-of-3 set, any two
shares recover the wallet and one share does not reveal its secret.&lt;/p&gt;

&lt;p&gt;COLDCARD supports sets of &lt;strong&gt;two through nine shares&lt;/strong&gt;, with a threshold from
two through the total. You can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;generate a 128- or 256-bit Codex32 wallet&lt;/li&gt;
  &lt;li&gt;import a complete Codex32 secret&lt;/li&gt;
  &lt;li&gt;split the active wallet with &lt;strong&gt;Shamir Split&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;restore a wallet with &lt;strong&gt;Shamir Recover&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;derive another share for an existing set&lt;/li&gt;
  &lt;li&gt;calculate the checksum for a supported Codex32 header and payload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a blank COLDCARD, generation, import, recovery, derivation, and checksum
calculation are available from the new &lt;strong&gt;Codex32&lt;/strong&gt; menu. To split the active
wallet, select:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Advanced/Tools &amp;gt; Danger Zone &amp;gt; Seed Functions &amp;gt; Shamir Split&lt;/code&gt;&lt;/p&gt;

&lt;figure style=&quot;width:min(100%, 515px); margin:1.5rem auto;&quot;&gt;
  &lt;a href=&quot;/images/posts-img/codex32/q-codex32-menu.png&quot;&gt;&lt;img style=&quot;width:100%; height:auto; margin:0;&quot; src=&quot;/images/posts-img/codex32/q-codex32-menu.png&quot; width=&quot;515&quot; height=&quot;502&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;The new Codex32 menu on COLDCARD Q&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;The new Codex32 menu on COLDCARD Q.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Calculate Checksum&lt;/strong&gt; completes a Codex32 secret or share from its header and
payload without importing a wallet. Mk4 and Mk5 shorten the menu label to
&lt;strong&gt;Calc Checksum&lt;/strong&gt;. The calculation uses exactly what you enter; it cannot find
or repair an error already present in the text.&lt;/p&gt;

&lt;p&gt;COLDCARD picks an encoding from the active wallet. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt; holds raw BIP-32
master-seed bytes. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt; holds the entropy behind English BIP-39 seed words.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt; holds extended private-key material, including an active passphrase
wallet. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt; are COLDCARD extensions, so recovery software must
support them explicitly.&lt;/p&gt;

&lt;p&gt;Passphrases change what gets backed up. Splitting the original words wallet
creates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt; shares. Recovery returns the words, and you apply the passphrase
again. Splitting while the passphrase wallet is active creates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt; shares.
Those shares recover that wallet directly; they do not contain the original
words or passphrase.&lt;/p&gt;

&lt;p&gt;COLDCARD does not keep a share set after a split. Record and compare every
share before leaving the split screen. Splitting again creates a different set,
so shares from separate splits cannot be mixed.&lt;/p&gt;

&lt;p&gt;QR codes, NFC exports, and text files contain shares in plaintext. Keep fewer
than the threshold in any one place. Before relying on the set, recover from
the exact copies you plan to store and reproduce a known receive address. A
matching fingerprint alone is not a complete recovery test.&lt;/p&gt;

&lt;figure style=&quot;width:min(100%, 515px); margin:1.5rem auto;&quot;&gt;
  &lt;a href=&quot;/images/posts-img/codex32/q-share-list.png&quot;&gt;&lt;img style=&quot;width:100%; height:auto; margin:0;&quot; src=&quot;/images/posts-img/codex32/q-share-list.png&quot; width=&quot;515&quot; height=&quot;502&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;COLDCARD Q listing five shares from a two-of-five Codex32 split&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;A 2-of-5 share set ready to record and store separately.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The full &lt;a href=&quot;https://coldcard.com/docs/codex32/&quot;&gt;Codex32 guide&lt;/a&gt; covers saved
recovery sessions, passphrase examples, backup limits, and recovery testing.
Source and review history are in
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/819&quot;&gt;Coldcard/firmware PR #819&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;seed-vault-names-for-temporary-seeds&quot;&gt;Seed Vault Names for Temporary Seeds&lt;/h2&gt;

&lt;p&gt;Temporary seeds normally appear at the top of the home menu as a fingerprint
in square brackets. A new master-seed setting can replace that fingerprint with
the matching Seed Vault label.&lt;/p&gt;

&lt;p&gt;On Q, select:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Settings &amp;gt; Buried Settings &amp;gt; Temporary Seed Names &amp;gt; Use Names&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On Mk4 and Mk5, the shorter menu label is used:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Settings &amp;gt; Buried Settings &amp;gt; Tmp Seed Names &amp;gt; Use Names&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the active temporary seed matches a Seed Vault entry named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Travel&lt;/code&gt;, for
example, the home menu shows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Travel]&lt;/code&gt;. COLDCARD falls back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[XFP]&lt;/code&gt; when
the setting is disabled, no matching vault entry exists, or the label is too
wide to fit. Master-seed fingerprints continue to use angle brackets.&lt;/p&gt;

&lt;h2 id=&quot;psbtv2-locktime-and-parsing&quot;&gt;PSBTv2 Locktime and Parsing&lt;/h2&gt;

&lt;p&gt;PSBTv2 can put required block-height or timestamp locktimes on individual
inputs. COLDCARD now derives the transaction-level locktime from those
per-input requirements according to BIP-370.&lt;/p&gt;

&lt;p&gt;When several inputs specify compatible requirements, the transaction uses the
required maximum. A per-input requirement takes precedence over the global
fallback locktime. If height-only and time-only requirements cannot be
satisfied by one transaction locktime, COLDCARD rejects the PSBT instead of
signing an inconsistent transaction.&lt;/p&gt;

&lt;p&gt;The parser also rejects more malformed PSBTv2 files before signing:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;singleton global, input, and output fields carrying unexpected key data;&lt;/li&gt;
  &lt;li&gt;non-canonical global input or output counts with trailing bytes; and&lt;/li&gt;
  &lt;li&gt;PSBTv2 files that omit the required explicit global version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;fixes-and-hardening&quot;&gt;Fixes and Hardening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;COLDCARD now warns before installing firmware signed by an external
contributor or downgrading from the currently installed version.&lt;/li&gt;
  &lt;li&gt;On Q, &lt;strong&gt;Ready To Sign&lt;/strong&gt; and the &lt;strong&gt;Key Teleport&lt;/strong&gt; retry screen now accept only
the expected QR types. Scanning seed words or an extended private key there
no longer risks replacing the master seed.&lt;/li&gt;
  &lt;li&gt;Message-signing input supplied through NFC, QR, or a MicroSD &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.json&lt;/code&gt; file no
longer crashes the device when the JSON contains a number, string, list, or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt;. COLDCARD treats it as a plain-text request instead. Thanks to
&lt;a href=&quot;https://github.com/Amiga500&quot;&gt;@Amiga500&lt;/a&gt; for the report and fix.&lt;/li&gt;
  &lt;li&gt;After a failed signing attempt, COLDCARD clears the old output-verification
state before checking outputs again.&lt;/li&gt;
  &lt;li&gt;In Delta Mode, the device wipes before reading duress-wallet slot data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-to-update&quot;&gt;How to Update&lt;/h2&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://coldcard.com/downloads/all&quot;&gt;Download COLDCARD Firmware&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download firmware only from the
&lt;a href=&quot;https://coldcard.com/downloads/all&quot;&gt;official COLDCARD downloads page&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Follow the instructions to
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#dont-trust-verify-the-firmware&quot;&gt;verify the SHA-256 hash and PGP signature&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Install it using the
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#upgrade-procedure-using-microsd&quot;&gt;MicroSD upgrade procedure&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;After restarting, select &lt;strong&gt;Advanced &amp;gt; Upgrade &amp;gt; Show Version&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Confirm that the device reports &lt;strong&gt;5.6.3 on Mk4/Mk5&lt;/strong&gt; or &lt;strong&gt;1.5.3Q on Q&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The complete source changes are available in the public
&lt;a href=&quot;https://github.com/Coldcard/firmware&quot;&gt;COLDCARD firmware repository&lt;/a&gt;, including
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/codex32.md&quot;&gt;Codex32 source documentation&lt;/a&gt;,
the &lt;a href=&quot;https://github.com/Coldcard/firmware/blob/2026-09-30T2026-v5.6.3/releases/ChangeLog.md&quot;&gt;5.6.3 and 1.5.3Q release changelog&lt;/a&gt;,
and the individual pull requests for
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/820&quot;&gt;temporary-seed names&lt;/a&gt;,
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/808&quot;&gt;message signing&lt;/a&gt;,
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/815&quot;&gt;PSBTv2 locktimes&lt;/a&gt;, and
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/818&quot;&gt;PSBTv2 parser hardening&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Need a COLDCARD for a tested recovery plan? &lt;strong&gt;Enjoy 10% off with on-chain
Bitcoin. Use code &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CKBTC&lt;/code&gt; at checkout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Get COLDCARD Q or Mk5&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 01 Oct 2026 00:50:00 -1200</pubDate>
        <link>https://blog.coinkite.com/coldcard-firmware-563-153q/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/coldcard-firmware-563-153q/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>Codex32 and Shamir Backups on COLDCARD</title>
        <description>&lt;p&gt;Your seed backup has a problem that more copies cannot fix.&lt;/p&gt;

&lt;p&gt;One copy is a single point of failure: lose it, lose the coins. Make a second
copy and that is fixed, at the cost of doubling the number of places somebody
can find the whole secret. Three copies, three places. Redundancy and secrecy
pull against each other, and every copy you make buys one by spending the
other.&lt;/p&gt;

&lt;p&gt;Shamir Secret Sharing breaks that trade. Split the backup into several shares
and set how many are needed to rebuild it. Fewer than that number reveal
nothing about the secret.&lt;/p&gt;

&lt;p&gt;COLDCARD can now split the BIP-39 seed words you already use into Shamir
shares. &lt;strong&gt;Same wallet, same addresses, no coins moved.&lt;/strong&gt; It ships in firmware
&lt;strong&gt;5.6.3&lt;/strong&gt; (Mk4/Mk5) and &lt;strong&gt;1.5.3Q&lt;/strong&gt; (Q).&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Get COLDCARD Q or Mk5&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;threshold-beats-more-copies&quot;&gt;Threshold Beats More Copies&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Backup plan&lt;/th&gt;
      &lt;th&gt;Survives losing&lt;/th&gt;
      &lt;th&gt;Compromised by&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1 copy&lt;/td&gt;
      &lt;td&gt;nothing&lt;/td&gt;
      &lt;td&gt;1 find&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3 copies&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;1 find&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2-of-3 shares&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;2 finds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3-of-5 shares&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;3 finds&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Three copies in three places is three chances for one burglary — or one
curious relative — to walk off with everything. A 3-of-5 split survives two
destroyed shares and still defeats whoever reaches two of the five — so one
share can sit with a lawyer, one in a deposit box, one at home, and no single
visit is enough.&lt;/p&gt;

&lt;p&gt;COLDCARD makes &lt;strong&gt;2 to 9 shares&lt;/strong&gt;, with any threshold from 2 up to the total.
Unlike &lt;a href=&quot;https://coldcard.com/docs/seedxor&quot;&gt;Seed XOR&lt;/a&gt;, which needs every part,
you choose the redundancy. Pick the smallest arrangement you can actually
store, explain to your heirs, and test.&lt;/p&gt;

&lt;h2 id=&quot;bip-93-natively&quot;&gt;BIP-93, Natively&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki&quot;&gt;BIP-93&lt;/a&gt;,
authored by Andrew Poelstra, Leon Olsson Curr, and Pearlwort Sneed, defines
Codex32: an encoding for wallet secrets with a strong checksum and Shamir
sharing built in, designed so a checksum can be verified — and shares
recombined — with pen, paper, and printed tables.&lt;/p&gt;

&lt;p&gt;On a COLDCARD with a PIN and no wallet, the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Codex32&lt;/code&gt; menu covers the
lifecycle: &lt;a href=&quot;https://coldcard.com/docs/codex32#create-a-codex32-wallet&quot;&gt;&lt;strong&gt;Generate&lt;/strong&gt;&lt;/a&gt; a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt; secret,
&lt;a href=&quot;https://coldcard.com/docs/codex32#import-codex32&quot;&gt;&lt;strong&gt;Import Codex32&lt;/strong&gt;&lt;/a&gt;,
&lt;a href=&quot;https://coldcard.com/docs/codex32#recover-from-shares&quot;&gt;&lt;strong&gt;Shamir Recover&lt;/strong&gt;&lt;/a&gt; from a threshold of shares,
&lt;a href=&quot;https://coldcard.com/docs/codex32#derive-additional-shares&quot;&gt;&lt;strong&gt;Derive Shares&lt;/strong&gt;&lt;/a&gt;, and
&lt;a href=&quot;https://coldcard.com/docs/codex32#calculate-a-checksum&quot;&gt;&lt;strong&gt;Calculate Checksum&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Derive Shares&lt;/code&gt; is the one people underestimate. Lose a share from a 2-of-3 and
any two survivors reproduce exactly that missing share. The set stays valid and
the shares already sitting in other locations do not have to be replaced.&lt;/p&gt;

&lt;h2 id=&quot;the-part-that-usually-costs-you-an-on-chain-move&quot;&gt;The Part That Usually Costs You an On-Chain Move&lt;/h2&gt;

&lt;p&gt;Standard Codex32 (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt;) starts with its own wallet secret format. SLIP-39 can
technically convert an existing BIP-39 wallet through Trezor’s command-line
tool, but &lt;a href=&quot;https://trezor.io/guides/backups-recovery/general-standards/slip39-faqs#can-i-convert-my-existing-bip39-wallet-into-a-slip39-wallet&quot;&gt;Trezor Suite does not support it and Trezor recommends creating a
new wallet and moving the funds instead&lt;/a&gt;.
For most existing BIP-39 users, that means paying transaction fees, rebuilding
their wallet setup, and potentially linking addresses on-chain — a cost in
money, effort, and privacy just to improve a backup.&lt;/p&gt;

&lt;p&gt;So we extended Codex32. &lt;strong&gt;COLDCARD can split an existing BIP-39 seed directly
into Codex32 shares—without creating a new wallet or moving coins.&lt;/strong&gt; The
checksummed strings can be recorded on paper or steel. The format is chosen
from whatever wallet is already active:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Active wallet&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
      &lt;th&gt;A threshold of shares restores&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;BIP-39 seed words&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Your original 12, 18, or 24 words&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Extended private key, including an active passphrase wallet&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;The chain code and private key&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BIP-32 master seed&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;The master seed bytes — standard BIP-93&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;a href=&quot;https://coldcard.com/docs/codex32#splitting-a-seed-word-wallet&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt;&lt;/a&gt;
encodes the entropy behind your English BIP-39 words. Each share is
&lt;a href=&quot;https://coldcard.com/docs/codex32#recording-and-import-format&quot;&gt;48 characters for a 12-word wallet, 61 for an 18-word wallet, or 74 for a
24-word wallet&lt;/a&gt;,
displayed in numbered groups of four for copying.
Recover a threshold of them and you get those same words back, usable with
SeedQR, Seed XOR, passphrases, and every other word-based feature.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;/images/posts-img/codex32/q-cw1-share-a-12-words.png&quot; width=&quot;511&quot; height=&quot;503&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;COLDCARD Q displaying CW1 share A from a 12-word wallet as 12 numbered four-character groups&quot; /&gt;
  &lt;figcaption&gt;Share &lt;code&gt;A&lt;/code&gt; of a split 12-word wallet: 48 characters, starting &lt;code&gt;CW1&lt;/code&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Nothing moves on-chain. Your existing words, XPRV, and encrypted &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.7z&lt;/code&gt; backup
all stay valid. You are adding a recovery path, not replacing one.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://coldcard.com/docs/codex32#bip-39-passphrase-wallets&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt;&lt;/a&gt;
covers the case BIP-39 words cannot: split while a &lt;strong&gt;BIP-39 passphrase wallet
is active&lt;/strong&gt; and the shares carry that wallet’s derived keys. Recovery restores
it without asking for the passphrase. It does not restore the words or the
passphrase — that is the feature, and also the limit.&lt;/p&gt;

&lt;p&gt;The honest caveat, which the device puts on screen before you start: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CW1&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CX1&lt;/code&gt; are
&lt;a href=&quot;https://coldcard.com/docs/codex32#coldcard-extensions-cw1-and-cx1&quot;&gt;ours, not BIP-93&lt;/a&gt;.
Recovery needs COLDCARD, or software that explicitly supports the prefix —
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt; support alone is not enough. If you want a standards-only backup, use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MS1&lt;/code&gt;.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;/images/posts-img/codex32/q-cw1-warning.png&quot; width=&quot;511&quot; height=&quot;503&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;COLDCARD Q warning that the split will use CW1, a COLDCARD extension to Codex32 requiring software with explicit CW1 support&quot; /&gt;
  &lt;figcaption&gt;COLDCARD tells you which format it will use, and what recovery will need, before you commit.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;how-a-split-works&quot;&gt;How a Split Works&lt;/h2&gt;

&lt;p&gt;With the wallet you want to back up active:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Advanced/Tools &amp;gt; Danger Zone &amp;gt; Seed Functions &amp;gt; Shamir Split&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;(&lt;a href=&quot;https://coldcard.com/docs/codex32#split-the-active-wallet&quot;&gt;step by step, with screenshots&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Choose the number of shares, choose the threshold, confirm the format notice,
and the set appears. Each share can be written down from numbered
four-character groups, or exported by QR, NFC, MicroSD, or Virtual Disk.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;/images/posts-img/codex32/q-share-list.png&quot; width=&quot;515&quot; height=&quot;502&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;COLDCARD Q listing shares A, C, D, E and F from a 2-of-5 split&quot; /&gt;
  &lt;figcaption&gt;A 2-of-5 set. Any two of these five rebuild the wallet.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;QR, NFC, MicroSD, and Virtual Disk exports contain plaintext shares. Keep fewer
than the recovery threshold in any one place. Before relying on the backup,
recover from the copies you will store and confirm both the expected wallet
fingerprint and a known receive address. A valid checksum confirms a
well-formed share; it does not prove that the share recovers the intended
wallet.&lt;/p&gt;

&lt;p&gt;Shamir shares protect your backup; they do not turn your wallet into multisig.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;/images/posts-img/codex32/shamir-vs-multisig.png&quot; width=&quot;2040&quot; height=&quot;1200&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; alt=&quot;Diagram comparing Shamir Secret Sharing, where shares reconstruct one wallet secret, with multisig, where separate keys authorize a Bitcoin transaction&quot; /&gt;
  &lt;figcaption&gt;Shamir shares rebuild one secret. Multisig uses separate signing keys.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;See the &lt;a href=&quot;https://coldcard.com/docs/codex32&quot;&gt;Codex32 guide&lt;/a&gt; for storage
precautions and recovery instructions.&lt;/p&gt;

&lt;h2 id=&quot;where-to-read-the-details&quot;&gt;Where to Read the Details&lt;/h2&gt;

&lt;p&gt;Codex32 and Shamir Secret Sharing arrive in &lt;strong&gt;Mk4/Mk5 v5.6.3&lt;/strong&gt; and &lt;strong&gt;Q
v1.5.3Q&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Every workflow, format, file rule, and troubleshooting case:
&lt;a href=&quot;https://coldcard.com/docs/codex32&quot;&gt;COLDCARD Codex32 &amp;amp; Shamir guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The specification:
&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki&quot;&gt;BIP-93&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Split your backup. Keep your wallet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Artwork from the &lt;a href=&quot;https://secretcodex32.com/docs/2023-03-07--color.pdf&quot;&gt;Codex32 booklet&lt;/a&gt;,
illustrated by Micaela Paez under the
&lt;a href=&quot;/images/posts-img/codex32/codex32-cover-LICENSE.txt&quot;&gt;MIT License&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enjoy 10% off when you pay with Bitcoin at checkout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Shop COLDCARD Q and Mk5&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 30 Sep 2026 00:00:00 -1200</pubDate>
        <link>https://blog.coinkite.com/shamir-backups-without-a-new-wallet/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/shamir-backups-without-a-new-wallet/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>Build and Run Your Own COLDCARD Firmware</title>
        <description>&lt;p&gt;COLDCARD will run firmware you build yourself. The source tree includes the
development signing private key (key zero), so you can change the code, test
it, build a DFU file, and install it without asking Coinkite to sign it.&lt;/p&gt;

&lt;p&gt;The bootloader makes the difference obvious. Development firmware gets a
warning and forced delay on every boot. It cannot quietly pass as factory
firmware.&lt;/p&gt;

&lt;p&gt;This guide covers the practical loop: make a branch, run the simulator, build
for Mk4/Mk5 or Q, verify the result, and load it onto a dedicated development
unit.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Use a blank COLDCARD reserved for development.&lt;/strong&gt; Do not experiment on a
device that controls real funds or contains a real seed. Custom firmware can
read secrets after login, change what the screen shows, sign the wrong
transaction, or leak data through files and signatures. Reinstalling official
firmware cannot make an exposed seed private again.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article was checked against firmware master at
&lt;a href=&quot;https://github.com/Coldcard/firmware/tree/948dc108a0a1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;948dc108&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;what-you-can-change&quot;&gt;What You Can Change&lt;/h2&gt;

&lt;p&gt;Most COLDCARD application code is Python under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shared/&lt;/code&gt;. Code used by both
product families is selected in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shared/manifest.py&lt;/code&gt;; model-specific modules are
selected in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shared/manifest_mk4.py&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shared/manifest_q1.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can replace the Python application, native modules, and even the embedded
MicroPython interpreter. The bootloader is outside that image and runs first.
It checks the image before handing over control and cannot be changed after
the COLDCARD leaves the factory.&lt;/p&gt;

&lt;p&gt;Mk4 and Mk5 use the same firmware target. Q has its own target. The current
build files are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stm32/MK-Makefile&lt;/code&gt; for Mk4 and Mk5&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stm32/Q1-Makefile&lt;/code&gt; for Q&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with a display string, menu, export, parser, or simulator fix. Do not make
boot or login code your first experiment. A crash or other issue that prevents
firmware upgrade will effectively brick your test unit, since there is no other way
to change or correct the firmware.&lt;/p&gt;

&lt;h2 id=&quot;prepare-a-development-unit&quot;&gt;Prepare a Development Unit&lt;/h2&gt;

&lt;p&gt;Use a COLDCARD that will never hold real secrets. Set a main PIN, because
firmware installation requires it, but stop before creating a master seed. If
you need a wallet for testing, use a disposable seed on testnet or regtest.&lt;/p&gt;

&lt;p&gt;Before changing anything, also download the current official DFU from the
&lt;a href=&quot;https://coldcard.com/downloads/all&quot;&gt;COLDCARD firmware page&lt;/a&gt; and verify its hash
and signature using the &lt;a href=&quot;https://coldcard.com/docs/upgrade/&quot;&gt;upgrade instructions&lt;/a&gt;.
That gives you a known file to return to if your build is able to reach the upgrade
menu.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Get a COLDCARD for Development&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;clone-the-source&quot;&gt;Clone the Source&lt;/h2&gt;

&lt;p&gt;The repository uses submodules. Clone it recursively, and keep it in a path
without spaces.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone &lt;span class=&quot;nt&quot;&gt;--recursive&lt;/span&gt; https://github.com/Coldcard/firmware.git
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;firmware
git switch &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; my-feature
git rev-parse HEAD

python3 &lt;span class=&quot;nt&quot;&gt;-m&lt;/span&gt; venv ENV
&lt;span class=&quot;nb&quot;&gt;source &lt;/span&gt;ENV/bin/activate
pip &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-U&lt;/span&gt; pip setuptools
pip &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; requirements.txt
pip &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--editable&lt;/span&gt; ./cli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Keep the commit ID from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse HEAD&lt;/code&gt; with your test notes. When a result
matters, “master” is not a useful version number.&lt;/p&gt;

&lt;p&gt;The compiler and desktop packages differ between macOS and Linux. Install the
current prerequisites from the firmware
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/README.md&quot;&gt;README&lt;/a&gt; rather than
copying an old toolchain list from a post or forum reply.&lt;/p&gt;

&lt;h2 id=&quot;run-the-simulator-first&quot;&gt;Run the Simulator First&lt;/h2&gt;

&lt;p&gt;Follow the README’s complete setup for your operating system before building
the simulator. Current Apple Clang and Ubuntu 24.04 require different
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MPY_CFLAGS&lt;/code&gt; workarounds, and Ubuntu also requires &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pysdl2-dll&lt;/code&gt;. Use the current
values from the firmware
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/README.md&quot;&gt;README&lt;/a&gt;, set
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MPY_CFLAGS&lt;/code&gt; as shown there, and pass it through each compiler step:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;make &lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt; external/micropython/mpy-cross &lt;span class=&quot;nv&quot;&gt;CFLAGS_EXTRA&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MPY_CFLAGS&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;unix
make setup &lt;span class=&quot;nv&quot;&gt;CFLAGS_EXTRA&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MPY_CFLAGS&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
make ngu-setup
make &lt;span class=&quot;nv&quot;&gt;CFLAGS_EXTRA&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MPY_CFLAGS&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
./simulator.py &lt;span class=&quot;nt&quot;&gt;--eff&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--eff&lt;/code&gt; starts with disposable simulator settings. For the Q interface, use:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./simulator.py &lt;span class=&quot;nt&quot;&gt;--eff&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--q1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make the smallest change that proves your idea. Restart the simulator, reproduce
the old behavior, and then show the new behavior. Add a focused pytest case when
the change can regress. The test suite accepts &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--sim&lt;/code&gt; for simulator tests and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--dev&lt;/code&gt; for real development hardware; some hardware tests are destructive, so
read the &lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/testing/README.md&quot;&gt;testing notes&lt;/a&gt;
before using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--dev&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the change is intended for everyone, add a short item to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;releases/Next-ChangeLog.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;build-development-firmware&quot;&gt;Build Development Firmware&lt;/h2&gt;

&lt;p&gt;From the repository root, build Mk4/Mk5 firmware with:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;stm32
make clean
make &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; MK-Makefile setup
make &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; MK-Makefile firmware-signed.dfu
&lt;span class=&quot;nb&quot;&gt;mv &lt;/span&gt;firmware-signed.dfu my-feature-mk.dfu
signit check my-feature-mk.dfu
shasum &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; 256 my-feature-mk.dfu
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For Q, use the Q build file and give the result a different name:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;make clean
make &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; Q1-Makefile setup
make &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; Q1-Makefile firmware-signed.dfu
&lt;span class=&quot;nb&quot;&gt;mv &lt;/span&gt;firmware-signed.dfu my-feature-q.dfu
signit check my-feature-q.dfu
shasum &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; 256 my-feature-q.dfu
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On Linux, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sha256sum&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shasum -a 256&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Both targets write the shared files &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;firmware-signed.bin&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;firmware-signed.dfu&lt;/code&gt;. Removing both before each model build (via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make clean&lt;/code&gt;)
prevents Make from packaging a cached binary for the other model.&lt;/p&gt;

&lt;p&gt;The normal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;firmware-signed.dfu&lt;/code&gt; target signs with key zero, whose private
key is included in the source tree and is not secret. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signit check&lt;/code&gt;
prints the target hardware, version, key number, digest, and signature
result. Read that output to check it is signed and verifies.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Shop COLDCARD Q and Mk5&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;install-it-on-the-development-unit&quot;&gt;Install It on the Development Unit&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Copy your model’s DFU file to a MicroSD card.&lt;/li&gt;
  &lt;li&gt;Unlock the development COLDCARD.&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Advanced/Tools &amp;gt; Upgrade Firmware &amp;gt; From MicroSD&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Choose the DFU, confirm the model and version, and let the write finish.&lt;/li&gt;
  &lt;li&gt;On reboot, confirm that the development-firmware warning and delay appear.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;USB upload with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ckcc upgrade&lt;/code&gt; and Virtual Disk installation are also supported,
but MicroSD makes the file being tested easy to keep with its source commit and
SHA-256 hash.&lt;/p&gt;

&lt;p&gt;There is no way to suppress the boot-up warning, except by getting your
change into the master (or edge) firmware image that Coinkite builds. We do
actually accept pull requests, and some of our features have come from
outside contributors like yourself!&lt;/p&gt;

&lt;h2 id=&quot;keep-a-useful-test-record&quot;&gt;Keep a Useful Test Record&lt;/h2&gt;

&lt;p&gt;For each build, keep:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the Git commit and a clean diff;&lt;/li&gt;
  &lt;li&gt;the target model;&lt;/li&gt;
  &lt;li&gt;the DFU SHA-256 hash;&lt;/li&gt;
  &lt;li&gt;the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signit check&lt;/code&gt; output;&lt;/li&gt;
  &lt;li&gt;the simulator and hardware tests run; and&lt;/li&gt;
  &lt;li&gt;the expected warning, screen, file, or signing result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If someone else cannot reproduce the result from that record, the experiment is
not ready to distribute.&lt;/p&gt;

&lt;h2 id=&quot;what-good-contributions-look-like&quot;&gt;What Good Contributions Look Like&lt;/h2&gt;

&lt;p&gt;Useful firmware work is usually smaller than people expect.
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/729&quot;&gt;PR #729&lt;/a&gt; fixed a simulator crash
with a short root-cause explanation and a three-line code change.
&lt;a href=&quot;https://github.com/Coldcard/firmware/pull/808&quot;&gt;PR #808&lt;/a&gt; fixed a malformed-JSON
crash and added a regression test. &lt;a href=&quot;https://github.com/Coldcard/firmware/pull/766&quot;&gt;PR #766&lt;/a&gt;
added View TRNG Words with the corresponding UX tests and changelog entry.&lt;/p&gt;

&lt;p&gt;There are also independent experiments. The unaudited
&lt;a href=&quot;https://github.com/privkeyio/cc-firmware&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;privkeyio/cc-firmware&lt;/code&gt;&lt;/a&gt; fork changes
transaction signature-hash behavior and documents the development-key boot
warning. &lt;a href=&quot;https://github.com/TibaneLabs/catcard&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TibaneLabs/catcard&lt;/code&gt;&lt;/a&gt; is a
clean-room Rust firmware project targeting COLDCARD hardware; its own README
warns users not to put funds on it. These are examples to inspect, not firmware
recommendations or endorsements.&lt;/p&gt;

&lt;p&gt;A fork is appropriate for a personal experiment or a deliberately different
product. A generally useful fix or feature should usually become a focused pull
request against the current COLDCARD tree.&lt;/p&gt;

&lt;h2 id=&quot;returning-to-official-firmware&quot;&gt;Returning to Official Firmware&lt;/h2&gt;

&lt;p&gt;If the device still reaches the upgrade menu, install any official DFU
using the usual upgrade commands. Confirm the factory-firmware boot state afterward.&lt;/p&gt;

&lt;p&gt;Do not restore a seed that was present while unknown or third-party firmware was
running. Keep development hardware out of production, even after reinstalling
official firmware. The inexpensive part is another device. The expensive part
is wondering what an experiment may have exposed.&lt;/p&gt;

&lt;p&gt;The complete source and current build instructions are in the
&lt;a href=&quot;https://github.com/Coldcard/firmware&quot;&gt;COLDCARD firmware repository&lt;/a&gt;. Developer
access, warning behavior, and recovery limits are documented in
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/dev-access.md&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docs/dev-access.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keep experiments on empty hardware. If the change should benefit everyone, send
the tested patch upstream.&lt;/p&gt;

&lt;p&gt;Need a dedicated unit for development? &lt;strong&gt;Enjoy 10% off when you pay with
Bitcoin at checkout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;btn-cta&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;Get COLDCARD Q or Mk5&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 23 Sep 2026 00:33:43 -1200</pubDate>
        <link>https://blog.coinkite.com/build-run-custom-coldcard-firmware/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/build-run-custom-coldcard-firmware/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>COLDCARD Firmware Update 5.6.2 &amp; 1.5.2Q: Verifiable Seed Mixing; Continued Security Review; and EDGE 6.6.1X/6.6.1QX</title>
        <description>&lt;p&gt;COLDCARD firmware &lt;strong&gt;5.6.2 for Mk4/Mk5&lt;/strong&gt; and &lt;strong&gt;1.5.2Q for Q&lt;/strong&gt; restore
visibility into the device-generated input used during seed creation and add a
standalone tool for independently checking dice-roll or coin-flip mixing.&lt;/p&gt;

&lt;p&gt;The release also includes changes from our continuing review of transaction
validation, USB communications, Virtual Disk handling, firmware upgrades,
temporary wallets, Delta Mode, and other security boundaries.&lt;/p&gt;

&lt;p&gt;Given the volume of security reports coming to us and appearing across Bitcoin
hardware and software projects, our recommendation for the next while is
simple: treat every applicable COLDCARD firmware release as a critical update
and upgrade promptly.&lt;/p&gt;

&lt;p&gt;We strongly recommend that all COLDCARD Mk4, Mk5, and Q users install
&lt;a href=&quot;https://coldcard.com/downloads/all&quot;&gt;&lt;strong&gt;5.6.2 for Mk4/Mk5&lt;/strong&gt; or &lt;strong&gt;1.5.2Q for Q&lt;/strong&gt; from our official firmware downloads
page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We are grateful to &lt;a href=&quot;https://github.com/drk1wi&quot;&gt;@drk1wi&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hitechhayekian&quot;&gt;@hitechhayekian&lt;/a&gt;,
&lt;a href=&quot;https://github.com/Amiga500&quot;&gt;@Amiga500&lt;/a&gt;, Huzaifa Jawaid, “FreeZ Agent,”
“Rety,” &lt;a href=&quot;https://github.com/KirillCherikov&quot;&gt;@KirillCherikov&lt;/a&gt;,
&lt;a href=&quot;https://github.com/instagibbs&quot;&gt;@instagibbs&lt;/a&gt;,
&lt;a href=&quot;https://karma-x.io/blog/post/75/&quot;&gt;Karma-X&lt;/a&gt;, Shiny
(&lt;a href=&quot;https://x.com/bigshiny0&quot;&gt;@bigshiny0&lt;/a&gt;), Mike Rahel
(&lt;a href=&quot;https://x.com/itooshatonamask&quot;&gt;@itooshatonamask&lt;/a&gt;), Mars
(&lt;a href=&quot;https://x.com/Marsmensch&quot;&gt;@Marsmensch&lt;/a&gt;), and
&lt;a href=&quot;https://github.com/portlandhodl/coldcard_fw_dicerolls_trace&quot;&gt;PortlandHODL&lt;/a&gt; for
reporting issues, contributing code, reproducing edge cases, sharing ideas, and
independently reviewing the remediation. We also thank
&lt;a href=&quot;https://github.com/danilotg&quot;&gt;@danilotg&lt;/a&gt; and
&lt;a href=&quot;https://github.com/spaceainot&quot;&gt;@spaceainot&lt;/a&gt; for post-incident implementation,
testing, release, tooling, and disclosure-policy work. Each finding still has
to be reproduced and evaluated within its actual scope, but this scrutiny is
making COLDCARD stronger.&lt;/p&gt;

&lt;p&gt;Thank you for the many messages of support since the fixes shipped. COLDCARDs
are in stock, and we’re working to keep up with the increased demand. We
appreciate your patience while we get orders out. Development continues: we’ll
keep improving the product and releasing new firmware.&lt;/p&gt;

&lt;p&gt;We’ll keep publishing concrete, inspectable changes as this work proceeds.&lt;/p&gt;

&lt;h2 id=&quot;view-and-verify-seed-mixing&quot;&gt;View and Verify Seed Mixing&lt;/h2&gt;

&lt;p&gt;Every newly generated master seed, Temporary Seed, and generated CCC Key C
still requires one user-sourced entropy method:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;at least 65 key presses with unpredictable timing;&lt;/li&gt;
  &lt;li&gt;at least 50 rolls of a physical six-sided die; or&lt;/li&gt;
  &lt;li&gt;at least 128 physical coin flips.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The standard workflow combines that input with fresh device entropy from the
STM32 TRNG, SE1, and SE2.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;View TRNG Words&lt;/strong&gt; menu item displays 24 BIP-39 words encoding the full
256-bit device-generated input before the user’s key presses, dice rolls, or
coin flips are mixed in. All 256 bits participate in the calculation, including
when creating a 12-word wallet. On Q, the 24-word grid begins on a fresh screen
so the words remain together.&lt;/p&gt;

&lt;p&gt;This restores visibility that existed in the earlier dice-roll workflow but
was inadvertently absent from firmware 5.6.1 and 1.5.1Q.&lt;/p&gt;

&lt;p&gt;The firmware source now also includes the public-domain, dependency-free
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/verify_seed_mix.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;verify_seed_mix.py&lt;/code&gt;&lt;/a&gt;
tool. It can independently recompute a final 12- or 24-word seed from the
displayed TRNG words and the complete dice-roll or coin-flip sequence. It does
not support key-mashing input. This complements
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/rolls.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rolls.py&lt;/code&gt;&lt;/a&gt;,
first published in October 2020, which performs the corresponding offline
calculation for 24-word seeds created through the separate Dice Rolls Only
workflow. &lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/docs/rolls12.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rolls12.py&lt;/code&gt;&lt;/a&gt;
covers the 12-word variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep every part of this process secret.&lt;/strong&gt; Anyone who obtains the resulting
seed—or both the displayed TRNG words and your complete dice-roll or coin-flip
sequence—can recreate the wallet and steal its funds. Notes, photographs,
clipboard contents, terminal history, logs, and backups may retain this
information. Run the verification tool only on an offline computer you trust.
The safest approach is to use one complete seed-generation run only to prove
the math, never fund that wallet, then discard it and start again. Generate new
TRNG words and use fresh, unrecorded rolls or flips for your actual master seed.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://scgbckbone.github.io/seedflow/&quot;&gt;&lt;img src=&quot;/images/posts-img/coldcard-seed-generation-flow.png&quot; alt=&quot;COLDCARD seed-generation flow for firmware 5.6.1 and later&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;&lt;a href=&quot;https://scgbckbone.github.io/seedflow/&quot;&gt;Explore the interactive, source-linked SeedFlow map&lt;/a&gt; by &lt;a href=&quot;https://github.com/scgbckbone&quot;&gt;@scgbckbone&lt;/a&gt; to trace the complete seed-generation process and inspect the firmware behind each step.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;usb-communications&quot;&gt;USB Communications&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;USB ncry v3 adds authenticated encryption with direction-separated keys and
replay protection.&lt;/li&gt;
  &lt;li&gt;The unused USB CDC/VCP serial interface has been removed from normal
operation and keyboard-emulation mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;transaction-validation-and-utxo-handling&quot;&gt;Transaction Validation and UTXO Handling&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;COLDCARD warns when a transaction’s block-height &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nLockTime&lt;/code&gt; is more than ten
years beyond the Bitcoin height known to the firmware.&lt;/li&gt;
  &lt;li&gt;The UTXO cache now retains up to 128 entries across restarts.&lt;/li&gt;
  &lt;li&gt;Cancelled PSBTs no longer commit claimed input amounts to the UTXO cache.
Amounts are committed only after signing and only for inputs COLDCARD actually
signed.&lt;/li&gt;
  &lt;li&gt;Single-signature SegWit change amounts are cached during finalization so
understated input amounts can be detected instead of silently trusted.&lt;/li&gt;
  &lt;li&gt;Duplicate singleton keys in PSBT maps are rejected.&lt;/li&gt;
  &lt;li&gt;BIP-322 Proof of Reserves rejects foreign inputs, including inputs disguised
with forged key-path metadata or partial signatures.&lt;/li&gt;
  &lt;li&gt;P2SH-P2WSH inputs with missing or incorrect redeem scripts are rejected
instead of proceeding with an unknown fee.&lt;/li&gt;
  &lt;li&gt;PSBTv2 transactions with out-of-range transaction versions are rejected,
matching the PSBTv0 parser.&lt;/li&gt;
  &lt;li&gt;On Mk4/Mk5, BIP-322 message signing with WIF Store keys requires an
unrestricted HSM message-signing policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;firmware-and-virtual-disk-boundaries&quot;&gt;Firmware and Virtual Disk Boundaries&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Signing stops if a Virtual Disk firmware import overwrites the reviewed PSBT.
Thanks to Huzaifa Jawaid.&lt;/li&gt;
  &lt;li&gt;A pending firmware upgrade is cancelled if its staged image is overwritten
before approval. Thanks to Huzaifa Jawaid.&lt;/li&gt;
  &lt;li&gt;Cyclic FAT chains in Virtual Disk imports are rejected instead of causing the
device to hang.&lt;/li&gt;
  &lt;li&gt;Virtual Disk files with FAT metadata inconsistent with their declared size
are rejected. This fixes an integer underflow in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psram_copy_file&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psram_mmap_file&lt;/code&gt; that could permit out-of-bounds PSRAM writes, reads, or
mappings from a compromised USB host.&lt;/li&gt;
  &lt;li&gt;Firmware images extending beyond the world-checksum-covered flash region are
rejected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;wallet-state-and-policy-boundaries&quot;&gt;Wallet-State and Policy Boundaries&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;With an empty master wallet and an active Temporary Seed, imports and backup
restores remain temporary instead of becoming master-wallet changes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Change Main PIN&lt;/strong&gt; is hidden while a Temporary Seed or BIP-39 passphrase
wallet is active.&lt;/li&gt;
  &lt;li&gt;In Delta Mode, attempting to view or activate a duress-wallet secret from the
Trick PINs menu wipes the seed instead of revealing it.&lt;/li&gt;
  &lt;li&gt;Non-ASCII BIP-39 passphrases are rejected at USB, saved-passphrase, note, and
password entry points instead of deriving wallets incompatible with
BIP-39-normalizing software.&lt;/li&gt;
  &lt;li&gt;Single-Signer Spending Policy now provides a block-height reset from the
&lt;strong&gt;Last Violation&lt;/strong&gt; screen after a policy bypass, matching CCC behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;simulator-fix&quot;&gt;Simulator Fix&lt;/h2&gt;

&lt;p&gt;The COLDCARD simulator no longer crashes during &lt;strong&gt;Bless Firmware&lt;/strong&gt; because of a
desynchronized LED pipe, and it now records its firmware-greenlight state
correctly.&lt;/p&gt;

&lt;p&gt;This is a developer-tooling fix and does not change the security behavior of a
physical COLDCARD. Thanks to
&lt;a href=&quot;https://github.com/hitechhayekian&quot;&gt;@hitechhayekian&lt;/a&gt; for the report and fix.&lt;/p&gt;

&lt;h2 id=&quot;important-seed-reminder&quot;&gt;Important Seed Reminder&lt;/h2&gt;

&lt;p&gt;Installing this update does not make an existing vulnerable seed safe.&lt;/p&gt;

&lt;p&gt;If your seed may have been generated on affected firmware from 2021 through
July 2026, create a completely new seed using fixed firmware and move your funds
by following our
&lt;a href=&quot;https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/&quot;&gt;seed-generation advisory&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The July 31 firmware corrected the seed-generation failure for new seeds. The
August 20 release added required user-sourced entropy and further hardening.
This release adds verification and additional security work, but it does not
change the migration guidance for seeds already generated on affected firmware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgrading alone is not sufficient.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our team remains heads down reviewing security reports and helping affected
users upgrade, create new seeds, and complete their migrations. Support and
other contact channels are handling unusually high volumes, so responses may
take longer than usual.&lt;/p&gt;

&lt;p&gt;Verified guidance remains available on the
&lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;Security Status page&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-to-update&quot;&gt;How to Update&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Download firmware only from the
&lt;a href=&quot;https://coldcard.com/downloads/all&quot;&gt;official COLDCARD downloads page&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Follow our instructions to
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#dont-trust-verify-the-firmware&quot;&gt;verify the SHA-256 hash and PGP signature&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Install it using the
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#upgrade-procedure-using-microsd&quot;&gt;MicroSD upgrade procedure&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;After restarting, select &lt;strong&gt;Advanced &amp;gt; Upgrade &amp;gt; Show Version&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Confirm that the device reports &lt;strong&gt;5.6.2 on Mk4/Mk5&lt;/strong&gt; or &lt;strong&gt;1.5.2Q on Q&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;If the July seed advisory applies to you, complete the separate seed
migration. Upgrading alone is not sufficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The complete standard-release list is available in the
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/releases/ChangeLog.md&quot;&gt;firmware changelog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Security reports can be submitted privately to
&lt;a href=&quot;mailto:security@coinkite.com&quot;&gt;security@coinkite.com&lt;/a&gt; under our
&lt;a href=&quot;https://coinkite.com/responsible-disclosure&quot;&gt;responsible-disclosure policy&lt;/a&gt;.
Customers who need assistance should contact our
&lt;a href=&quot;https://coldcard.com/support/&quot;&gt;support team&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;edge-661x-and-661qx--august-31-2026&quot;&gt;EDGE 6.6.1X and 6.6.1QX — August 31, 2026&lt;/h2&gt;

&lt;p&gt;We also released &lt;strong&gt;EDGE 6.6.1X for Mk4&lt;/strong&gt; and &lt;strong&gt;6.6.1QX for Q&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;EDGE is a separate preview track. It has not been qualified and tested to the
same standard as normal releases and is recommended only for developers and
early adopters doing experimental work.&lt;/p&gt;

&lt;p&gt;These builds are synchronized with the standard release lines through 5.6.1
and 1.5.1Q. Their shared changes include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Reject cyclic FAT chains during Virtual Disk imports instead of hanging.&lt;/li&gt;
  &lt;li&gt;Abort a pending firmware upgrade if its staged image is overwritten before
approval. Thanks to Huzaifa Jawaid.&lt;/li&gt;
  &lt;li&gt;Detect and abort signing if a Virtual Disk firmware import overwrites the
reviewed PSBT. Thanks to Huzaifa Jawaid.&lt;/li&gt;
  &lt;li&gt;Allow uncompressed WIF keys in WIF Store.&lt;/li&gt;
  &lt;li&gt;Speed up multisig address generation and PSBT-input verification.&lt;/li&gt;
  &lt;li&gt;Use predictable sequential filenames when PSBTs are repeatedly processed
through MicroSD or Virtual Disk.&lt;/li&gt;
  &lt;li&gt;Prevent USB hosts from enrolling, deleting, listing, or exporting Multisig or
Miniscript wallet configurations while Spending Policy mode is active.&lt;/li&gt;
  &lt;li&gt;Compact repeated transaction warnings, relative timelocks, and unusual
change-path summaries. Individual details remain available in the transaction
explorer.&lt;/li&gt;
  &lt;li&gt;Generate distinct MuSig2 nonces for different aggregate-key derivations of
the same participant set.&lt;/li&gt;
  &lt;li&gt;Harden MuSig2 session handling for foreign MuSig2 inputs and differing
witness UTXO data.&lt;/li&gt;
  &lt;li&gt;Preserve incomplete MuSig2 sessions while waiting for cosigner public nonces.&lt;/li&gt;
  &lt;li&gt;Prevent PSBT corruption when the same MuSig2 participant performs multiple
signing rounds through Key Teleport.&lt;/li&gt;
  &lt;li&gt;Track remaining multisig and Tapscript signers separately for each PSBT input.&lt;/li&gt;
  &lt;li&gt;Limit MuSig2 participant lists to 32.&lt;/li&gt;
  &lt;li&gt;Generate unique names for multisig wallets created from PSBTs with identical
M-of-N parameters.&lt;/li&gt;
  &lt;li&gt;Correctly identify consolidations containing zero-value &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OP_RETURN&lt;/code&gt; outputs
without misclassifying other zero-value external outputs.&lt;/li&gt;
  &lt;li&gt;Prevent duplicate WIF Store keys and multisig wallets after restart.&lt;/li&gt;
  &lt;li&gt;Require HSM policies to explicitly allow a path before signing BIP-322
messages with WIF Store keys.&lt;/li&gt;
  &lt;li&gt;Reject foreign inputs in BIP-322 Proof of Reserves transactions.&lt;/li&gt;
  &lt;li&gt;Prevent PSBT uploads from being mistaken for partial firmware uploads.&lt;/li&gt;
  &lt;li&gt;Reject BIP-388 wallet-policy imports with non-ASCII or non-printable names.&lt;/li&gt;
  &lt;li&gt;Reject duplicate singleton keys in PSBT maps.&lt;/li&gt;
  &lt;li&gt;Restore &lt;strong&gt;View TRNG Words&lt;/strong&gt; for the complete 256-bit device-generated input
before user entropy is mixed.&lt;/li&gt;
  &lt;li&gt;Fix the &lt;strong&gt;Bless Firmware&lt;/strong&gt; simulator crash. Thanks to
&lt;a href=&quot;https://github.com/hitechhayekian&quot;&gt;@hitechhayekian&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Fix invalid signatures on transactions containing both SegWit v0 and Taproot
inputs.&lt;/li&gt;
  &lt;li&gt;Hide &lt;strong&gt;Change Main PIN&lt;/strong&gt; while a Temporary Seed or BIP-39 passphrase wallet is
active.&lt;/li&gt;
  &lt;li&gt;Keep imports and backup restores temporary when the master wallet is empty
and a Temporary Seed is active.&lt;/li&gt;
  &lt;li&gt;Do not misidentify future-version SegWit outputs as Taproot change.&lt;/li&gt;
  &lt;li&gt;Reject unsupported Taproot leaf versions during PSBT signing. Only Tapscript
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0xc0&lt;/code&gt; is supported.&lt;/li&gt;
  &lt;li&gt;Serialize future even TapLeaf versions correctly.&lt;/li&gt;
  &lt;li&gt;Report the correct transaction ID when finalized MuSig transactions contain
scriptSigs.&lt;/li&gt;
  &lt;li&gt;Remove the unused USB CDC/VCP serial interface from normal operation and
keyboard emulation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/2026-08-31T1606-v6.6.1X/releases/EdgeChangeLog.md&quot;&gt;complete tagged EDGE changelog&lt;/a&gt;
and verify the firmware through the official downloads page before installing.&lt;/p&gt;
</description>
        <pubDate>Fri, 04 Sep 2026 03:30:00 -1200</pubDate>
        <link>https://blog.coinkite.com/coldcard-firmware-update-5.6.2-1.5.2q/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/coldcard-firmware-update-5.6.2-1.5.2q/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>COLDCARD + Sparrow: Air-Gapped from First Address to First Signature</title>
        <description>&lt;p&gt;Sparrow and COLDCARD should have different jobs.&lt;/p&gt;

&lt;p&gt;Sparrow runs on the computer, watches the blockchain, tracks wallet history, chooses coins, creates transactions, and broadcasts. In this workflow, COLDCARD holds the signing key, interprets the proposed transaction on its own screen, and signs after physical approval.&lt;/p&gt;

&lt;p&gt;The air-gapped workflow connects those jobs without a live data cable:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;export public wallet data from COLDCARD;&lt;/li&gt;
  &lt;li&gt;import it into Sparrow as watch-only;&lt;/li&gt;
  &lt;li&gt;verify a receive address on both devices;&lt;/li&gt;
  &lt;li&gt;let Sparrow build a PSBT;&lt;/li&gt;
  &lt;li&gt;move it to COLDCARD by Q QR or Mk5 MicroSD;&lt;/li&gt;
  &lt;li&gt;return the signature to Sparrow and broadcast.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With official COLDCARD firmware, the standard wallet export contains public wallet data and does not include the seed or private keys. This limits the computer’s role, but it does not make the computer, transfer medium, or signing device risk-free.&lt;/p&gt;

&lt;h2 id=&quot;versions-current-at-publication&quot;&gt;Versions current at publication&lt;/h2&gt;

&lt;p&gt;Menus and buttons change. At publication, the current releases were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;COLDCARD Q standard firmware &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.5.1Q&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;COLDCARD Mk5 standard firmware &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;5.6.1&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Sparrow Wallet &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.5.3&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the &lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;COLDCARD Security Status page&lt;/a&gt;, install and verify the current signed &lt;a href=&quot;https://coldcard.com/downloads&quot;&gt;COLDCARD firmware&lt;/a&gt;, and check &lt;a href=&quot;https://github.com/sparrowwallet/sparrow/releases&quot;&gt;Sparrow releases&lt;/a&gt; before starting. Download Sparrow only from &lt;a href=&quot;https://sparrowwallet.com/&quot;&gt;sparrowwallet.com&lt;/a&gt; or its linked official repository, and verify the download according to Sparrow’s instructions.&lt;/p&gt;

&lt;p&gt;This article covers a standard single-signature wallet. Multisig uses the same PSBT concept but requires the complete policy and enough cosigners to meet the threshold.&lt;/p&gt;

&lt;h2 id=&quot;what-this-workflow-changesand-what-it-does-not&quot;&gt;What this workflow changes—and what it does not&lt;/h2&gt;

&lt;p&gt;QR and MicroSD signing avoid a live data connection between COLDCARD and the computer. They do not make either device trusted, verify firmware for you, protect an exposed backup, or prevent every attack. This article describes the intended workflow, not a guarantee against every software, firmware, supply-chain, backup, or operator failure. Install only signed firmware from the official download page, keep the device under your control, and approve a transaction only after its recipient, amount, fee, change, and warnings match your intent on the COLDCARD screen.&lt;/p&gt;

&lt;p&gt;If the wallet seed was created on firmware covered by the July 2026 advisory, updating the device alone does not repair it. Follow the &lt;a href=&quot;https://coldcard.com/security/migrate&quot;&gt;affected-seed migration guide&lt;/a&gt; before relying on this setup for that wallet.&lt;/p&gt;

&lt;h2 id=&quot;prepare-coldcard-first&quot;&gt;Prepare COLDCARD first&lt;/h2&gt;

&lt;p&gt;Complete the current &lt;a href=&quot;https://coldcard.com/docs/q-quick/&quot;&gt;Q&lt;/a&gt; or &lt;a href=&quot;https://coldcard.com/docs/quick/&quot;&gt;Mk5&lt;/a&gt; setup:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;inspect the tamper-evident bag;&lt;/li&gt;
  &lt;li&gt;set the PIN and learn the anti-phishing-word check;&lt;/li&gt;
  &lt;li&gt;install and verify current signed firmware before creating a seed;&lt;/li&gt;
  &lt;li&gt;generate or import the intended seed;&lt;/li&gt;
  &lt;li&gt;make and test the required backups;&lt;/li&gt;
  &lt;li&gt;record the expected extended fingerprint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Current standard firmware combines fresh device entropy with one required user method for every new seed: at least 65 key presses with unpredictable timing, 50 private rolls of a fair physical six-sided die, or 128 private physical coin flips. Dice Rolls Only remains a separate advanced workflow.&lt;/p&gt;

&lt;p&gt;Before funding a wallet with an amount whose loss would be materially harmful to you, apply a strong, unique BIP-39 passphrase after verifying the base-seed backup. Back up the passphrase exactly and separately, record the passphrase wallet’s fingerprint, and test the complete recovery path before depositing funds. Additional complexity can create recovery risk; use multisig only with a documented and tested policy.&lt;/p&gt;

&lt;p&gt;Never type the seed words or BIP-39 passphrase into Sparrow for this watch-only workflow. Do not provide Coinkite support with them, your PIN, backup password, private keys, or dice-roll sequence.&lt;/p&gt;

&lt;p&gt;If the wallet uses a BIP-39 passphrase, apply it on COLDCARD &lt;strong&gt;before exporting to Sparrow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Under official firmware, the export describes the wallet that is active at that moment. The base seed and each passphrase have different keys, fingerprints, addresses, and balances. Sparrow needs a separate watch-only wallet for each.&lt;/p&gt;

&lt;p&gt;Confirm the active fingerprint at:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Advanced/Tools &amp;gt; View Identity&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Do not proceed if it is not the one recorded for this wallet.&lt;/p&gt;

&lt;h2 id=&quot;export-the-sparrow-wallet-from-coldcard&quot;&gt;Export the Sparrow wallet from COLDCARD&lt;/h2&gt;

&lt;p&gt;On Q or Mk5 open:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Advanced/Tools &amp;gt; Export Wallet &amp;gt; Sparrow&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Read the export notice and use account &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; for a standard first wallet. Use another account only if your wallet plan already specifies it.&lt;/p&gt;

&lt;h3 id=&quot;microsd-export&quot;&gt;MicroSD export&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Insert a FAT-formatted MicroSD card.&lt;/li&gt;
  &lt;li&gt;Choose MicroSD as the export method.&lt;/li&gt;
  &lt;li&gt;COLDCARD writes a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;coldcard-….json&lt;/code&gt; file to the card’s root.&lt;/li&gt;
  &lt;li&gt;Eject the card and insert it into the computer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;q-qr-export&quot;&gt;Q QR export&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Choose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Show QR&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Q displays the export as animated BBQr when needed.&lt;/li&gt;
  &lt;li&gt;Keep the code ready for Sparrow’s Scan option.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With official firmware, the Sparrow export contains the extended public key, derivation path, address type, and related public wallet data. It does not include the seed or private keys.&lt;/p&gt;

&lt;p&gt;“Public key” does not mean “publish it.” An extended public key or descriptor can reveal present and future wallet addresses, balances, and transaction relationships. Handle the export as private financial metadata.&lt;/p&gt;

&lt;h2 id=&quot;import-as-an-air-gapped-hardware-wallet&quot;&gt;Import as an air-gapped hardware wallet&lt;/h2&gt;

&lt;p&gt;In Sparrow:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;choose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File &amp;gt; New Wallet&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;give the wallet a recognizable name;&lt;/li&gt;
  &lt;li&gt;select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Airgapped Hardware Wallet&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;find COLDCARD in the hardware-wallet list;&lt;/li&gt;
  &lt;li&gt;choose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Import File&lt;/code&gt; for MicroSD or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Scan&lt;/code&gt; for Q QR;&lt;/li&gt;
  &lt;li&gt;load the JSON file or scan the complete BBQr sequence;&lt;/li&gt;
  &lt;li&gt;inspect the populated keystore and wallet settings;&lt;/li&gt;
  &lt;li&gt;click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Apply&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sparrow saves a watch-only wallet and begins synchronizing its addresses.&lt;/p&gt;

&lt;p&gt;The computer can now generate receive addresses and build spends. A correctly created watch-only wallet cannot produce the COLDCARD signature. If Sparrow can spend without the device in this arrangement, stop and determine what private material was imported.&lt;/p&gt;

&lt;h2 id=&quot;verify-the-first-receive-address&quot;&gt;Verify the first receive address&lt;/h2&gt;

&lt;p&gt;This is the setup step that turns “the import seemed to work” into a concrete check.&lt;/p&gt;

&lt;p&gt;In Sparrow:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Receive&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;select the first receive address at index &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;keep the complete address visible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On COLDCARD:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Address Explorer&lt;/code&gt; from the main wallet menu;&lt;/li&gt;
  &lt;li&gt;choose the matching address type;&lt;/li&gt;
  &lt;li&gt;select receive index &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;compare every character with Sparrow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If they differ, do not receive bitcoin. Common causes are the wrong passphrase state, address type, account number, derivation, or export file. Correct the cause and re-export rather than trying to make one screen resemble the other.&lt;/p&gt;

&lt;p&gt;After a match, receive a small practice amount. Label it in Sparrow and wait until it is available to spend.&lt;/p&gt;

&lt;h2 id=&quot;q-path-sign-the-first-psbt-over-qr&quot;&gt;Q path: sign the first PSBT over QR&lt;/h2&gt;

&lt;p&gt;Q performs the entire round trip through the two screens.&lt;/p&gt;

&lt;h3 id=&quot;build-in-sparrow&quot;&gt;Build in Sparrow&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Enter the destination, amount, and fee rate.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Create Transaction&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Review the proposed inputs, outputs, and fee.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Finalize Transaction for Signing&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Show QR&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sparrow displays a single QR for a small PSBT or animated BBQr for a larger one.&lt;/p&gt;

&lt;h3 id=&quot;review-and-sign-on-q&quot;&gt;Review and sign on Q&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Press Q’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QR&lt;/code&gt; key to start the camera.&lt;/li&gt;
  &lt;li&gt;Hold Q in front of Sparrow’s code until every frame is captured.&lt;/li&gt;
  &lt;li&gt;Read the transaction on Q.&lt;/li&gt;
  &lt;li&gt;Compare the complete recipient address, amount, network fee, and change with your intended payment.&lt;/li&gt;
  &lt;li&gt;Stop on any unexpected warning.&lt;/li&gt;
  &lt;li&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ENTER&lt;/code&gt; only when the on-device transaction is correct.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Q signs and displays the result as QR or BBQr.&lt;/p&gt;

&lt;h3 id=&quot;return-to-sparrow&quot;&gt;Return to Sparrow&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Scan QR&lt;/code&gt; in Sparrow.&lt;/li&gt;
  &lt;li&gt;Present Q’s screen to the computer’s webcam until the signed result loads.&lt;/li&gt;
  &lt;li&gt;Review the complete transaction again.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Broadcast Transaction&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If scanning fails, do not take a photograph and send it through a random service. Improve the light, steady the devices, retry the BBQr sequence, or use MicroSD as the fallback.&lt;/p&gt;

&lt;h2 id=&quot;mk5-path-sign-the-first-psbt-with-microsd&quot;&gt;Mk5 path: sign the first PSBT with MicroSD&lt;/h2&gt;

&lt;p&gt;Mk5 has no camera for inbound QR, so MicroSD is the standard round trip.&lt;/p&gt;

&lt;h3 id=&quot;build-and-save-in-sparrow&quot;&gt;Build and save in Sparrow&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Enter the destination, amount, and fee rate.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Create Transaction&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Review and click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Finalize Transaction for Signing&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Save PSBT&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Save the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.psbt&lt;/code&gt; file in the root of the MicroSD card.&lt;/li&gt;
  &lt;li&gt;Eject the card cleanly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;review-and-sign-on-mk5&quot;&gt;Review and sign on Mk5&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Insert the card into Mk5.&lt;/li&gt;
  &lt;li&gt;Select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ready To Sign&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Choose the intended PSBT if more than one is listed.&lt;/li&gt;
  &lt;li&gt;Compare the recipient, amount, fee, and change on the Mk5 screen.&lt;/li&gt;
  &lt;li&gt;Stop on an unfamiliar warning or wrong-wallet fingerprint.&lt;/li&gt;
  &lt;li&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;✔&lt;/code&gt; only after the details match your intent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mk5 writes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[original]-signed.psbt&lt;/code&gt; and, for supported complete transactions, a ready-to-broadcast &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.txn&lt;/code&gt; file to the card.&lt;/p&gt;

&lt;h3 id=&quot;return-to-sparrow-1&quot;&gt;Return to Sparrow&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Move the MicroSD card back to the computer.&lt;/li&gt;
  &lt;li&gt;In Sparrow select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Load PSBT&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Open the signed PSBT or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.txn&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Review the result.&lt;/li&gt;
  &lt;li&gt;Click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Broadcast Transaction&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The card is a transport medium, not a trusted display. Malware may alter files on it. Base approval on what Mk5 parsed and showed, not on the file name or the computer screen.&lt;/p&gt;

&lt;h2 id=&quot;what-sparrow-learns&quot;&gt;What Sparrow learns&lt;/h2&gt;

&lt;p&gt;This workflow removes the live data connection between COLDCARD and the computer. It does not make the watch-only wallet anonymous or make the coordinator, transfer medium, or signer automatically trustworthy.&lt;/p&gt;

&lt;p&gt;Sparrow knows the wallet descriptor and can derive its addresses. It sees the transactions it discovers and the labels you add. If it connects to a public Electrum server, that server may observe the addresses and transactions being queried together.&lt;/p&gt;

&lt;p&gt;For better privacy, connect Sparrow to your own Bitcoin node, ideally over Tor. That changes who receives the wallet queries. It does not erase information already disclosed to a public server, exchange, block explorer, or reused address.&lt;/p&gt;

&lt;p&gt;Keep Sparrow’s wallet file, COLDCARD export, and labels out of general cloud storage unless that disclosure is intentional.&lt;/p&gt;

&lt;h2 id=&quot;troubleshooting-by-symptom&quot;&gt;Troubleshooting by symptom&lt;/h2&gt;

&lt;h3 id=&quot;addresses-do-not-match&quot;&gt;Addresses do not match&lt;/h3&gt;

&lt;p&gt;Check the passphrase state, active XFP, account number, address type, and whether Sparrow imported the correct file. Re-export only after the intended wallet is active.&lt;/p&gt;

&lt;h3 id=&quot;coldcard-reports-wrong-xfp&quot;&gt;COLDCARD reports wrong XFP&lt;/h3&gt;

&lt;p&gt;The PSBT was prepared for another wallet. Open the Sparrow wallet created from this COLDCARD and passphrase context, or activate the expected wallet on COLDCARD. Do not override the mismatch.&lt;/p&gt;

&lt;h3 id=&quot;coldcard-warns-about-change&quot;&gt;COLDCARD warns about change&lt;/h3&gt;

&lt;p&gt;Inspect the change address and derivation. If you cannot explain why COLDCARD does not recognize it, cancel and rebuild the transaction.&lt;/p&gt;

&lt;h3 id=&quot;sparrow-cannot-see-the-signed-file&quot;&gt;Sparrow cannot see the signed file&lt;/h3&gt;

&lt;p&gt;Eject and reinsert the MicroSD card, then load &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[original]-signed.psbt&lt;/code&gt; or the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.txn&lt;/code&gt; file. Do not accidentally reload the unsigned original.&lt;/p&gt;

&lt;h2 id=&quot;the-repeatable-routine&quot;&gt;The repeatable routine&lt;/h2&gt;

&lt;p&gt;The routine is short once the setup is correct:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Receive:&lt;/strong&gt; Sparrow address → verify on COLDCARD → receive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spend with Q:&lt;/strong&gt; Sparrow PSBT QR → Q review and signature → Sparrow scan → broadcast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spend with Mk5:&lt;/strong&gt; Sparrow PSBT on MicroSD → Mk5 review and signature → Sparrow load → broadcast.&lt;/p&gt;

&lt;p&gt;Sparrow may remain online, and the transfer medium should be treated as untrusted. In the intended workflow, the signing key remains on COLDCARD. Authorize the payment only after the on-device transaction details match your intent.&lt;/p&gt;

&lt;p&gt;Use the current &lt;a href=&quot;https://coldcard.com/guides/wallets/coldcard-sparrow-wallet-setup&quot;&gt;COLDCARD and Sparrow setup&lt;/a&gt;, &lt;a href=&quot;https://coldcard.com/guides/using-coldcard/coldcard-qr-signing&quot;&gt;Q QR signing&lt;/a&gt;, and &lt;a href=&quot;https://coldcard.com/guides/using-coldcard/coldcard-microsd-signing&quot;&gt;MicroSD signing&lt;/a&gt; guides for current screens and troubleshooting. Check the &lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;Security Status page&lt;/a&gt; for current firmware and migration guidance.&lt;/p&gt;

&lt;div style=&quot;text-align:center; margin:1.5rem 0;&quot;&gt;
  &lt;a class=&quot;btn btn-od btn-l btn-caps&quot; href=&quot;https://store.coinkite.com/store/category/coldcard&quot;&gt;
    &lt;svg class=&quot;fa-icon&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 576 512&quot;&gt;
  &lt;path d=&quot;M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20h44v44c0 11 9 20 20 20s20-9 20-20V180h44c11 0 20-9 20-20s-9-20-20-20H356V96c0-11-9-20-20-20s-20 9-20 20v44H272c-11 0-20 9-20 20z&quot; /&gt;
&lt;/svg&gt;

    Get COLDCARD Q or Mk5
  &lt;/a&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 24 Aug 2026 00:03:59 -1200</pubDate>
        <link>https://blog.coinkite.com/coldcard-sparrow-airgapped/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/coldcard-sparrow-airgapped/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>COLDCARD Security Update: Seed Generation, Transaction Integrity, and Data Isolation</title>
        <description>&lt;p&gt;Three weeks ago, we disclosed a firmware bug that caused weakened seed
generation. Attackers regenerated the corresponding private keys offline and
stole funds. The COLDCARD devices themselves were not hacked, remotely
accessed, or taken over. This release reflects three weeks of sustained review
since our July 31 hotfix — including AI-assisted review by Kimi and other
frontier models — not just the RNG path, but the whole system.&lt;/p&gt;

&lt;p&gt;This update covers what we found, what we fixed, and what customers need to do.&lt;/p&gt;

&lt;p&gt;Immediately, we strongly recommend that all &lt;strong&gt;COLDCARD Mk4, Mk5, and Q users
upgrade&lt;/strong&gt; to firmware &lt;a href=&quot;https://coldcard.com/downloads&quot;&gt;&lt;strong&gt;5.6.1 for Mk4/Mk5 and 1.5.1Q for Q from our official
firmware downloads page&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We are grateful to the security researchers who went above and beyond over the
past weeks, reporting issues, reproducing edge cases, and reviewing our fixes.
Their work put this firmware under intense, sustained scrutiny and made this
release stronger.&lt;/p&gt;

&lt;p&gt;Law enforcement authorities continue investigating the thefts and are working
to identify those responsible. We remain available to assist, and authorities
are keeping us informed of material developments.&lt;/p&gt;

&lt;p&gt;We’ll keep publishing concrete, inspectable changes as this work proceeds, and
we remain committed to supporting every customer working through their
migration until it’s done.&lt;/p&gt;

&lt;h2 id=&quot;what-this-release-includes&quot;&gt;What This Release Includes&lt;/h2&gt;

&lt;p&gt;This release includes improvements unrelated to the original RNG issue,
including policy changes to seed generation, transaction review, USB data
handling, firmware-update validation, Delta Mode hardening, and wallet backups.&lt;/p&gt;

&lt;p&gt;We’re publishing the major security and correctness changes here, including
changes unrelated to the original bug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important seed reminder:&lt;/strong&gt; Installing this update does not make an existing
vulnerable seed safe. If your seed may have been generated on affected firmware
from 2021 through July 2026, create a new seed using fixed firmware and move
your funds by following our
&lt;a href=&quot;https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/&quot;&gt;seed-generation advisory&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The July 31 firmware corrected the seed-generation failure for new seeds. This
release gives affected customers a more thoroughly reviewed foundation to
generate replacement seeds and complete their migration. It does not change
the migration guidance for seeds already generated on affected firmware.&lt;/p&gt;

&lt;p&gt;Our team remains heads down helping affected users complete their migrations.
Support and other contact channels are handling unusually high volumes, so
responses may take longer than usual. We appreciate your patience and will
continue publishing verified guidance on the
&lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;Security Status page&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;seed-generation-and-defense-in-depth&quot;&gt;Seed Generation and Defense in Depth&lt;/h2&gt;

&lt;p&gt;Every newly generated seed &lt;strong&gt;now requires&lt;/strong&gt; one user-sourced entropy method: at
least 65 key presses with unpredictable timing, 50 rolls of a physical
six-sided die, or 128 physical coin flips. The same requirement applies to
generated Temporary Seeds and generated CCC Key C. The standard workflow
combines that input with fresh device entropy from all sources available to us:
SE1, SE2, and TRNG. The backup PRNG generator now uses SHA-256 Hash_DRBG instead
of Yasmarang.&lt;/p&gt;

&lt;p&gt;At boot, it is initialized from the STM32 TRNG and reseeded with a full 256-bit
digest from SE1 and SE2; its output is also mixed with fresh STM32 TRNG words.
For each new seed, firmware combines 32 bytes from the generator, 32 fresh bytes
from SE1, and 8 fresh bytes from SE2, then applies double SHA-256 before mixing
the required user input with versioned method and purpose identifiers.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://scgbckbone.github.io/seedflow/&quot;&gt;&lt;img src=&quot;/images/posts-img/coldcard-seed-generation-flow.png&quot; alt=&quot;COLDCARD seed-generation flow for firmware 5.6.1 and 1.5.1Q&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;&lt;a href=&quot;https://scgbckbone.github.io/seedflow/&quot;&gt;Explore the interactive seed-generation flow.&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Dice Rolls Only remains a separate advanced option: it excludes all
hardware-generated randomness and requires 50 rolls for 12 words or 99 rolls
for 24 words. Keep every input and any final hash shown by the device private.&lt;/p&gt;

&lt;p&gt;Seed-entry handling was also tightened: holding a key no longer counts as
repeated dice rolls.&lt;/p&gt;

&lt;p&gt;For a wallet intended to hold a meaningful balance, we recommend the standard
Dice Rolls option executed honestly with genuine rolls, a strong and unique
BIP-39 passphrase, and, where appropriate, a carefully designed multisig setup
suited to your threat model.&lt;/p&gt;

&lt;p&gt;These protections do not make an already vulnerable seed safe and do not
replace moving funds to a newly generated seed.&lt;/p&gt;

&lt;h2 id=&quot;active-wallet-display-and-backup-behavior&quot;&gt;Active-Wallet Display and Backup Behavior&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;When a BIP-39 passphrase wallet is active, View Seed Words now shows the
effective extended private key instead of the parent seed words.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Backup System&lt;/strong&gt;, &lt;strong&gt;Clone Coldcard&lt;/strong&gt;, and Key Teleport’s &lt;strong&gt;Full COLDCARD
Backup&lt;/strong&gt; now capture the wallet currently in effect, including a Temporary
Seed or passphrase wallet, and warn before export.&lt;/li&gt;
  &lt;li&gt;For a passphrase wallet, the backup contains the effective XPRV. It does not
contain the parent seed words or the passphrase. Review the
&lt;a href=&quot;https://coldcard.com/docs/backups/#about-the-backup-file-contents&quot;&gt;backup documentation&lt;/a&gt;
before relying on a new backup, and retain the recovery material needed for
your intended wallet structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;transaction-approval-and-signing&quot;&gt;Transaction Approval and Signing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;COLDCARD now re-verifies a staged PSBT immediately before signing. If a
connected host changes the transaction after it was reviewed on the device,
signing stops and COLDCARD displays &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Transaction modified&lt;/code&gt;&lt;/strong&gt;. This fixes a
theoretical vulnerability if your computer’s USB port was compromised and
COLDCARD is connected during the signing process.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGHASH_SINGLE&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGHASH_SINGLE|ANYONECANPAY&lt;/code&gt; are now blocked by default
because later transaction outputs can remain modifiable. Advanced users who
require these modes can set &lt;strong&gt;Sighash Checks&lt;/strong&gt; to &lt;strong&gt;Warn&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;usb-data-and-firmware-update-boundaries&quot;&gt;USB Data and Firmware-Update Boundaries&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;USB downloads are now limited to the most recent result produced by the
device, require an encrypted session, and are invalidated by new uploads,
transactions, or sessions.&lt;/li&gt;
  &lt;li&gt;Additional bounds checks reject integer wraparound and out-of-range access at
the firmware call boundary. The SE1 check value now uses a nonce range
separate from encrypted secret data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;delta-mode-hardening&quot;&gt;Delta Mode Hardening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Delta Mode now blocks Seed Vault access through Seed XOR, Key Teleport, CCC
Key C import, and BIP-85.&lt;/li&gt;
  &lt;li&gt;Listing saved BIP-39 passphrases in Delta Mode no longer exposes seed-derived
wallet details.&lt;/li&gt;
  &lt;li&gt;Seed-derived message signatures are no longer valid when using a Delta Mode
PIN.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;integrated-trng-self-test&quot;&gt;Integrated TRNG Self-Test&lt;/h2&gt;

&lt;p&gt;We made the hardware TRNG path itself more robust against some internal error
states and compilation errors:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Firmware now checks hardware RNG seed-error state, output readiness, and
zero-word conditions. It retries a bounded number of times and stops on
obvious faults. After clearing a recoverable seed-error condition, firmware
discards the next 12 hardware words as required by the STM32 recovery
procedure before using new output.&lt;/li&gt;
  &lt;li&gt;At boot, firmware checks that the exact &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rng_get()&lt;/code&gt; function used by the
running build enters the intended hardware RNG read path. If that check
fails, the device stops before normal operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These controls verify specific source and failure boundaries. Passing the
boot-time check confirms that the running build’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rng_get()&lt;/code&gt; call reached the
intended hardware-read path during the self-test. It does not independently
prove the quality of every output or every entropy source, and it should not be
read as a claim that finite testing can prove arbitrary randomness.&lt;/p&gt;

&lt;h2 id=&quot;compatibility-and-correctness&quot;&gt;Compatibility and Correctness&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;BIP-322 message signing rejects unsupported text before approval, including
non-ASCII text and ambiguous whitespace cases.&lt;/li&gt;
  &lt;li&gt;WIF Store no longer creates duplicate entries after restart.&lt;/li&gt;
  &lt;li&gt;Short PSBT uploads are no longer mistaken for firmware. Multisig enrollment
rejects duplicate or device-owned keys. Clone restore now confirms the seed
fingerprint. Backup restore is capped, PSRAM is cleared on seed wipe, and
multisig names must be unique.&lt;/li&gt;
  &lt;li&gt;On Q, BBQr rejects malformed or oversized imports, and BIP-21 fields are
sanitized. Locally entered passphrases must be scrolled before reveal.&lt;/li&gt;
  &lt;li&gt;Send Password remains available as an explicitly approved emulated-keyboard
action when the general USB data protocol is disabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;thanks-to-external-contributors&quot;&gt;Thanks to External Contributors&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/drk1wi&quot;&gt;@drk1wi&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/KirillCherikov&quot;&gt;@KirillCherikov&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/instagibbs&quot;&gt;@instagibbs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://karma-x.io/blog/post/75/&quot;&gt;Karma-X security review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“FreeZ Agent” reported the staged-PSBT issue, “Rety” reported the Seed XOR
issue, and Peter Todd shared ideas on inter-key timing entropy.&lt;/p&gt;

&lt;h2 id=&quot;new-coldcard-security-status-page&quot;&gt;New COLDCARD Security Status Page&lt;/h2&gt;

&lt;p&gt;We’ve launched a new public
&lt;a href=&quot;https://coldcard.com/security/status&quot;&gt;COLDCARD Security Status page&lt;/a&gt;. This is
the place to check the current fixed-release matrix, migration guidance,
independent-validation evidence and its stated limits, and verified incident
updates. It also provides
&lt;a href=&quot;https://coldcard.com/security/status.json&quot;&gt;machine-readable status&lt;/a&gt;, and we’ll
keep it updated as verified information changes.&lt;/p&gt;

&lt;p&gt;Our &lt;a href=&quot;https://coinkite.com/security&quot;&gt;Security &amp;amp; Transparency hub&lt;/a&gt; connects that
live status page with the advisory, disclosure history, firmware-verification
resources, private reporting instructions, and related public records.&lt;/p&gt;

&lt;h2 id=&quot;how-to-update&quot;&gt;How to Update&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Download firmware only from the
&lt;a href=&quot;https://coldcard.com/downloads&quot;&gt;official COLDCARD downloads page&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Follow our instructions to
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#dont-trust-verify-the-firmware&quot;&gt;verify the SHA-256 hash and PGP signature&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Install it using the
&lt;a href=&quot;https://coldcard.com/docs/upgrade/#upgrade-procedure-using-microsd&quot;&gt;MicroSD upgrade procedure&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;After restart, select &lt;strong&gt;Advanced &amp;gt; Upgrade &amp;gt; Show Version&lt;/strong&gt; and confirm that
your device reports &lt;strong&gt;5.6.1 on Mk4/Mk5&lt;/strong&gt; or &lt;strong&gt;1.5.1Q on Q&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;If the July seed advisory applies to you, complete the separate seed
migration. Upgrading alone is not sufficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Full technical notes, affected-version information, source links, and
researcher acknowledgements are available in our
&lt;a href=&quot;https://coldcard.com/docs/upgrade/&quot;&gt;firmware release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Security reports can be submitted privately to
&lt;a href=&quot;mailto:security@coinkite.com&quot;&gt;security@coinkite.com&lt;/a&gt; under our
&lt;a href=&quot;https://coinkite.com/responsible-disclosure&quot;&gt;responsible-disclosure policy&lt;/a&gt;.
The firmware repository now also publishes private reporting guidance in
&lt;a href=&quot;https://github.com/Coldcard/firmware/blob/master/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt;.
Customers who need assistance should contact our
&lt;a href=&quot;https://coldcard.com/support/&quot;&gt;support team&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 20 Aug 2026 00:00:00 -1200</pubDate>
        <link>https://blog.coinkite.com/coldcard-security-update-5.6.1-1.5.1q/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/coldcard-security-update-5.6.1-1.5.1q/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>Update on Customer Data Retention</title>
        <description>&lt;p&gt;We want to inform our customers of a change to our data-handling practices in
connection with the &lt;a href=&quot;https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/&quot;&gt;security incident disclosed on July 30,
2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As many of you know, our standard practice has been to automatically blank
customer records after 120 days, retaining only email addresses and country of
residence. We have also offered customers the option to request accelerated
blanking at any time after delivery.&lt;/p&gt;

&lt;p&gt;Due to legal obligations arising from the security incident, including the
preservation of records that may be relevant to ongoing and anticipated legal
proceedings, we have temporarily suspended our automated data-blanking process.
This means that customer records that would otherwise have been blanked under
our standard schedule will be retained until further notice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;However, if you would like us to apply our existing retention policies to
your data, we will exempt them from this protocol. Please confirm that you do
not want us to preserve your data by using our
&lt;a href=&quot;https://coinkite.com/contact&quot;&gt;support form&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We understand that this is a departure from our published practices and that
our customers value the privacy protections we have committed to. We want to
be transparent about why this change has been made. We are required by law to
preserve records that may be relevant to legal proceedings. This obligation
applies regardless of our internal data-retention policies and overrides our
standard deletion schedule.&lt;/p&gt;

&lt;p&gt;During this period, all retained customer data will be stored securely and
access will be restricted to authorized personnel. Retained data will not be
used for any purpose other than compliance with legal obligations. We will
resume our standard data-blanking practices as soon as we are legally permitted
to do so.&lt;/p&gt;

&lt;p&gt;If you have questions about this change, please use our
&lt;a href=&quot;https://coinkite.com/contact&quot;&gt;support form&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 07 Aug 2026 00:54:54 -1200</pubDate>
        <link>https://blog.coinkite.com/update-on-customer-data-retention/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/update-on-customer-data-retention/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>Adding to the Public Record on Our Ongoing Investigation</title>
        <description>&lt;h2 id=&quot;what-happened-in-simple-terms&quot;&gt;What Happened, in Simple Terms&lt;/h2&gt;

&lt;p&gt;There was no intentional weak-entropy fallback. It is important to be precise
about what happened.&lt;/p&gt;

&lt;p&gt;Yasmarang was MicroPython’s built-in general-purpose PRNG, introduced upstream
in May 2018. It did not become part of COLDCARD’s seed-generation path until the
libNgU migration in March 2021. Most language runtimes include a
non-cryptographic PRNG for general-purpose tasks. Its presence was not itself
unusual.&lt;/p&gt;

&lt;p&gt;COLDCARD was designed to rely exclusively on its hardware TRNG for seed
generation, with no software fallback. Setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MICROPY_HW_ENABLE_RNG=0&lt;/code&gt; was
intended to disable the software path. A build and link integration error meant
that setting did not have the intended effect, and libNgU’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rng_get()&lt;/code&gt; symbol
resolved to MicroPython’s default Yasmarang implementation instead.&lt;/p&gt;

&lt;p&gt;The hardware TRNG did not fail and trigger a weaker fallback at runtime. This
was inherited platform behavior activated by a link-time error, not an
intentional seed-generation design decision or shortcut. This distinction does
not change the risk or migration guidance for affected seeds.&lt;/p&gt;

&lt;p&gt;The COLDCARD devices themselves were not hacked, remotely accessed, or taken
over. A firmware bug in affected releases caused weakened seed generation.
Attackers exploited those weak seeds offline by regenerating the corresponding
private keys and stealing funds.&lt;/p&gt;

&lt;p&gt;We understand there is real anger at this moment. Users have suffered real
losses, and for those impacted, no public statement is enough.&lt;/p&gt;

&lt;p&gt;We continue to support affected customers directly and urge others to reach
out to any other users they are aware of who may be affected. &lt;strong&gt;Urgently: if
your seed was generated with our affected firmware, without at least 50
independent, private dice rolls, and your funds aren’t protected by a strong,
unique BIP-39 passphrase, &lt;a href=&quot;https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/&quot;&gt;move those funds to a new wallet
now&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We also believe this vulnerability is a warning for every company building
Bitcoin hardware and software, not only us—and we’re publishing this now,
while the details are still fresh, because other companies need time to check
their own code to prevent potential further loss.&lt;/p&gt;

&lt;p&gt;To support that effort, we’ve published a new resource:
&lt;a href=&quot;https://coinkite.com/historical-disclosures&quot;&gt;coinkite.com/historical-disclosures&lt;/a&gt;,
a page that records all known public security research, coordinated
disclosures, professional reviews, internal findings, and security advisories
affecting COLDCARD devices.&lt;/p&gt;

&lt;p&gt;We’re publishing it because researchers, journalists, and security teams doing
their own review need a definitive record to work from. We’ll keep this updated
as the investigation continues.&lt;/p&gt;

&lt;h2 id=&quot;where-this-bug-lived&quot;&gt;Where This Bug Lived&lt;/h2&gt;

&lt;p&gt;As independent researchers have &lt;a href=&quot;https://x.com/utxoclub/status/2083838008357450063&quot;&gt;publicly
corroborated&lt;/a&gt;, this firmware
bug appears to have lived at a boundary between two unrelated submodules, not
in the parent code, and not in the cryptographic or Bitcoin-specific logic that
are the subject of most internal and third-party reviews.&lt;/p&gt;

&lt;p&gt;Because the flag check looked correct, the bug silently went unnoticed, and
its potential impact grew with every release.&lt;/p&gt;

&lt;p&gt;We believe it’s important for the broader ecosystem to understand how this bug
arose, and why it evaded detection, so they can avoid similar consequences.&lt;/p&gt;

&lt;h2 id=&quot;what-ai-assisted-review-did-and-didnt-catch&quot;&gt;What AI-Assisted Review Did, and Didn’t, Catch&lt;/h2&gt;

&lt;p&gt;We know there are questions about our own use of AI in code review. We’ll cover
this fully in our post-mortem, but given the active investigation right now,
here’s what we can say immediately.&lt;/p&gt;

&lt;p&gt;We’ve run AI-assisted review against our critical codebases, including in the
weeks before the exploit. It did not catch this vulnerability. Since the
incident, we’ve also tested our code against frontier models, including Kimi
K3, Claude Fable, and Codex 5.6. None of them caught it.&lt;/p&gt;

&lt;p&gt;It’s a reason for us, and anyone else relying on AI tools, to be specific about
what they currently catch and what they might not.&lt;/p&gt;

&lt;h2 id=&quot;what-were-asking-other-teams-to-do&quot;&gt;What We’re Asking Other Teams to Do&lt;/h2&gt;

&lt;p&gt;We remain committed to sharing what we learn as our own review process
continues. If your team relies on AI review of security-critical code, we
recommend you test it specifically against build and submodule boundaries.&lt;/p&gt;

&lt;p&gt;As a result of these new and powerful AI models, we believe many Bitcoin
projects, including those that rely on open-source code, require immediate
review.&lt;/p&gt;

&lt;p&gt;We’re addressing what we can, we’re supporting the people directly affected,
and publishing everything we know.&lt;/p&gt;
</description>
        <pubDate>Tue, 04 Aug 2026 08:02:40 -1200</pubDate>
        <link>https://blog.coinkite.com/adding-to-public-record/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/adding-to-public-record/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
      <item>
        <title>Update, Sunday.</title>
        <description>&lt;p&gt;The last three days have been some of the hardest in this company’s history,
and for a lot of the people reading this, they’ve been something much worse.
Money that took years to save, gone. Trust that took years to build, broken.
That impact is real, and for some, the damage is permanent. Some are asking hard
questions about our company. We are, too.&lt;/p&gt;

&lt;p&gt;Our work won’t stop in the weeks ahead. It is just beginning.&lt;/p&gt;

&lt;p&gt;Since Friday, our team has been reaching out and working directly with
customers, helping move funds that were still safe to move, walking through
recovery options together, and staying reachable for anyone who wrote in not
knowing where they stood. We acknowledge that others in the community did the
same, selflessly, and without compensation. We thank them sincerely.&lt;/p&gt;

&lt;p&gt;We’ve also been in direct contact with the wider hardware wallet and
self-custody community, including other builders, researchers, and people who’ve
thought hard about this kind of failure. All have graciously offered whatever
resources they could spare. We are still engaged in this outreach and are
committing to work with the broader industry going forward.&lt;/p&gt;

&lt;p&gt;If you have an affected device, please do not dispose of it. It may become
essential if funds are recovered. Our legal team will coordinate as warranted
with law enforcement across multiple jurisdictions to support efforts in
identifying those responsible.&lt;/p&gt;

&lt;p&gt;We destroyed our remaining COLDCARD inventory manufactured with the vulnerable
firmware, and shipment was halted when the vulnerability was confirmed.
SATSCARD, OPENDIME, and TAPSIGNER are not affected by this issue.&lt;/p&gt;

&lt;p&gt;Our &lt;a href=&quot;https://coldcard.com/downloads&quot;&gt;patched firmware&lt;/a&gt; prevents this issue from
affecting any new seed generated going forward. It does not repair or restore
security to a seed that was already generated on vulnerable firmware. A new
seed must be created, and funds moved to it to be secure.&lt;/p&gt;

&lt;p&gt;If you need a device sooner than we can provide one, or want an alternative
while you decide next steps, &lt;a href=&quot;https://bitkey.world/&quot;&gt;Bitkey&lt;/a&gt;,
&lt;a href=&quot;https://www.ledger.com/&quot;&gt;Ledger&lt;/a&gt;, &lt;a href=&quot;https://trezor.io/&quot;&gt;Trezor&lt;/a&gt;,
&lt;a href=&quot;https://blockstream.com/jade/&quot;&gt;Jade&lt;/a&gt;, and
&lt;a href=&quot;https://bitbox.swiss/&quot;&gt;BitBox&lt;/a&gt; are reputable options. For collaborative
custody, &lt;a href=&quot;https://www.anchorwatch.com/&quot;&gt;AnchorWatch&lt;/a&gt;, &lt;a href=&quot;https://casa.io/&quot;&gt;Casa&lt;/a&gt;,
&lt;a href=&quot;https://www.unchained.com/&quot;&gt;Unchained&lt;/a&gt;, &lt;a href=&quot;https://nunchuk.io/&quot;&gt;Nunchuk&lt;/a&gt;, and
&lt;a href=&quot;https://lianawallet.com/&quot;&gt;Liana&lt;/a&gt; are worthy of consideration.&lt;/p&gt;

&lt;p&gt;We continue to read everything—the replies, the texts, the emails. Some of it
we owe direct answers to. We’ll follow up on that specifically and soon.&lt;/p&gt;

&lt;p&gt;There are real lessons here for us as a company. We owe the community better,
and we’re beginning to understand the many ways in which our best efforts and
designs could have allowed for this to happen. We’ll show that in our technical
postmortem, as soon as it is possible to do so.&lt;/p&gt;

&lt;p&gt;For now, please continue to refer to the &lt;a href=&quot;https://blog.coinkite.com/coldcard-mk3-seed-generation-warning/&quot;&gt;COLDCARD Security
Advisory&lt;/a&gt; for
the best available information. Please continue to reach out to friends,
family, and loved ones who may be affected. Time is of the essence. The threat
remains real and ongoing.&lt;/p&gt;

</description>
        <pubDate>Sun, 02 Aug 2026 11:00:19 -1200</pubDate>
        <link>https://blog.coinkite.com/update-sunday/</link>
        <guid isPermaLink="true">https://blog.coinkite.com/update-sunday/</guid>
        
        
        <category>ckcc</category>
        
      </item>
    
  </channel>
</rss>
