{"id":425,"date":"2026-10-04T09:30:45","date_gmt":"2026-10-04T09:30:45","guid":{"rendered":"https:\/\/getbitcoin.guide\/articles\/?p=425"},"modified":"2026-10-05T09:41:57","modified_gmt":"2026-10-05T09:41:57","slug":"blockstream-jade-review","status":"publish","type":"post","link":"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/","title":{"rendered":"Blockstream Jade Review: What the Blind Oracle Protects"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Blockstream Jade stores no decryption key on the device. Its PIN is enforced by a blind oracle server that holds one of three secrets, so the hardware on its own cannot be squeezed for your seed. Three wrong PINs and both sides wipe, leaving only your recovery phrase.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"blockstream-jade-review\" data-minutes=\"12\">\n<style>.msq-audio{margin:1.25em 0 1.75em;padding:16px 18px;background:#EEF3F8;border:1px solid #CBD8E6;border-radius:12px}\n.msq-audio-lead{margin:0 0 8px;font-size:.95em}.msq-audio audio{width:100%;margin:0 0 12px;display:block}\n.msq-toc-title{margin:0 0 6px;font-weight:700}.msq-toc ol{margin:0;padding:0;list-style:none}\n.msq-toc li{display:flex;gap:10px;align-items:center;padding:6px 6px;border-bottom:1px solid #CBD8E6;border-radius:8px}\n.msq-toc li:last-child{border-bottom:0}.msq-toc li.is-active{background:#fff}\n.msq-toc-play{flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:0;background:#1F4E79;color:#fff;font:inherit;font-size:.72em;line-height:30px;padding:0;cursor:pointer}\n.msq-toc-play.is-playing{background:#B4531A}\n.msq-toc-time{flex:0 0 auto;min-width:3.1em;font-variant-numeric:tabular-nums;color:#4A5560;font-size:.9em}\n.msq-toc a{color:#1B1F24;text-decoration:none;line-height:1.35}.msq-toc li.is-active a{font-weight:700;color:#1F4E79}\n.msq-audio-note{margin:10px 0 0;font-size:.82em;color:#4A5560}\nh2.wp-block-heading[id]{scroll-margin-top:24px}\n.msq-hplay{display:inline-block;vertical-align:middle;width:26px;height:26px;margin:0 0 0 10px;border-radius:50%;border:0;background:#1F4E79;cursor:pointer;padding:0;position:relative;top:-2px}\n.msq-hplay::before{content:'\u25b6\ufe0e';display:block;color:#fff;font-size:11px;line-height:26px;text-align:center}\n.msq-hplay.is-playing{background:#B4531A}.msq-hplay.is-playing::before{content:'\u2016';font-size:13px;font-weight:700}\n.msq-bar{position:fixed;left:0;right:0;bottom:0;z-index:9000;display:flex;align-items:center;gap:10px;padding:8px 12px;padding-bottom:calc(8px + env(safe-area-inset-bottom));background:#FFFFFF;border-top:1px solid #CBD8E6;box-shadow:0 -4px 16px rgba(0,0,0,.08);font-size:.92em;color:#1B1F24;transition:transform .2s ease}\n.msq-bar.is-hidden{transform:translateY(130%)}\n.msq-bar-play{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:999px;background:#1F4E79;color:#fff;font:inherit;font-weight:700;padding:8px 14px 8px 12px;cursor:pointer;white-space:nowrap}\n.msq-bar-play.is-playing{background:#B4531A}\n.msq-bar-icon::before{content:'\u25b6\ufe0e';font-size:12px}.msq-bar-play.is-playing .msq-bar-icon::before{content:'\u2016';font-size:14px;font-weight:700}\n.msq-bar-chapter{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.msq-bar-time{flex:0 0 auto;font-variant-numeric:tabular-nums;color:#4A5560;font-size:.9em}\n.msq-bar-rate,.msq-bar-close{flex:0 0 auto;border:1px solid #CBD8E6;background:#fff;color:#1B1F24;font:inherit;font-size:.85em;line-height:1;border-radius:8px;padding:7px 9px;cursor:pointer}\n.msq-bar-close::before{content:'\u2715'}\n.msq-bar.msq-bar-pill{left:auto;right:14px;bottom:14px;padding:6px;padding-bottom:6px;border:1px solid #CBD8E6;border-radius:999px;box-shadow:0 6px 20px rgba(0,0,0,.15)}\n.msq-bar.msq-bar-pill .msq-bar-chapter,.msq-bar.msq-bar-pill .msq-bar-time,.msq-bar.msq-bar-pill .msq-bar-rate{display:none}\nbody.msq-has-bar{padding-bottom:76px}\n@media (max-width:600px){.msq-bar-time{display:none}.msq-bar{gap:8px;padding-left:10px;padding-right:10px}}\n.msq-s.msq-now{background:#EEF3F8;box-shadow:0 2px 0 #1F4E79;border-radius:2px}\ntr.msq-now td,tr.msq-now th{background:#EEF3F8;box-shadow:inset 0 -2px 0 #1F4E79}\n@media (hover:hover){.msq-s,tr[data-i]{cursor:pointer}.msq-s:hover{background:#EEF3F8}}<\/style>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"AudioObject\",\"@id\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#audio\",\"name\":\"Blockstream Jade Review: What the Blind Oracle Protects, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 4 October 2026.\",\"contentUrl\":\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-audio-202610041509.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT12M17S\",\"uploadDate\":\"2026-10-04\",\"inLanguage\":\"en-GB\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Blockstream Jade Review: What the Blind Oracle Protects\",\"startOffset\":0,\"endOffset\":65},{\"@type\":\"Clip\",\"name\":\"What is Blockstream Jade, and which models are on sale today?\",\"startOffset\":65,\"endOffset\":165,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#what-is-blockstream-jade-and-which-models-are-on-sale-today\"},{\"@type\":\"Clip\",\"name\":\"How does the blind oracle actually protect your PIN?\",\"startOffset\":165,\"endOffset\":258,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#how-does-the-blind-oracle-actually-protect-your-pin\"},{\"@type\":\"Clip\",\"name\":\"What happens when the PIN is wrong, or the oracle is offline?\",\"startOffset\":258,\"endOffset\":322,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#what-happens-when-the-pin-is-wrong-or-the-oracle-is-offline\"},{\"@type\":\"Clip\",\"name\":\"Which Jade firmware should you be running right now?\",\"startOffset\":322,\"endOffset\":392,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#which-jade-firmware-should-you-be-running-right-now\"},{\"@type\":\"Clip\",\"name\":\"How does Jade compare with Coldcard on price and custody?\",\"startOffset\":392,\"endOffset\":572,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#how-does-jade-compare-with-coldcard-on-price-and-custody\"},{\"@type\":\"Clip\",\"name\":\"What do people who actually use Jade report?\",\"startOffset\":572,\"endOffset\":737,\"url\":\"https:\/\/getbitcoin.guide\/articles\/blockstream-jade-review\/#what-do-people-who-actually-use-jade-report\"}],\"contentSize\":\"5.2 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 12 minutes. A synthetic voice reads the article and announces each section title as it begins; tables are read row by row and the questions at the end are left out.<\/p>\n<audio class=\"msq-audio-player\" controls preload=\"metadata\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-audio-202610041509.mp3\"><\/audio>\n<nav class=\"msq-toc\" aria-label=\"In this article\"><p class=\"msq-toc-title\">In this article<\/p>\n<ol>\n<li data-start=\"0.0\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"0.0\" aria-label=\"Play from: Blockstream Jade Review: What the Blind Oracle Protects\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Blockstream Jade Review: What the Blind Oracle Protects<\/a><\/li>\n<li data-start=\"65.02\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"65.02\" aria-label=\"Play from: What is Blockstream Jade, and which models are on sale today?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:05<\/span><a href=\"#what-is-blockstream-jade-and-which-models-are-on-sale-today\">What is Blockstream Jade, and which models are on sale today?<\/a><\/li>\n<li data-start=\"164.64\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"164.64\" aria-label=\"Play from: How does the blind oracle actually protect your PIN?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">2:45<\/span><a href=\"#how-does-the-blind-oracle-actually-protect-your-pin\">How does the blind oracle actually protect your PIN?<\/a><\/li>\n<li data-start=\"257.98\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"257.98\" aria-label=\"Play from: What happens when the PIN is wrong, or the oracle is offline?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:18<\/span><a href=\"#what-happens-when-the-pin-is-wrong-or-the-oracle-is-offline\">What happens when the PIN is wrong, or the oracle is offline?<\/a><\/li>\n<li data-start=\"321.6\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"321.6\" aria-label=\"Play from: Which Jade firmware should you be running right now?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">5:22<\/span><a href=\"#which-jade-firmware-should-you-be-running-right-now\">Which Jade firmware should you be running right now?<\/a><\/li>\n<li data-start=\"391.74\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"391.74\" aria-label=\"Play from: How does Jade compare with Coldcard on price and custody?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">6:32<\/span><a href=\"#how-does-jade-compare-with-coldcard-on-price-and-custody\">How does Jade compare with Coldcard on price and custody?<\/a><\/li>\n<li data-start=\"572.0\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"572.0\" aria-label=\"Play from: What do people who actually use Jade report?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:32<\/span><a href=\"#what-do-people-who-actually-use-jade-report\">What do people who actually use Jade report?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 4 October 2026 from the article as published that day. Press a chapter to jump there; the highlighted line is what is playing. A play button sits beside every section heading, and once you scroll past this player a bar at the bottom of the screen keeps the controls in reach. Tap or click any sentence to hear the reading start from there.<\/p>\n<script>var MSQ_SENT = [[0.0,\"h\",\"blockstreamjadereviewwha\",47],[3.88,\"p\",\"blockstreamjadestoresnod\",47],[7.36,\"p\",\"itspinisenforcedbyablind\",110],[14.56,\"p\",\"threewrongpinsandbothsid\",59],[19.16,\"p\",\"onthispagewhattheblockst\",271],[40.0,\"p\",\"checkedon4october2026aga\",124],[50.24,\"p\",\"almosteverypagerankingfo\",220],[65.02,\"h\",\"whatisblockstreamjadeand\",49],[68.7,\"p\",\"jadeisblockstreamsbitcoi\",42],[71.86,\"p\",\"itisopensourceitsupports\",121],[81.54,\"p\",\"blockstreamsblogcallsthe\",53],[86.38,\"p\",\"worthknowingbecausethest\",81],[92.46,\"t\",\"blockstreamjadetheorigin\",124],[110.06,\"t\",\"jadecore\",73],[121.42,\"t\",\"jadeplus\",104],[137.58,\"p\",\"twothingsfalloutofthatta\",27],[140.06,\"p\",\"theentrylevelmodelblocks\",195],[153.74,\"p\",\"onlyjadeplushasthecamera\",86],[160.66,\"p\",\"theothertwoareusbandblue\",36],[164.64,\"h\",\"howdoestheblindoracleact\",43],[167.84,\"p\",\"mosthardwarewalletsputad\",104],[174.4,\"p\",\"thatchipisalsoalmostalwa\",38],[177.84,\"p\",\"jadegoestheotherwaynotra\",94],[184.64,\"p\",\"perblockstreamsowndocume\",178],[198.36,\"p\",\"theoracleiscalledblindbe\",47],[202.04,\"p\",\"itstoresahashofyourpinpl\",167],[215.84,\"p\",\"jadeitselfnevertalkstoit\",101],[222.52,\"p\",\"thesecuritymodelfaqmakes\",126],[231.76,\"p\",\"thatisarealpropertynotma\",31],[234.48,\"p\",\"italsomeansthedeviceassh\",97],[240.92,\"p\",\"blockstreampublishesinst\",100],[247.6,\"p\",\"almostnobodywill\",16],[249.8,\"p\",\"itstillmattersthattheyca\",118],[257.98,\"h\",\"whathappenswhenthepinisw\",48],[261.42,\"p\",\"threewrongpinsisthewhole\",28],[263.94,\"p\",\"perthesamedocumentationt\",119],[271.9,\"p\",\"nolockouttimernotenthtry\",24],[274.62,\"p\",\"ifyourbackupisincomplete\",157],[286.02,\"p\",\"theofflinequestionistheo\",79],[291.3,\"p\",\"thesecuritymodelfaqstate\",125],[301.54,\"p\",\"theoracleisalayeroveryou\",47],[305.38,\"p\",\"blockstreamalsoarguesita\",89],[311.42,\"p\",\"thatisthevendorassessing\",122],[321.6,\"h\",\"whichjadefirmwareshouldy\",43],[324.24,\"p\",\"thecurrentfirmwareis1041\",46],[331.0,\"p\",\"thechangelogdoesnothedge\",101],[338.12,\"p\",\"itsentriesincludeimprove\",220],[352.92,\"p\",\"thatlastoneexistsforarea\",27],[354.92,\"p\",\"on5december2025blockstre\",164],[368.0,\"p\",\"firmware1038fixeditthebl\",119],[378.96,\"p\",\"theattackpathitnamediswo\",109],[386.44,\"p\",\"firmwarecomesbeforeevery\",66],[391.74,\"h\",\"howdoesjadecomparewithco\",47],[395.1,\"p\",\"pricesbelowcameoffeachve\",106],[404.3,\"p\",\"coinkitelistedthecoldcar\",79],[416.02,\"t\",\"priceon4oct2026\",57],[429.7,\"t\",\"secureelement\",101],[440.26,\"t\",\"firmware\",80],[450.78,\"t\",\"airgap\",77],[461.54,\"t\",\"scope\",53],[467.34,\"t\",\"power\",49],[475.58,\"p\",\"thecomparisongotsharperi\",40],[479.22,\"p\",\"percoinkitesownadvisoryp\",293],[508.18,\"p\",\"attackersregeneratedthek\",52],[512.22,\"p\",\"thedeviceswereneverremot\",195],[532.9,\"p\",\"wecoveredthatinthecoldca\",60],[537.98,\"p\",\"blockstreamrespondedon25\",165],[551.22,\"p\",\"thatisavendorcomparingit\",100],[558.62,\"p\",\"thetakeawaybothcompanies\",173],[572.0,\"h\",\"whatdopeoplewhoactuallyu\",36],[574.8,\"p\",\"wereadthe15reviewsonbloc\",132],[585.16,\"p\",\"thetrustpilotsampleissma\",140],[594.68,\"p\",\"thetrackeristhebetterrec\",88],[600.08,\"p\",\"on29august2026auserposti\",180],[619.52,\"p\",\"thesamepersonreportedtha\",154],[633.84,\"p\",\"on4august2026auserpostin\",281],[658.36,\"p\",\"on8august2026auserpostin\",246],[679.0,\"p\",\"andon24june2025atrustpil\",106],[689.36,\"p\",\"thepatternisworthstating\",61],[693.6,\"p\",\"nobodyinthissamplereport\",83],[700.0,\"p\",\"whattheyreportisfriction\",154],[711.8,\"p\",\"onereportcutsagainsteven\",129],[723.84,\"p\",\"fiveaccountsaretestimony\",65],[728.32,\"p\",\"theyareamapofwheretobeca\",132]];\n(function(){\n  function init(){\n  var root = document.querySelector('.msq-audio'); if (!root) { return; }\n  var audio = root.querySelector('audio'), items = Array.prototype.slice.call(root.querySelectorAll('.msq-toc li'));\n  var starts = items.map(function(li){ return parseFloat(li.getAttribute('data-start')) || 0; });\n  var names = items.map(function(li){ return li.querySelector('a').textContent; });\n  var anchors = items.map(function(li){ var h = li.querySelector('a').getAttribute('href') || ''; return (h.charAt(0) === '#' && h !== '#top') ? document.getElementById(h.slice(1)) : null; });\n  var article = root.getAttribute('data-article') || location.pathname, minutes = root.getAttribute('data-minutes') || '';\n  var marks = {}, started = false, pausedAt = -1, closed = false, ended = false;\n  var RATES = [1, 1.25, 1.5], rate = 1;\n  try { var saved = parseFloat(localStorage.getItem('msq-audio-rate')); if (RATES.indexOf(saved) >= 0) { rate = saved; } } catch (e) {}\n  audio.playbackRate = rate;\n  function track(name, extra){ try { if (typeof gtag === 'function') { var p = { article: article }; for (var k in extra) { p[k] = extra[k]; } gtag('event', name, p); } } catch (e) {} }\n  function current(){ var t = audio.currentTime, idx = 0; for (var i = 0; starts.length > i; i += 1) { if (t + 0.25 >= starts[i]) { idx = i; } } return idx; }\n  function onScreen(){\n    var line = window.innerHeight \/ 3, idx = 0;\n    for (var i = 0; anchors.length > i; i += 1) { var el = anchors[i]; if (el && line >= el.getBoundingClientRect().top) { idx = i; } }\n    return idx;\n  }\n  function fmt(s){ s = Math.max(0, Math.round(s || 0)); var m = Math.floor(s \/ 60), r = s % 60; return m + ':' + (10 > r ? '0' : '') + r; }\n  function play(from, source){\n    if (from !== null) { audio.currentTime = from; }\n    var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n    track(from === null ? 'audio_resume' : 'audio_chapter', { chapter: names[current()], start: Math.round(audio.currentTime), source: source });\n  }\n  var hbtns = anchors.map(function(el, i){\n    if (!el) { return null; }\n    var b = document.createElement('button'); b.type = 'button'; b.className = 'msq-hplay'; b.setAttribute('aria-label', 'Play this section: ' + names[i]);\n    b.addEventListener('click', function(){\n      if (!audio.paused && current() === i) { audio.pause(); track('audio_pause', { source: 'heading' }); return; }\n      play(starts[i], 'heading');\n    });\n    el.appendChild(b); return b;\n  });\n  var bar = document.createElement('div'); bar.className = 'msq-bar msq-bar-pill is-hidden'; bar.setAttribute('role', 'region'); bar.setAttribute('aria-label', 'Audio player');\n  var playBtn = document.createElement('button'); playBtn.type = 'button'; playBtn.className = 'msq-bar-play';\n  var icon = document.createElement('span'); icon.className = 'msq-bar-icon'; icon.setAttribute('aria-hidden', 'true');\n  var label = document.createElement('span'); label.className = 'msq-bar-label';\n  playBtn.appendChild(icon); playBtn.appendChild(label);\n  var chap = document.createElement('span'); chap.className = 'msq-bar-chapter';\n  var clock = document.createElement('span'); clock.className = 'msq-bar-time';\n  var rateBtn = document.createElement('button'); rateBtn.type = 'button'; rateBtn.className = 'msq-bar-rate'; rateBtn.setAttribute('aria-label', 'Playback speed');\n  var closeBtn = document.createElement('button'); closeBtn.type = 'button'; closeBtn.className = 'msq-bar-close'; closeBtn.setAttribute('aria-label', 'Close the audio bar');\n  bar.appendChild(playBtn); bar.appendChild(chap); bar.appendChild(clock); bar.appendChild(rateBtn); bar.appendChild(closeBtn);\n  document.body.appendChild(bar);\n  function showRate(){ rateBtn.textContent = (rate === 1 ? '1' : String(rate)) + 'x'; }\n  showRate();\n  rateBtn.addEventListener('click', function(){\n    rate = RATES[(RATES.indexOf(rate) + 1) % RATES.length]; audio.playbackRate = rate; showRate();\n    try { localStorage.setItem('msq-audio-rate', String(rate)); } catch (e) {}\n    track('audio_rate', { rate: rate });\n  });\n  closeBtn.addEventListener('click', function(){\n    closed = true; if (!audio.paused) { audio.pause(); } paint(); track('audio_bar_close', {});\n  });\n  function mode(){\n    if (!audio.paused) { return 'pause'; }\n    if (ended) { return 'again'; }\n    if (!started) { return 'listen'; }\n    return (pausedAt === onScreen()) ? 'resume' : 'section';\n  }\n  playBtn.addEventListener('click', function(){\n    var m = mode();\n    if (m === 'pause') { audio.pause(); track('audio_pause', { source: 'bar' }); return; }\n    if (m === 'again') { ended = false; play(0, 'bar'); return; }\n    if (m === 'resume') { play(null, 'bar'); return; }\n    play(starts[onScreen()], 'bar');\n  });\n  function paint(){\n    var idx = current(), playing = !audio.paused, m = mode();\n    items.forEach(function(li, i){\n      var on = (i === idx) && playing, b = li.querySelector('.msq-toc-play'), a = li.querySelector('a');\n      li.classList.toggle('is-active', on); b.classList.toggle('is-playing', on);\n      b.textContent = on ? '\u2016' : '\u25b6\ufe0e';\n      b.setAttribute('aria-label', (on ? 'Pause: ' : 'Play from: ') + a.textContent);\n    });\n    hbtns.forEach(function(b, i){ if (b) { var on = (i === idx) && playing; b.classList.toggle('is-playing', on); b.setAttribute('aria-label', (on ? 'Pause this section: ' : 'Play this section: ') + names[i]); } });\n    playBtn.classList.toggle('is-playing', playing);\n    label.textContent = m === 'pause' ? 'Pause' : m === 'again' ? 'Play again' : m === 'resume' ? 'Resume' : m === 'section' ? 'Play this section' : 'Listen, ' + minutes + ' min';\n    playBtn.setAttribute('aria-label', label.textContent);\n    chap.textContent = started ? names[(playing || m === 'resume') ? idx : onScreen()] : '';\n    clock.textContent = started ? fmt(audio.currentTime) + ' \/ ' + fmt(audio.duration) : '';\n    bar.classList.toggle('msq-bar-pill', !started);\n    var show = !closed && (started || 0 > root.getBoundingClientRect().bottom);\n    bar.classList.toggle('is-hidden', !show);\n    document.body.classList.toggle('msq-has-bar', show);\n  }\n  root.addEventListener('click', function(e){\n    var b = e.target.closest ? e.target.closest('.msq-toc-play') : null; if (!b) { return; }\n    var li = b.parentNode, s = parseFloat(b.getAttribute('data-start')) || 0;\n    if (!audio.paused && current() === items.indexOf(li)) { audio.pause(); track('audio_pause', { source: 'index' }); return; }\n    play(s, 'index');\n  });\n  audio.addEventListener('play', function(){ ended = false; closed = false; if (!started) { started = true; track('audio_play', { minutes: Math.round((audio.duration || 0) \/ 60) }); } paint(); });\n  audio.addEventListener('pause', function(){ pausedAt = current(); paint(); });\n  audio.addEventListener('timeupdate', function(){\n    paint();\n    if (audio.duration > 0) {\n      var pct = Math.floor(audio.currentTime \/ audio.duration * 100);\n      [25, 50, 75].forEach(function(m){ if (pct >= m && !marks[m]) { marks[m] = true; track('audio_progress', { percent: m }); } });\n    }\n  });\n  audio.addEventListener('ended', function(){ ended = true; track('audio_complete', {}); paint(); });\n  var ticking = false;\n  function onScroll(){ if (ticking) { return; } ticking = true; setTimeout(function(){ ticking = false; paint(); }, 80); }\n  window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll);\n  paint();\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }\n})();\n\n(function(){\n  function start(){\n    var root = document.querySelector('.msq-audio'), audio = root ? root.querySelector('audio') : null;\n    var map = (typeof MSQ_SENT !== 'undefined') ? MSQ_SENT : [];\n    if (!root || !audio || !map.length) { return; }\n    var scope = root.closest('main') || root.closest('article') || root.closest('.entry-content') || document.body;\n    var SKIP = '.msq-audio,.msq,.msq-tool,.msq-end,.msq-bar,script,style,noscript,figcaption,#rank-math-faq,.rank-math-block,nav,header,footer';\n    function norm(s){ return s.toLowerCase().replace(\/[^a-z0-9]+\/g, ''); }\n    var nodes = [], stream = '', walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT, null), n;\n    while ((n = walker.nextNode())) {\n      var el = n.parentElement; if (!el || el.closest(SKIP)) { continue; }\n      var raw = n.nodeValue, keep = [], norms = '';\n      for (var i = 0; raw.length > i; i += 1) { var c = raw.charAt(i).toLowerCase(); if (\/[a-z0-9]\/.test(c)) { keep.push(i); norms += c; } }\n      if (!norms) { continue; }\n      nodes.push({ node: n, a: stream.length, b: stream.length + norms.length, keep: keep });\n      stream += norms;\n    }\n    var segs = [], cursor = 0, lastRow = null;\n    map.forEach(function(m, idx){\n      var kind = m[1], f = m[2], len = m[3];\n      if (kind === 't') {\n        var rows = scope.querySelectorAll('tr'), after = !lastRow;\n        for (var r = 0; rows.length > r; r += 1) {\n          var tr = rows[r];\n          if (!after) { if (tr === lastRow) { after = true; } continue; }\n          var cell = tr.querySelector('td,th');\n          if (cell && norm(cell.textContent).indexOf(f) === 0) { tr.setAttribute('data-i', idx); lastRow = tr; break; }\n        }\n        return;\n      }\n      var p = stream.indexOf(f, cursor); if (0 > p) { return; }\n      segs.push({ i: idx, a: p, b: Math.min(p + len, stream.length) }); cursor = p + len;\n    });\n    var si = 0;\n    nodes.forEach(function(nd){\n      var frag = document.createDocumentFragment(), raw = nd.node.nodeValue, rawPos = 0, any = false;\n      for (var k = si; segs.length > k; k += 1) {\n        var sg = segs[k]; if (sg.a >= nd.b) { break; } if (nd.a >= sg.b) { continue; }\n        var s = Math.max(sg.a, nd.a), e = Math.min(sg.b, nd.b);\n        var rs = nd.keep[s - nd.a], re2 = nd.keep[e - nd.a - 1] + 1;\n        if (rs > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos, rs))); }\n        var span = document.createElement('span'); span.className = 'msq-s'; span.setAttribute('data-i', sg.i); span.textContent = raw.slice(rs, re2);\n        frag.appendChild(span); rawPos = re2; any = true;\n        if (sg.b > nd.b) { break; }\n      }\n      while (segs.length > si && nd.b >= segs[si].b) { si += 1; }\n      if (!any) { return; }\n      if (raw.length > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos))); }\n      nd.node.parentNode.replaceChild(frag, nd.node);\n    });\n    var starts = map.map(function(m){ return m[0]; }), curIdx = -1, lastUser = 0, timer = null, autoUntil = 0, dragging = false;\n    function idxAt(t){ var lo = 0, hi = starts.length; while (hi > lo + 1) { var mid = (lo + hi) >> 1; if (t + 0.15 >= starts[mid]) { lo = mid; } else { hi = mid; } } return (t + 0.15 >= starts[0]) ? lo : -1; }\n    function setNow(i){\n      if (i === curIdx) { return; }\n      Array.prototype.forEach.call(scope.querySelectorAll('.msq-now'), function(el){ el.classList.remove('msq-now'); });\n      curIdx = i; if (0 > i) { return; }\n      var els = scope.querySelectorAll('[data-i=\"' + i + '\"]'); if (!els.length) { return; }\n      Array.prototype.forEach.call(els, function(el){ el.classList.add('msq-now'); });\n      var r = els[0].getBoundingClientRect(), now = Date.now();\n      if (!dragging && now > lastUser + 2500 && (80 > r.top || r.bottom > window.innerHeight - 140)) {\n        var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n        autoUntil = now + (reduce ? 400 : 1600);\n        els[0].scrollIntoView({ block: 'center', behavior: reduce ? 'auto' : 'smooth' });\n      }\n    }\n    function tick(){ if (!audio.paused) { setNow(idxAt(audio.currentTime)); } }\n    function userScrolled(){ lastUser = Date.now(); }\n    ['wheel', 'touchmove', 'keydown'].forEach(function(ev){ window.addEventListener(ev, userScrolled, { passive: true }); });\n    window.addEventListener('scroll', function(){ if (Date.now() > autoUntil) { userScrolled(); } }, { passive: true });\n    window.addEventListener('mousedown', function(e){ if (e.clientX >= document.documentElement.clientWidth) { dragging = true; userScrolled(); } }, { passive: true });\n    window.addEventListener('mouseup', function(){ if (dragging) { dragging = false; userScrolled(); } }, { passive: true });\n    audio.addEventListener('play', function(){ if (timer) { clearInterval(timer); } timer = setInterval(tick, 150); tick(); });\n    audio.addEventListener('pause', function(){ if (timer) { clearInterval(timer); timer = null; } });\n    scope.addEventListener('click', function(e){\n      if (e.target.closest('a, button, input, select, textarea, label, summary, .msq, .msq-tool, .msq-end, .msq-audio, .msq-bar')) { return; }\n      var sel = window.getSelection ? String(window.getSelection()) : '';\n      if (sel && sel.trim()) { return; }\n      var el = e.target.closest('[data-i]'); if (!el) { return; }\n      var i = parseInt(el.getAttribute('data-i'), 10); if (isNaN(i)) { return; }\n      if (!audio.paused && i === curIdx) { return; }\n      lastUser = Date.now();\n      audio.currentTime = starts[i];\n      var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n      try { if (typeof gtag === 'function') { gtag('event', 'audio_chapter', { article: location.pathname, source: 'sentence', start: Math.round(starts[i]) }); } } catch (err) {}\n    });\n    audio.addEventListener('seeked', tick);\n    audio.addEventListener('ended', function(){ setNow(-1); });\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start); } else { start(); }\n})();<\/script>\n<\/div>\n\n\n\n<p class=\"msq-hook wp-block-paragraph\">On this page: what the Blockstream store actually listed on 4 October 2026 against what the marketing pages say, the three secrets behind the blind oracle quoted from Blockstream&#8217;s own documentation, the December 2025 advisory and the firmware that fixed it, and five dated accounts from the public issue tracker and Trustpilot.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"blockstream-jade-review\" data-category=\"self custody and wallets\" data-list=\"1\">\n<style>.msq,.msq-hook,.msq-box,.msq-end,.msq-tool{--msq-accent:#1F4E79;--msq-accent-text:#FFFFFF;--msq-line:#CBD8E6;--msq-warn:#B4531A;--msq-muted:#4A5560;--msq-tint:#EEF3F8;--msq-base:#FFFFFF}\n.msq{margin:1.25em 0 1.75em}\n.msq-hook{border-left:3px solid var(--msq-accent);padding:6px 14px;color:var(--msq-muted);font-size:.97em}\n.msq-box{background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px;padding:0}\n.msq-box>summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:700;color:var(--msq-accent)}\n.msq-box>summary::-webkit-details-marker{display:none}\n.msq-box>summary::before{content:\"+\";display:inline-block;width:1.1em;font-weight:800}\n.msq-box[open]>summary::before{content:\"\\00d7\"}\n.msq-body{padding:2px 18px 18px}\n.msq-intro{margin:0 0 12px;font-size:.95em;color:var(--msq-muted)}\n.msq-list{margin:0;padding:0;list-style:none}\n.msq-q{margin:0 0 18px;padding:0}\n.msq-question{font-weight:700;margin:0 0 8px}\n.msq-options{display:flex;flex-direction:column;gap:8px}\n.msq-opt{text-align:left;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;padding:10px 12px;font:inherit;font-size:.95em;color:inherit;cursor:pointer;line-height:1.35}\n.msq-opt:hover{border-color:var(--msq-accent)}\n.msq-opt[disabled]{cursor:default}\n.msq-opt.is-right{border-color:var(--msq-accent);background:var(--msq-line);font-weight:700}\n.msq-opt.is-wrong{border-color:var(--msq-warn);color:var(--msq-warn)}\n.msq-explain{margin:8px 0 0;font-size:.92em;padding:10px 12px;border-left:3px solid var(--msq-accent);background:var(--msq-base);border-radius:0 8px 8px 0}\n.msq-explain[hidden]{display:none}\n.msq-verdict{font-weight:700}\n.msq-result{margin-top:14px;padding:14px 16px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:10px}\n.msq-result[hidden]{display:none}\n.msq-result h3{margin:0 0 6px;font-size:1.1em}\n.msq-result p{margin:0 0 8px}\n.msq-jump{margin:0 0 8px;padding-left:1.2em}\n.msq-form{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.msq-form input[type=email]{flex:1 1 220px;padding:10px 12px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-btn{background:var(--msq-accent);color:var(--msq-accent-text);border:0;border-radius:8px;padding:11px 18px;font:inherit;font-weight:700;cursor:pointer}\n.msq-btn:hover{filter:brightness(.92)}\n.msq-btn[disabled]{opacity:.7;cursor:default}\n.msq-no{font-size:.9em;color:var(--msq-muted);margin-left:4px}\n.msq-privacy{margin:6px 0 0;font-size:.82em;color:var(--msq-muted);flex-basis:100%}\n.msq-hp{position:absolute;left:-5000px;width:1px;height:1px;overflow:hidden}\n.msq-msg{margin:8px 0 0;font-size:.92em}\n.msq-end{margin:1.5em 0;padding:18px;border:1px solid var(--msq-accent);border-radius:12px;text-align:center;background:var(--msq-tint)}\n.msq-end p{margin:0 0 12px}\n.msq-end .msq-body{text-align:left;padding:16px 0 0}\n.msq-end .msq-start-test[hidden]{display:none}\n.msq-tool{margin:1.5em 0;padding:18px 20px;background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px}\n.msq-tool h3{margin:0 0 6px;font-size:1.15em}\n.msq-tool p{margin:0 0 10px}\n.msq-tool .msq-note{font-size:.85em;color:var(--msq-muted);margin:10px 0 0}\n.msq-check label{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--msq-line);cursor:pointer;line-height:1.4}\n.msq-check label:last-of-type{border-bottom:0}\n.msq-check input{margin-top:5px;flex:0 0 auto;width:18px;height:18px;accent-color:var(--msq-accent)}\n.msq-check-count{font-weight:700;margin:10px 0 0}\n.msq-verdict-box{margin:12px 0 0;padding:10px 14px;border-radius:8px;background:var(--msq-base);border-left:3px solid var(--msq-warn)}\n.msq-verdict-box[hidden]{display:none}\n.msq-calc{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}\n.msq-calc label{display:flex;flex-direction:column;gap:4px;font-size:.92em}\n.msq-calc input,.msq-calc select{padding:8px 10px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-calc-out{grid-column:1 \/ -1;margin-top:6px;padding:12px 14px;background:var(--msq-base);border-radius:8px;border:1px solid var(--msq-line)}\n.msq-calc-out strong{font-size:1.15em}\n.msq-choose label{display:block;padding:9px 12px;margin:0 0 8px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;cursor:pointer}\n.msq-choose input{margin-right:8px;accent-color:var(--msq-accent)}\n.msq-choice-result{margin-top:10px;padding:12px 14px;background:var(--msq-base);border-left:3px solid var(--msq-accent);border-radius:0 8px 8px 0}\n.msq-choice-result[hidden]{display:none}\n@media (max-width:600px){.msq-calc{grid-template-columns:1fr}}\nh2.wp-block-heading[id]{scroll-margin-top:24px}<\/style>\n<noscript><style>.msq-explain{display:block !important}<\/style><\/noscript>\n<details class=\"msq-box\">\n<summary>Think you already know this? Five questions, one minute.<\/summary>\n<div class=\"msq-body\">\n<p class=\"msq-intro\">Every answer is on this page. Answer from what you know now; the page fills in the rest.<\/p>\n<ol class=\"msq-list\">\n<li class=\"msq-q\" data-q=\"1\" data-answer=\"b\" data-title=\"What is Blockstream Jade, and which models are on sale today?\" data-section=\"#what-is-blockstream-jade-and-which-models-are-on-sale-today\">\n<p class=\"msq-question\">1. Which Jade model can be run as a QR only air gapped signer?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">All three, they share the same firmware<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Jade Plus only, because it is the one with a camera and a card slot<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Jade Core, the entry level model<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Per <a href=\"https:\/\/blockstream.com\/jade\/\" target=\"_blank\" rel=\"noopener\">Blockstream&#8217;s product pages<\/a>, the original Jade and Jade Core carry USB-C and Bluetooth but no camera. The security model is identical across the range; the connection is what differs. <a class=\"msq-section\" href=\"#what-is-blockstream-jade-and-which-models-are-on-sale-today\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"c\" data-title=\"How does the blind oracle actually protect your PIN?\" data-section=\"#how-does-the-blind-oracle-actually-protect-your-pin\">\n<p class=\"msq-question\">2. How many secrets are needed to decrypt the recovery phrase and spend?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">One, your PIN<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Two, your PIN and a secret on the device<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Three, your PIN, a secret on Jade and a secret on the oracle<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Per <a href=\"https:\/\/help.blockstream.com\/hc\/en-us\/articles\/9639949755673-How-does-Blockstream-Jade-s-oracle-enforced-PIN-protection-work\" target=\"_blank\" rel=\"noopener\">Blockstream&#8217;s documentation on oracle enforced PIN protection<\/a>, all three are required, which is why the device alone cannot be squeezed for the seed. <a class=\"msq-section\" href=\"#how-does-the-blind-oracle-actually-protect-your-pin\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"a\" data-title=\"What happens when the PIN is wrong, or the oracle is offline?\" data-section=\"#what-happens-when-the-pin-is-wrong-or-the-oracle-is-offline\">\n<p class=\"msq-question\">3. How many wrong PIN entries before Jade and the oracle delete their keys?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Three<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Ten, with an increasing delay between attempts<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">There is no limit, only a lockout timer<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Per <a href=\"https:\/\/help.blockstream.com\/hc\/en-us\/articles\/9639949755673-How-does-Blockstream-Jade-s-oracle-enforced-PIN-protection-work\" target=\"_blank\" rel=\"noopener\">the same documentation<\/a>, both sides delete their keys on the third wrong attempt and the device must then be restored from the recovery phrase. There is no timer and no fourth try. <a class=\"msq-section\" href=\"#what-happens-when-the-pin-is-wrong-or-the-oracle-is-offline\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"Which Jade firmware should you be running right now?\" data-section=\"#which-jade-firmware-should-you-be-running-right-now\">\n<p class=\"msq-question\">4. What does the secure version increment in firmware 1.0.41 do?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">It speeds up QR scanning<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">It blocks firmware downgrades below that release<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">It adds support for other coins<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Per <a href=\"https:\/\/github.com\/Blockstream\/Jade\/blob\/master\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">the published changelog<\/a>, 1.0.41 dated 22 August 2026 increments the secure version to prevent downgrades, which matters because the December 2025 advisory named phishing sites pushing owners to downgrade. <a class=\"msq-section\" href=\"#which-jade-firmware-should-you-be-running-right-now\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"How does Jade compare with Coldcard on price and custody?\" data-section=\"#how-does-jade-compare-with-coldcard-on-price-and-custody\">\n<p class=\"msq-question\">5. Which Coldcard devices did Coinkite&#8217;s 30 July 2026 advisory name as affected by the seed generation flaw?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Only the Mk3<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Mk2 and Mk3 on versions 4.0.1 through 4.1.9, and Mk4, Mk5 and Q on builds before their fixed releases<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Only the Coldcard Q<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Per <a href=\"https:\/\/blog.coinkite.com\/coldcard-mk3-seed-generation-warning\/\" target=\"_blank\" rel=\"noopener\">Coinkite&#8217;s own advisory<\/a>, updated 1 August 2026, which puts the affected Mk4, Mk5 and Q seeds at about 72 bits of entropy rather than 128. Updating the firmware does not repair a seed already generated. <a class=\"msq-section\" href=\"#how-does-jade-compare-with-coldcard-on-price-and-custody\">Read the section<\/a><\/p>\n<\/li>\n<\/ol>\n<div class=\"msq-result\" hidden><\/div>\n<\/div>\n<\/details>\n<script>(function(){\n  if (window.__msqInit) { return; }\n  window.__msqInit = true;\n  var root = document.getElementById('ms-quiz');\n  if (!root) { return; }\n  var meta = { slug: root.getAttribute('data-slug'), category: root.getAttribute('data-category'),\n               list: root.getAttribute('data-list') || '1' };\n  function qs(el, s){ return el.querySelector(s); }\n  function qsa(el, s){ return Array.prototype.slice.call(el.querySelectorAll(s)); }\n  function track(name, params){\n    try { if (typeof gtag === 'function') { var p = params || {}; p.article = meta.slug; gtag('event', name, p); } } catch (e) {}\n  }\n  function jumpList(missed){\n    if (!missed.length) { return ''; }\n    return '<ul class=\"msq-jump\">' + missed.map(function(q){\n      return '<li><a href=\"' + q.getAttribute('data-section') + '\">' + q.getAttribute('data-title') + '<\/a><\/li>';\n    }).join('') + '<\/ul>';\n  }\n  function emailForm(){\n    return '<div class=\"msq-sub\"><p><strong>Get the next one.<\/strong> We publish new articles on ' + meta.category\n      + ' most weeks and recheck this page on Sundays. Email me when a new article goes up or this page changes.<\/p>'\n      + '<form class=\"msq-form\" method=\"post\" action=\"\/mail\/form.php\" novalidate>'\n      + '<input type=\"hidden\" name=\"list\" value=\"' + meta.list + '\">'\n      + '<input type=\"hidden\" name=\"name\" value=\"\">'\n      + '<label class=\"msq-hp\" aria-hidden=\"true\">Leave this empty<input type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/label>'\n      + '<input type=\"email\" name=\"email\" placeholder=\"you@example.com\" required aria-label=\"Email address\" autocomplete=\"email\">'\n      + '<button type=\"submit\" class=\"msq-btn\">Email me the updates<\/button>'\n      + '<a href=\"#\" class=\"msq-no\">No thanks<\/a>'\n      + '<p class=\"msq-privacy\">We store your email and this page\\'s topic, nothing else. Unsubscribe any time.<\/p>'\n      + '<\/form><p class=\"msq-msg\" aria-live=\"polite\"><\/p><\/div>';\n  }\n  \/* The autoresponder always answers 200 with its own page. A \".msg.err\" box means the\n     address was rejected, \"You're subscribed\" means accepted, and a redirect only happens\n     after a successful subscribe. Same reading as the landing pages on the other sites. *\/\n  function sendForm(form){\n    return fetch(form.getAttribute('action'), { method: 'POST', body: new FormData(form), credentials: 'same-origin', redirect: 'manual' })\n      .then(function(res){\n        if (res.type === 'opaqueredirect') { return { status: 'ok' }; }\n        if (res.status === 404) { return { status: 'notlive' }; }\n        if (!res.ok) { throw new Error('HTTP ' + res.status); }\n        return res.text().then(function(t){\n          var doc = new DOMParser().parseFromString(t, 'text\/html');\n          var err = doc.querySelector('.msg.err');\n          if (err) {\n            var m = err.textContent.trim();\n            if (\/something went wrong\/i.test(m)) { throw new Error(m); }\n            return { status: 'rejected', message: m };\n          }\n          if (\/you.re subscribed\/i.test(doc.body.textContent)) { return { status: 'ok' }; }\n          return { status: 'unknown' };\n        });\n      });\n  }\n  function wireForm(sub){\n    var form = qs(sub, '.msq-form'), msg = qs(sub, '.msq-msg');\n    qs(form, '.msq-no').addEventListener('click', function(e){\n      e.preventDefault();\n      sub.innerHTML = '<p class=\"msq-msg\">No problem. The Sunday refresh keeps this page current either way.<\/p>';\n      track('quiz_email', { result: 'declined' });\n    });\n    form.addEventListener('submit', function(e){\n      e.preventDefault();\n      var input = qs(form, 'input[name=email]'), btn = qs(form, '.msq-btn');\n      var email = input.value.trim(); input.value = email;\n      if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { msg.textContent = 'That email does not look right.'; return; }\n      btn.disabled = true; btn.textContent = 'Sending';\n      function reset(){ btn.disabled = false; btn.textContent = 'Email me the updates'; }\n      sendForm(form).then(function(r){\n        if (r.status === 'ok' || r.status === 'unknown') {\n          sub.innerHTML = '<p class=\"msq-msg\"><strong>Done.<\/strong> We will email you when the next article on ' + meta.category\n            + ' goes up and when this page changes. If a confirmation email arrives, click it.<\/p>';\n          track('quiz_email', { result: r.status });\n          if (r.status === 'ok') { track('generate_lead', { method: 'quiz' }); }\n        } else if (r.status === 'notlive') {\n          msg.textContent = 'Sign up is not switched on yet for this site. Nothing was stored.'; reset();\n          track('quiz_email', { result: 'notlive' });\n        } else {\n          msg.textContent = r.message || 'Please check the email address and try again.'; reset();\n          track('quiz_email', { result: 'rejected' });\n        }\n      }).catch(function(){\n        msg.textContent = 'Could not reach the sign up service just now. Nothing was stored.'; reset();\n        track('quiz_email', { result: 'error' });\n      });\n    });\n  }\n  function finish(container, mode, score, total, missed){\n    var result = qs(container, '.msq-result');\n    track('quiz_complete', { mode: mode, score: score, total: total });\n    var h;\n    if (mode === 'pre') {\n      h = '<h3>You knew ' + score + ' of ' + total + ' before reading.<\/h3>';\n      h += (score === total) ? '<p>All of them. Read on anyway; the sections below carry the detail behind each answer.<\/p>'\n                             : '<p>The rest is below. Jump straight to what you missed:<\/p>' + jumpList(missed);\n      try { sessionStorage.setItem('msq-pre-' + meta.slug, String(score)); } catch (e) {}\n    } else {\n      var pre = null;\n      try { pre = sessionStorage.getItem('msq-pre-' + meta.slug); } catch (e) {}\n      h = '<h3>You got ' + score + ' of ' + total + '.<\/h3>';\n      if (pre !== null) { h += '<p>Before reading you had ' + pre + ' of ' + total + '.<\/p>'; }\n      if (missed.length) { h += '<p>Worth a second look:<\/p>' + jumpList(missed); }\n      h += emailForm();\n    }\n    result.innerHTML = h; result.hidden = false;\n    if (mode !== 'pre') { wireForm(qs(result, '.msq-sub')); }\n    result.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  }\n  function setup(container, mode){\n    var qEls = qsa(container, '.msq-q'), answered = 0, score = 0, missed = [];\n    qEls.forEach(function(q){\n      var answer = q.getAttribute('data-answer'), opts = qsa(q, '.msq-opt'), explain = qs(q, '.msq-explain');\n      q.removeAttribute('data-done'); explain.hidden = true; qs(explain, '.msq-verdict').textContent = '';\n      opts.forEach(function(b){ b.disabled = false; b.classList.remove('is-right', 'is-wrong'); });\n      opts.forEach(function(b){\n        b.addEventListener('click', function(){\n          if (q.getAttribute('data-done')) { return; }\n          q.setAttribute('data-done', '1');\n          var ok = b.getAttribute('data-opt') === answer;\n          opts.forEach(function(o){ o.disabled = true; if (o.getAttribute('data-opt') === answer) { o.classList.add('is-right'); } });\n          if (ok) { score += 1; } else { b.classList.add('is-wrong'); missed.push(q); }\n          qs(explain, '.msq-verdict').textContent = ok ? 'Right. ' : 'Not quite. ';\n          explain.hidden = false;\n          answered += 1;\n          track('quiz_answer', { mode: mode, question: q.getAttribute('data-q'), correct: ok ? 1 : 0 });\n          if (answered === qEls.length) { finish(container, mode, score, qEls.length, missed); }\n        });\n      });\n    });\n  }\n  var box = qs(root, '.msq-box');\n  setup(root, 'pre');\n  if (box) { box.addEventListener('toggle', function(){ if (box.open) { track('quiz_open', { mode: 'pre' }); } }); }\n  \/* The end block sits far below this script, so it does not exist yet while this runs\n     during parsing. A delegated listener finds it at click time. *\/\n  document.addEventListener('click', function(e){\n    var startBtn = (e.target && e.target.closest) ? e.target.closest('.msq-start-test') : null;\n    if (!startBtn) { return; }\n    var end = startBtn.closest('.msq-end');\n    if (!end) { return; }\n    var mount = qs(end, '.msq-mount');\n    var clone = qs(root, '.msq-body').cloneNode(true);\n    var intro = qs(clone, '.msq-intro');\n    if (intro) { intro.textContent = 'The same five questions, now that you have read the page.'; }\n    var res = qs(clone, '.msq-result'); if (res) { res.hidden = true; res.innerHTML = ''; }\n    mount.innerHTML = ''; mount.appendChild(clone);\n    setup(mount, 'test');\n    startBtn.hidden = true;\n    track('quiz_open', { mode: 'test' });\n    mount.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    var first = qs(mount, '.msq-opt'); if (first) { first.focus({ preventScroll: true }); }\n  });\n  \/* Shared tool behaviour: checklists remember their ticks on this device, and a chooser\n     shows the result for the option picked. Calculators carry their own small script. *\/\n  function initTools(){\n    qsa(document, '.msq-check').forEach(function(box){\n      var key = 'msq-check-' + meta.slug + '-' + (box.getAttribute('data-id') || 'x');\n      var boxes = qsa(box, 'input[type=checkbox]'), count = qs(box, '.msq-check-count');\n      var yes = qs(box, '.msq-verdict-yes'), no = qs(box, '.msq-verdict-no');\n      var saved = {};\n      try { saved = JSON.parse(localStorage.getItem(key) || '{}'); } catch (e) {}\n      boxes.forEach(function(cb, i){ if (saved[i]) { cb.checked = true; } });\n      function refresh(){\n        var n = boxes.filter(function(cb){ return cb.checked; }).length, state = {};\n        boxes.forEach(function(cb, i){ if (cb.checked) { state[i] = 1; } });\n        try { localStorage.setItem(key, JSON.stringify(state)); } catch (e) {}\n        if (count) { count.textContent = n + ' of ' + boxes.length + (box.getAttribute('data-verb') || ' done'); }\n        if (yes && no) { yes.hidden = n === 0; no.hidden = n !== 0; }\n      }\n      boxes.forEach(function(cb){ cb.addEventListener('change', function(){ refresh(); track('tool_check', { tool: box.getAttribute('data-id') }); }); });\n      refresh();\n    });\n    qsa(document, '.msq-choose').forEach(function(box){\n      var results = qsa(box, '.msq-choice-result');\n      qsa(box, 'input[type=radio]').forEach(function(r){\n        r.addEventListener('change', function(){\n          results.forEach(function(el){ el.hidden = el.getAttribute('data-for') !== r.value; });\n          track('tool_choose', { tool: box.getAttribute('data-id'), choice: r.value });\n        });\n      });\n    });\n  }\n  \/\/ read progress: how far down the article the reader has scrolled, fired once per quarter\n  (function(){\n    var art = root.closest('article') || root.parentNode, fired = {};\n    function check(){\n      var top = art.getBoundingClientRect().top + window.pageYOffset, h = art.offsetHeight || 1;\n      var seen = (window.pageYOffset + window.innerHeight - top) \/ h * 100;\n      [25, 50, 75, 100].forEach(function(m){ if (seen >= m && !fired[m]) { fired[m] = true; track('read_progress', { percent: m }); } });\n    }\n    window.addEventListener('scroll', check, { passive: true }); window.addEventListener('load', check);\n  })();\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTools); } else { initTools(); }\n})();<\/script>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Checked on 4 October 2026 against Blockstream\u2019s own store, its security documentation, the public firmware changelog and its December 2025 advisory. Almost every page ranking for this search earns a commission on the click, which is why they all list the same five features and none of them leads with the thing that actually decides whether this device suits you: part of Jade\u2019s security lives on somebody else\u2019s server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-blockstream-jade-and-which-models-are-on-sale-today\">What is Blockstream Jade, and which models are on sale today?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jade is Blockstream\u2019s Bitcoin only signing device. It is open source, it supports the Liquid Network alongside Bitcoin, and since 2 June 2026 it has shipped as <a href=\"https:\/\/blog.blockstream.com\/the-jade-lineup-reimagined\/\" target=\"_blank\" rel=\"noopener\">three concurrent models<\/a> rather than one. Blockstream\u2019s blog calls the original device Jade Classic at $79. Worth knowing, because <a href=\"https:\/\/store.blockstream.com\/product-category\/jade\/\" target=\"_blank\" rel=\"noopener\">the store<\/a> does not use that name and did not show that price on 4 October 2026:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Price on 4 Oct 2026<\/th><th>Stock<\/th><th>Air gap method<\/th><\/tr><\/thead><tbody><tr><td>Blockstream Jade (the original, listed without a suffix)<\/td><td>$67, reduced from $79<\/td><td>In stock<\/td><td>None, USB-C and Bluetooth only<\/td><\/tr><tr><td>Jade Core<\/td><td>$99<\/td><td>Sold out<\/td><td>None, USB-C and Bluetooth only<\/td><\/tr><tr><td>Jade Plus<\/td><td>$149 plastic, up to $169 aluminium<\/td><td>In stock<\/td><td>QR by camera, plus microSD or USB drive<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two things fall out of that table. The entry level model Blockstream launched on 28 April 2026 as the simple five minute path off an exchange was unavailable on the day this was written, and the oldest device in the range is now the cheapest way into the same security model. Only Jade Plus has the camera and the card slot, so only Jade Plus can be run as a QR only <a href=\"https:\/\/getbitcoin.guide\/articles\/what-is-a-cold-wallet\/\">cold storage device<\/a>. The other two are USB and Bluetooth signers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/close-up-blockstream-jade-and-seed-plate.jpg\" alt=\"Close up of hands holding a blockstream jade wallet next to a metal backup plate.\" class=\"wp-image-423\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/close-up-blockstream-jade-and-seed-plate.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/close-up-blockstream-jade-and-seed-plate-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/close-up-blockstream-jade-and-seed-plate-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/close-up-blockstream-jade-and-seed-plate-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">The seed stays on the device; the mechanism that decrypts it does not.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-the-blind-oracle-actually-protect-your-pin\">How does the blind oracle actually protect your PIN?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most hardware wallets put a dedicated secure element on the board and ask you to trust that the chip resists a physical attack. That chip is also, almost always, closed source. Jade goes the other way: no traditional secure element, and the decryption mechanism held off the device entirely. Per <a href=\"https:\/\/help.blockstream.com\/hc\/en-us\/articles\/9639949755673-How-does-Blockstream-Jade-s-oracle-enforced-PIN-protection-work\" target=\"_blank\" rel=\"noopener\">Blockstream\u2019s own documentation<\/a>, three secrets encrypt the key material and all three are needed to decrypt your recovery phrase and spend: a user generated PIN, a secret held on Jade, and a secret held on the oracle. The opposite approach, three secrets split across a secure chip, a microcontroller and the owner, is set out in our <a href=\"https:\/\/getbitcoin.guide\/articles\/bitbox02-review\/\">review of the BitBox02 and its dual chip design<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The oracle is called blind because of how little it holds. It stores a hash of your PIN plus a nonce and a part of the AES256 key, and Blockstream states it is blinded to your wallet\u2019s keys and your PIN, does not know your Bitcoin addresses, and encrypts all data at rest. Jade itself never talks to it; the companion app opens an encrypted channel and relays the server secret back to the device. <a href=\"https:\/\/help.blockstream.com\/hc\/en-us\/articles\/15884462476953-Blockstream-Jade-Security-Model-FAQs\" target=\"_blank\" rel=\"noopener\">The security model FAQ<\/a> makes the claim plainly: holding the decryption mechanism off device &#8220;makes Jade alone invulnerable to physical key extraction&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is a real property, not marketing. It also means the device as shipped depends on a server Blockstream runs, which is a reasonable thing to be bothered by. Blockstream publishes instructions for <a href=\"https:\/\/help.blockstream.com\/hc\/en-us\/articles\/12800132096793-Set-up-a-personal-blind-oracle\" target=\"_blank\" rel=\"noopener\">running your own blind oracle<\/a> so the virtual secure element is one you control. Almost nobody will. It still matters that they can, because the alternative is usually a trusted chip you cannot inspect either, and at least a server can be swapped.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-happens-when-the-pin-is-wrong-or-the-oracle-is-offline\">What happens when the PIN is wrong, or the oracle is offline?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three wrong PINs is the whole of it. Per the same documentation, the oracle and Jade both delete their keys on the third wrong attempt and you must restore from your recovery phrase. No lockout timer, no tenth try. If your backup is incomplete or untested, three fumbles at a small screen is all it takes, which is why the real work on this device happens before you load it, in <a href=\"https:\/\/getbitcoin.guide\/articles\/your-recovery-phrase\/\">how you record and store the words<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The offline question is the one most reviews skip, and the answer is better than you might expect. The security model FAQ states you can unlock Jade with no companion app and no blind oracle, by scanning a SeedQR or entering the recovery phrase by hand. The oracle is a layer over your PIN, not a gate on your coins. Blockstream also argues it adds no threat, since an attacker would need to compromise both it and the device. That is the vendor assessing its own design, and no independent audit of the oracle protocol was published on Blockstream\u2019s site as of 4 October 2026.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-jade-firmware-should-you-be-running-right-now\">Which Jade firmware should you be running right now?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The current firmware is 1.0.41, released on 22 August 2026. <a href=\"https:\/\/github.com\/Blockstream\/Jade\/blob\/master\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">The changelog<\/a> does not hedge: the release &#8220;contains important security updates&#8221; and &#8220;all users should upgrade immediately&#8221;. Its entries include improved stack protection on production devices, additional per device entropy in the initial random seed, better scrubbing of sensitive data from internal memory, and an incremented secure version that blocks downgrades below this release.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That last one exists for a reason. On 5 December 2025 Blockstream <a href=\"https:\/\/blog.blockstream.com\/important-jade-security-update\/\" target=\"_blank\" rel=\"noopener\">disclosed a vulnerability<\/a> reported by the research group DARKNAVY, affecting select older Jade firmware when the device was paired with malicious third party apps. Firmware 1.0.38 fixed it, the Blockstream app was changed to require 1.0.38 or later, and the company stated it had no reports of users being affected. The attack path it named is worth repeating: phishing emails and fake Blockstream websites trying to talk owners into downgrading. Firmware comes before everything else here, exactly as it does on <a href=\"https:\/\/getbitcoin.guide\/articles\/coldcard-q\/\">the Coldcard Q<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-managing-blockstream-jade-with-phone.jpg\" alt=\"A man in his home office manages his blockstream jade wallet using his phone.\" class=\"wp-image-424\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-managing-blockstream-jade-with-phone.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-managing-blockstream-jade-with-phone-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-managing-blockstream-jade-with-phone-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-managing-blockstream-jade-with-phone-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Most reported problems happen in the companion software, not on the device.<\/figcaption><\/figure>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"jade-setup-check\" data-verb=\" checked\">\n<h3>Jade setup verification checklist<\/h3>\n<p>Eight checks drawn from Blockstream&#8217;s own documentation and its December 2025 advisory. Nothing here asks for your recovery phrase, and nothing on any page ever should.<\/p>\n<label><input type=\"checkbox\">The device reports firmware 1.0.41 or later, the version published on 22 August 2026<\/label>\n<label><input type=\"checkbox\">The update came through the official Blockstream app or the official air gapped path, never a link in an email or a search advert<\/label>\n<label><input type=\"checkbox\">The PIN is one you can enter correctly under pressure, because the third wrong entry wipes both the device and the oracle<\/label>\n<label><input type=\"checkbox\">The recovery phrase is recorded, and a restore has been tested, before the device holds anything you cannot afford to lose<\/label>\n<label><input type=\"checkbox\">You have decided whether Blockstream&#8217;s blind oracle is acceptable to you, or set up your own, before loading funds<\/label>\n<label><input type=\"checkbox\">Receiving addresses are verified on the device screen rather than in the companion app<\/label>\n<label><input type=\"checkbox\">If you bought Jade Plus for the air gap, the QR and card path has been run end to end at least once<\/label>\n<label><input type=\"checkbox\">You will never type the recovery phrase into a website, an app or a support chat, including one claiming to be Blockstream<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">Ticks are saved on this device only. This is a setup check, not advice about what to hold.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-jade-compare-with-coldcard-on-price-and-custody\">How does Jade compare with Coldcard on price and custody?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prices below came off each vendor\u2019s own store on 4 October 2026, and both ranges were discounted that day, so read them as a snapshot. <a href=\"https:\/\/store.coinkite.com\/store\/coldcard\" target=\"_blank\" rel=\"noopener\">Coinkite listed<\/a> the Coldcard Q at $319 reduced from $369, and a Coldcard Mk5 at $219 reduced from $269.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Jade Plus<\/th><th>Coldcard Q<\/th><\/tr><\/thead><tbody><tr><td>Price on 4 Oct 2026<\/td><td>$149 to $169<\/td><td>$319, reduced from $369<\/td><\/tr><tr><td>Secure element<\/td><td>None, a blind oracle holds one of three secrets<\/td><td>Dedicated secure elements on the board<\/td><\/tr><tr><td>Firmware<\/td><td>Open source, 1.0.41 dated 22 Aug 2026<\/td><td>Source published, signed builds<\/td><\/tr><tr><td>Air gap<\/td><td>QR by camera, microSD or USB drive<\/td><td>QR by scanner, dual microSD slots<\/td><\/tr><tr><td>Scope<\/td><td>Bitcoin and Liquid only<\/td><td>Bitcoin only<\/td><\/tr><tr><td>Power<\/td><td>280 mAh battery<\/td><td>3 x AAA batteries<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The comparison got sharper in the summer of 2026. Per <a href=\"https:\/\/blog.coinkite.com\/coldcard-mk3-seed-generation-warning\/\" target=\"_blank\" rel=\"noopener\">Coinkite\u2019s own advisory<\/a>, published on 30 July 2026 and updated on 1 August 2026, a logic error left seeds generated across most of the Coldcard range sitting in a reduced search space: Mk2 and Mk3 on versions 4.0.1 through 4.1.9, and Mk4, Mk5 and Q on builds before the fixed releases, which the advisory puts at about 72 bits of entropy rather than the expected 128. Attackers regenerated the keys offline and funds were stolen. The devices were never remotely hacked, and the fixes are 4.2.0 for Mk2 and Mk3, 5.6.0 for Mk4 and Mk5 and 1.5.0Q for the Q. The sentence that matters most is the one owners skip: updating the firmware does not repair a seed that was already generated. We covered that in <a href=\"https:\/\/getbitcoin.guide\/articles\/coldcard-q\/\">the Coldcard Q write up<\/a> and in <a href=\"https:\/\/getbitcoin.guide\/articles\/coldcard-mk3\/\">the Coldcard Mk3 write up<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Blockstream responded on 25 August 2026 with <a href=\"https:\/\/blog.blockstream.com\/reflections-on-the-coldcard-fallout\/\" target=\"_blank\" rel=\"noopener\">a post arguing Jade is not affected<\/a>, because it has no degraded fallback for random number generation and mixes multiple entropy sources through SHA512. That is a vendor comparing itself favourably to a rival during the rival\u2019s worst week, so read it as a claim and not a finding. The takeaway both companies now agree on is harder to argue with: the quality of the randomness that made your seed is a property you cannot see, cannot test afterwards, and inherit entirely from a firmware build.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1.png\" alt=\"Bar chart of blockstream jade and Coldcard prices read from the vendor stores in October 2026.\" class=\"wp-image-435\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1.png 1600w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1-300x169.png 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1-1024x576.png 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1-768x432.png 768w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/blockstream-jade-review-chart-1-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Jade Core showed as sold out at $99. Coldcard prices were reduced from $269 and $369 that day.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-people-who-actually-use-jade-report\">What do people who actually use Jade report?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We read the 15 reviews on <a href=\"https:\/\/www.trustpilot.com\/review\/blockstream.com\" target=\"_blank\" rel=\"noopener\">Blockstream\u2019s unclaimed Trustpilot profile<\/a>, which sits at 1.8 out of 5, and the seven most recent reports on the public Jade issue tracker. The Trustpilot sample is small, self selected and mostly about the Green app and support rather than the hardware, so it is not a product rating and should not be used as one. The tracker is the better record, because every complaint there arrives with a firmware version attached.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On 29 August 2026 a user posting as tokyovyse reported that reinstalling firmware 1.0.41 over itself by air gapped USB on a Jade Plus <a href=\"https:\/\/github.com\/Blockstream\/Jade\/issues\/339\" target=\"_blank\" rel=\"noopener\">froze at 4 percent<\/a> instead of refusing or restarting; it was closed on 24 September 2026. The same person reported that day that a multisig descriptor QR from Sparrow 2.5.4 returned <a href=\"https:\/\/github.com\/Blockstream\/Jade\/issues\/340\" target=\"_blank\" rel=\"noopener\">only &#8220;Unhandled UR message&#8221;<\/a> on a Jade Plus running 1.0.41, with no hint at what the device objected to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On 4 August 2026 a user posting as popodai reported that the mnemonic QR export flow left raw entropy and QR icon data <a href=\"https:\/\/github.com\/Blockstream\/Jade\/issues\/318\" target=\"_blank\" rel=\"noopener\">readable in freed heap and on the stack<\/a> after the export finished, against the memory hardening introduced in 1.0.40; it was closed on 25 September 2026, and 1.0.41 lists improved scrubbing of sensitive data from internal memory. On 8 August 2026 a user posting as gsalgado reported a Jade Classic <a href=\"https:\/\/github.com\/Blockstream\/Jade\/issues\/324\" target=\"_blank\" rel=\"noopener\">taking about four minutes to be detected<\/a> by Electrum 4.8.0 over USB when Electrum ran from source, while the Blockstream app was fast; the AppImage build removed the delay, making it a desktop packaging problem rather than a device one. And on 24 June 2025 a Trustpilot reviewer rated Jade Plus one star over QR PIN setup, battery drain and limited app compatibility.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The pattern is worth stating because it is not what the review sites score. Nobody in this sample reports losing coins to Jade\u2019s security model, a bricked device or a PIN lockout. What they report is friction where Jade meets other software: QR interoperability with third party desktop wallets, the air gapped firmware path, USB handshakes with particular builds. One report cuts against even that, a claim the twelve word &#8220;calculate final word&#8221; tool was broken in 1.0.41, which maintainers marked invalid on 4 September 2026. Five accounts are testimony, not a measurement of how often any of this happens. They are a map of where to be careful, and it points at the companion software rather than the chip, which is roughly the opposite of where <a href=\"https:\/\/getbitcoin.guide\/articles\/keystone-hard-wallet\/\">air gap marketing<\/a> points.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frequently-asked-questions\">Frequently asked questions<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-q-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is Blockstream Jade open source?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. Blockstream publishes the firmware source and the changelog, and all three current models run the same open source firmware and the same blind oracle model. The usual caveat applies: published source is auditable, which is not the same as audited, and it says nothing about the firmware physically on the device in your hand until you verify it.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does Jade support coins other than Bitcoin?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Jade is Bitcoin only, with support for the Liquid Network, Blockstream\u2019s own Bitcoin sidechain. It will not sign for assets on other chains. A Bitcoin only firmware is a smaller attack surface by design rather than a missing feature.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I use Jade with Sparrow or Electrum instead of the Blockstream app?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, Jade works with several third party wallets, and the public issue tracker is where the rough edges of those integrations surface. As of 4 October 2026 a multisig descriptor QR from Sparrow 2.5.4 was reported failing with an unhelpful error on firmware 1.0.41, so test any new combination with a small amount first.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What happens to my coins if Blockstream shuts down the oracle?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Your coins are controlled by your recovery phrase, not by the oracle. Blockstream\u2019s security model FAQ states Jade can be unlocked with no companion app and no blind oracle, by scanning a SeedQR or entering the recovery phrase on the device. The oracle protects the PIN; the phrase is what restores the wallet, on Jade or on anything else reading the same standard.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is Jade Plus worth $149 when the original Jade is $67?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>That is a question about what you need, and nobody can answer it for you. The security model is identical across the lineup. The extra money buys the camera, the microSD slot and the battery, which together are what make QR only air gapped signing and air gapped firmware updates possible. If you plan to use USB anyway, you are paying for hardware you will not switch on.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How do I check I am running the current Jade firmware?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Compare the version your device reports against the top entry in the published changelog, 1.0.41 dated 22 August 2026 at the time of writing. Install updates only through the official Blockstream app or the official air gapped path. The December 2025 advisory named phishing emails and fake Blockstream websites pushing downgrades, and 1.0.41 increments the secure version so a downgrade below it is refused.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"msq-end\" id=\"ms-quiz-end\">\n<p><strong>Finished the page?<\/strong> The same five questions from the top, to see what stuck.<\/p>\n<button type=\"button\" class=\"msq-btn msq-start-test\">Test Your Understanding of This Article<\/button>\n<div class=\"msq-mount\"><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>This article is educational and is not financial advice. Nothing here is a recommendation to buy, sell or hold anything. You are responsible for your own security decisions.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Blockstream Jade stores no decryption key on the device. Its PIN is enforced by a blind oracle server that holds one of three secrets, so the hardware on its own cannot be squeezed for your seed. Three wrong PINs and both sides wipe, leaving only your recovery phrase.<\/p>\n","protected":false},"author":1,"featured_media":422,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Blockstream Jade Review: What the Blind Oracle Protects","rank_math_description":"Blockstream Jade swaps the secure element chip for a blind oracle holding one of three secrets. What that actually protects, and what it does not.","rank_math_focus_keyword":"blockstream jade","rank_math_canonical_url":"","rank_math_breadcrumb_title":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"","rank_math_pillar_content":"","rank_math_robots":[],"rank_math_advanced_robots":[]},"categories":[2],"tags":[],"class_list":["post-425","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wallets"],"_links":{"self":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/comments?post=425"}],"version-history":[{"count":10,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/425\/revisions"}],"predecessor-version":[{"id":450,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/425\/revisions\/450"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media\/422"}],"wp:attachment":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media?parent=425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/categories?post=425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/tags?post=425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}