{"id":506,"date":"2026-10-10T09:36:58","date_gmt":"2026-10-10T09:36:58","guid":{"rendered":"https:\/\/getbitcoin.guide\/articles\/?p=506"},"modified":"2026-10-10T09:43:05","modified_gmt":"2026-10-10T09:43:05","slug":"ngrave-zero-review","status":"publish","type":"post","link":"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/","title":{"rendered":"NGRAVE ZERO: What That EAL7 Certificate Really Covers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>The NGRAVE ZERO is a 398 dollar air gapped signer whose headline EAL7 claim describes an operating system kernel, not the finished device. The only public EAL7 Common Criteria result we could find belongs to ProvenCore, certified in 2019 on an Arm platform. The companion app, the QR channel and the update path all sit outside it.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"ngrave-zero-review\" data-minutes=\"13\">\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\/ngrave-zero-review\/#audio\",\"name\":\"NGRAVE ZERO: What That EAL7 Certificate Really Covers, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 10 October 2026.\",\"contentUrl\":\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-audio-202610101512.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT12M34S\",\"uploadDate\":\"2026-10-10\",\"inLanguage\":\"en-GB\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"NGRAVE ZERO: What That EAL7 Certificate Really Covers\",\"startOffset\":0,\"endOffset\":48},{\"@type\":\"Clip\",\"name\":\"What does the NGRAVE ZERO EAL7 claim actually cover?\",\"startOffset\":48,\"endOffset\":142,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#what-does-the-ngrave-zero-eal7-claim-actually-cover\"},{\"@type\":\"Clip\",\"name\":\"Is there a certificate you can read for yourself?\",\"startOffset\":142,\"endOffset\":258,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#is-there-a-certificate-you-can-read-for-yourself\"},{\"@type\":\"Clip\",\"name\":\"How does the ZERO compare with other air gapped signers?\",\"startOffset\":258,\"endOffset\":392,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#how-does-the-zero-compare-with-other-air-gapped-signers\"},{\"@type\":\"Clip\",\"name\":\"How many coins does the NGRAVE ZERO really support?\",\"startOffset\":392,\"endOffset\":486,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#how-many-coins-does-the-ngrave-zero-really-support\"},{\"@type\":\"Clip\",\"name\":\"What does closed firmware mean when you cannot read it?\",\"startOffset\":486,\"endOffset\":567,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#what-does-closed-firmware-mean-when-you-cannot-read-it\"},{\"@type\":\"Clip\",\"name\":\"What do NGRAVE ZERO owners actually report?\",\"startOffset\":567,\"endOffset\":715,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#what-do-ngrave-zero-owners-actually-report\"},{\"@type\":\"Clip\",\"name\":\"So is the certificate worth anything?\",\"startOffset\":715,\"endOffset\":754,\"url\":\"https:\/\/getbitcoin.guide\/articles\/ngrave-zero-review\/#so-is-the-certificate-worth-anything\"}],\"contentSize\":\"5.3 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 13 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\/ngrave-zero-review-audio-202610101512.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: NGRAVE ZERO: What That EAL7 Certificate Really Covers\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">NGRAVE ZERO: What That EAL7 Certificate Really Covers<\/a><\/li>\n<li data-start=\"48.14\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"48.14\" aria-label=\"Play from: What does the NGRAVE ZERO EAL7 claim actually cover?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:48<\/span><a href=\"#what-does-the-ngrave-zero-eal7-claim-actually-cover\">What does the NGRAVE ZERO EAL7 claim actually cover?<\/a><\/li>\n<li data-start=\"142.08\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"142.08\" aria-label=\"Play from: Is there a certificate you can read for yourself?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">2:22<\/span><a href=\"#is-there-a-certificate-you-can-read-for-yourself\">Is there a certificate you can read for yourself?<\/a><\/li>\n<li data-start=\"257.7\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"257.7\" aria-label=\"Play from: How does the ZERO compare with other air gapped signers?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:18<\/span><a href=\"#how-does-the-zero-compare-with-other-air-gapped-signers\">How does the ZERO compare with other air gapped signers?<\/a><\/li>\n<li data-start=\"392.2\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"392.2\" aria-label=\"Play from: How many coins does the NGRAVE ZERO really support?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">6:32<\/span><a href=\"#how-many-coins-does-the-ngrave-zero-really-support\">How many coins does the NGRAVE ZERO really support?<\/a><\/li>\n<li data-start=\"486.06\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"486.06\" aria-label=\"Play from: What does closed firmware mean when you cannot read it?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">8:06<\/span><a href=\"#what-does-closed-firmware-mean-when-you-cannot-read-it\">What does closed firmware mean when you cannot read it?<\/a><\/li>\n<li data-start=\"566.92\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"566.92\" aria-label=\"Play from: What do NGRAVE ZERO owners actually report?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:27<\/span><a href=\"#what-do-ngrave-zero-owners-actually-report\">What do NGRAVE ZERO owners actually report?<\/a><\/li>\n<li data-start=\"715.06\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"715.06\" aria-label=\"Play from: So is the certificate worth anything?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">11:55<\/span><a href=\"#so-is-the-certificate-worth-anything\">So is the certificate worth anything?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 10 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\",\"ngravezerowhatthateal7ce\",45],[5.72,\"p\",\"thengravezeroisa398dolla\",114],[17.8,\"p\",\"theonlypubliceal7commonc\",97],[26.56,\"p\",\"thecompanionapptheqrchan\",58],[31.4,\"p\",\"onthispagethethreediffer\",195],[48.14,\"h\",\"whatdoesthengravezeroeal\",43],[53.3,\"p\",\"startwithwhatthevendorsa\",52],[56.5,\"p\",\"checkedon10october2026th\",163],[69.78,\"p\",\"afeaturepanellowerdownna\",87],[76.74,\"p\",\"anotherlinenarrowsitagai\",65],[82.82,\"p\",\"thespecificationtablesim\",141],[96.58,\"p\",\"thosearethreedifferentcl\",63],[101.26,\"p\",\"commoncriteriaevaluation\",139],[110.5,\"p\",\"unevaluatedisnotthesamea\",33],[113.86,\"p\",\"itisalsonotcertified\",20],[115.82,\"p\",\"thenumbermeanslessthanit\",32],[118.1,\"p\",\"ealstandsforevaluationas\",104],[126.54,\"p\",\"eal7demandsformalmathema\",63],[131.74,\"p\",\"thatisalsowhyitlandsonso\",123],[142.08,\"h\",\"isthereacertificateyouca\",40],[144.84,\"p\",\"thisiswheretheaffiliater\",48],[147.84,\"p\",\"ngravespagesgivenocertif\",94],[156.08,\"p\",\"theonlyeal7commoncriteri\",150],[167.04,\"p\",\"provenrunsowncertificati\",183],[182.12,\"p\",\"readtherestofthatpageand\",42],[185.16,\"p\",\"alaterprovencoreevaluati\",124],[194.36,\"p\",\"provencoremthemicrocontr\",70],[201.36,\"p\",\"eveninsidethecertifiedco\",57],[206.32,\"p\",\"thenwetriedtoreadthecert\",56],[210.16,\"p\",\"thecertificatepdflinkedf\",210],[229.04,\"p\",\"thecommoncriteriaportals\",64],[233.2,\"p\",\"noneofthatmeansthecertif\",43],[236.28,\"p\",\"itmeansareaderwhowantsto\",88],[242.08,\"p\",\"ngravedoesnotnameprovenc\",162],[257.7,\"h\",\"howdoesthezerocomparewit\",46],[261.26,\"p\",\"pricesandstockwerereadfr\",60],[266.7,\"p\",\"thezeroisthedearestofthe\",89],[272.82,\"t\",\"ngravezero\",104],[288.7,\"t\",\"trezorsafe5\",96],[301.78,\"t\",\"ledgerflex\",106],[314.9,\"t\",\"coldcardq\",110],[330.06,\"p\",\"twocaveatsbecausebeingst\",52],[333.9,\"p\",\"theledgerflexpagerendere\",105],[342.58,\"p\",\"andaneal6secureelementis\",118],[353.3,\"p\",\"wemadethatpointaboutthet\",53],[356.58,\"p\",\"thecoldcardqrowistheinst\",34],[359.38,\"p\",\"itcarriesnoealclaimatall\",70],[365.06,\"p\",\"coinkitesownadvisorypubl\",214],[384.22,\"p\",\"acertificatewouldnothave\",68],[388.5,\"p\",\"thefalloutisinourcoldcar\",33],[392.2,\"h\",\"howmanycoinsdoesthengrav\",42],[397.08,\"p\",\"heretheproductpageargues\",34],[399.72,\"p\",\"on10october2026onefeatur\",174],[416.0,\"p\",\"botharetrueintheirownway\",91],[422.36,\"p\",\"readthebignumberholdacoi\",93],[429.36,\"p\",\"thereleasenotesarethebet\",43],[432.24,\"p\",\"ngravesreleasenotespagel\",81],[441.6,\"p\",\"the18notessayitreplacedt\",185],[459.16,\"p\",\"theyalsosayitremovedover\",146],[471.48,\"p\",\"noneofthatisscandalous\",22],[473.56,\"p\",\"pruningatokenlistismaint\",41],[476.92,\"p\",\"itissimplythethingnocert\",126],[486.06,\"h\",\"whatdoesclosedfirmwareme\",45],[489.14,\"p\",\"thezerosfirmwareisnotpub\",30],[491.34,\"p\",\"checkedon10october2026th\",174],[507.62,\"p\",\"usefulworknoneofitthedev\",42],[510.38,\"p\",\"soaclaimaboutaformallyve\",87],[517.34,\"p\",\"ownershavenoticed\",17],[518.98,\"p\",\"on24april2026insideathre\",141],[530.74,\"p\",\"nobodyfromthecompanyansw\",33],[533.3,\"p\",\"therestructuringitselfis\",229],[552.22,\"p\",\"thatisafactaboutcontinui\",58],[557.54,\"p\",\"ifreadingthecodematterst\",134],[566.92,\"h\",\"whatdongravezeroownersac\",36],[571.24,\"p\",\"wereadfourthreadsintheze\",99],[580.08,\"p\",\"theseareparaphrasedaccou\",56],[584.48,\"p\",\"therangerunsfromdelighte\",37],[587.64,\"p\",\"anupdatethatfailedmidfla\",26],[589.84,\"p\",\"indecember2025anownerdes\",135],[599.4,\"p\",\"ngraverepliedinthethread\",66],[604.56,\"p\",\"therecoverybackupwasinta\",42],[608.2,\"p\",\"batteryandbulkasadailyan\",31],[611.36,\"p\",\"injanuary2026anownerwrot\",160],[622.6,\"p\",\"acalmanswertothecoldcard\",29],[625.16,\"p\",\"on1august2026thedayafter\",103],[634.36,\"p\",\"anotherrepliedthattherew\",82],[639.44,\"p\",\"thevendorsreplytwodaysla\",27],[641.32,\"p\",\"on3august2026ngravessupp\",231],[660.8,\"p\",\"itcalledtheeal7operating\",129],[670.76,\"p\",\"wheretheaccountsandtheof\",61],[675.56,\"p\",\"wheretheypartthemarketin\",150],[685.64,\"p\",\"noneofthoseiswhataneal7p\",35],[689.08,\"p\",\"allofthemarewhatowningth\",37],[692.36,\"p\",\"onevendorlineisworthrepe\",129],[701.4,\"p\",\"readhowarecoveryphrasewo\",177],[715.06,\"h\",\"soisthecertificatewortha\",31],[717.38,\"p\",\"yesnarrowly\",11],[719.62,\"p\",\"aformallyverifiedkerneli\",76],[724.42,\"p\",\"itdoesnotcoverthecompani\",148],[735.38,\"p\",\"sowhenareviewcallsacerti\",111],[742.9,\"p\",\"apagethatcannotanswerhas\",56],[746.82,\"p\",\"ourguidetowhatacoldwalle\",98]];\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: the three different EAL7 claims NGRAVE makes in its own words, the only EAL7 record we could find in the public databases, today&#8217;s price and stock read from the vendor store, and four dated owner accounts from the ZERO subreddit.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"ngrave-zero-review\" data-category=\"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 does the NGRAVE ZERO EAL7 claim actually cover?\" data-section=\"#what-does-the-ngrave-zero-eal7-claim-actually-cover\">\n<p class=\"msq-question\">1. On its own product page, what does NGRAVE say achieved EAL7 certification?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">The finished device, including the companion app<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">A custom operating system<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">The steel backup plate sold with it<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>One line on the <a href=\"https:\/\/www.ngrave.io\/en\/zero\" target=\"_blank\" rel=\"noopener\">NGRAVE ZERO page<\/a> narrows the claim to &#8220;a custom OS that achieved EAL7 certification&#8221;, while the headline describes the whole device. An operating system is a component, and the app, the QR channel and the update path sit outside it. <a class=\"msq-section\" href=\"#what-does-the-ngrave-zero-eal7-claim-actually-cover\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"a\" data-title=\"Is there a certificate you can read for yourself?\" data-section=\"#is-there-a-certificate-you-can-read-for-yourself\">\n<p class=\"msq-question\">2. Which product holds the EAL7 Common Criteria result that matches the description in the public record?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">ProvenCore, a microkernel, on an Arm based platform in 2019<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">The NGRAVE ZERO, certified in 2021<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">No EAL7 result has ever been issued to anything<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/provenrun.com\/security-and-certifications\" target=\"_blank\" rel=\"noopener\">ProvenRun&#8217;s certification page<\/a> states that in 2019 &#8220;ProvenCore running on an Arm-based platform achieved Common Criteria EAL7&#8221;. A full text search of the certificate database at <a href=\"https:\/\/sec-certs.org\/cc\/ftsearch\/?q=ProvenCore\" target=\"_blank\" rel=\"noopener\">sec-certs.org<\/a> returned no entries on 10 October 2026. <a class=\"msq-section\" href=\"#is-there-a-certificate-you-can-read-for-yourself\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"b\" data-title=\"How does the ZERO compare with other air gapped signers?\" data-section=\"#how-does-the-zero-compare-with-other-air-gapped-signers\">\n<p class=\"msq-question\">3. Which of these four signers carries no EAL claim at all, and still needed a seed generation advisory in July 2026?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Trezor Safe 5<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Coldcard Q<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">NGRAVE ZERO<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/blog.coinkite.com\/coldcard-mk3-seed-generation-warning\/\" target=\"_blank\" rel=\"noopener\">Coinkite&#8217;s advisory<\/a>, published 30 July 2026 and updated 1 August, says affected Mk4, Mk5 and Q seeds held &#8220;about 72 bits of entropy rather than the expected 128 bits&#8221;, and that updating firmware does not repair an existing seed. A certificate would not have caught it. <a class=\"msq-section\" href=\"#how-does-the-zero-compare-with-other-air-gapped-signers\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"How many coins does the NGRAVE ZERO really support?\" data-section=\"#how-many-coins-does-the-ngrave-zero-really-support\">\n<p class=\"msq-question\">4. What did firmware 1.8 do to the list of supported assets?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Added 3,500 new coins and tokens<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Ended support for BNB Beacon Chain and Groestlcoin and removed over 100 legacy tokens<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Left the list exactly as it was<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/ngrave.io\/zero-1-8\" target=\"_blank\" rel=\"noopener\">1.8 release notes<\/a> say &#8220;BNB Beacon Chain and Groestlcoin (GRS) are no longer supported&#8221; and that over 100 inactive, duplicated and legacy tokens were removed, while the Polygon token set and USDT on MultiversX were added. BNB on BNB Smart Chain was unaffected. <a class=\"msq-section\" href=\"#how-many-coins-does-the-ngrave-zero-really-support\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"What do NGRAVE ZERO owners actually report?\" data-section=\"#what-do-ngrave-zero-owners-actually-report\">\n<p class=\"msq-question\">5. In the December 2025 thread, what did the owner whose ZERO would not boot after an update end up losing?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Their coins, because the device held the only copy<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Time, since the backup was intact and NGRAVE replaced the device<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Nothing, because the update was cancelled before it ran<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The owner described four and a half hours of cables, ports and laptops in <a href=\"https:\/\/www.reddit.com\/r\/Ngrave\/comments\/1phtcot\/firmware_update_bricked_my_zero\/\" target=\"_blank\" rel=\"noopener\">this thread<\/a>, and wrote that the recovery backup was intact and NGRAVE replaced the device free of charge. That is one account, reported by its owner, not a measured failure rate. <a class=\"msq-section\" href=\"#what-do-ngrave-zero-owners-actually-report\">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) { var skipFirst = box.hasAttribute('data-default-open'); box.addEventListener('toggle', function(){ if (!box.open) { return; } if (skipFirst) { skipFirst = false; return; } 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<h2 class=\"wp-block-heading\" id=\"what-does-the-ngrave-zero-eal7-claim-actually-cover\">What does the NGRAVE ZERO EAL7 claim actually cover?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start with what the vendor says, because it says several things. Checked on 10 October 2026, the <a href=\"https:\/\/www.ngrave.io\/en\/zero\" target=\"_blank\" rel=\"noopener\">NGRAVE ZERO product page<\/a> calls the device &#8220;the only air-gapped crypto wallet that achieved the highest security certification in the blockchain &amp; financial industry&#8221;. A feature panel lower down narrows that to the &#8220;Only financial product that achieved EAL7 certification&#8221;. Another line narrows it again, to &#8220;a custom OS that achieved EAL7 certification&#8221;. The specification table simply lists the certification level as &#8220;CC EAL7, CE, RoHS, FCC&#8221;, which puts an operating system evaluation in the same row as a plug socket safety mark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Those are three different claims, and the gap between them is the whole story. Common Criteria evaluations are granted to a named product at a named version against a written security target, and everything outside that boundary is unevaluated. Unevaluated is not the same as insecure. It is also not certified.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The number means less than it looks, too. EAL stands for Evaluation Assurance Level: it measures how rigorously something was examined, not how safe it turned out to be. EAL7 demands formal mathematical proof of the design, which is rare and hard. That is also why it lands on something small, like a kernel, rather than on a gadget with a battery, a fingerprint sensor, a camera and a phone app attached.<\/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\/examining-the-ngrave-zero-security-certificate.jpg\" alt=\"Close up of two hands holding an ngrave zero style hardware wallet with its screen switched off.\" class=\"wp-image-504\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/examining-the-ngrave-zero-security-certificate.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/examining-the-ngrave-zero-security-certificate-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/examining-the-ngrave-zero-security-certificate-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/examining-the-ngrave-zero-security-certificate-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Whatever the certificate covers, this is the part you can hold and check yourself.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-there-a-certificate-you-can-read-for-yourself\">Is there a certificate you can read for yourself?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is where the affiliate reviews stop and we kept going. NGRAVE\u2019s pages give no certificate number, no scheme and no evaluated version, so there is nothing on them to look up. The only EAL7 Common Criteria result in the public record matching the description belongs to ProvenCore, a formally proven microkernel sold to device makers rather than a wallet. <a href=\"https:\/\/provenrun.com\/security-and-certifications\" target=\"_blank\" rel=\"noopener\">ProvenRun\u2019s own certification page<\/a> says that in 2019 &#8220;ProvenCore running on an Arm-based platform achieved Common Criteria EAL7&#8221;, and that &#8220;Reaching EAL7 requires formal verification to ensure the absence of design flaws&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Read the rest of that page and the picture sharpens. A later ProvenCore evaluation on RISC-V reached EAL5+ and, by ProvenRun\u2019s own account, no formal certificate was requested from the French scheme at all. ProvenCore-M, the microcontroller version, carries SESIP Level 3 rather than any EAL. Even inside the certified component, only one version is the EAL7 one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then we tried to read the certificate, which is where it gets awkward. The certificate PDF linked from <a href=\"https:\/\/provenrun.com\/blog\/provencore-embedded-security-eal7\" target=\"_blank\" rel=\"noopener\">ProvenRun\u2019s own EAL7 announcement<\/a> returned HTTP 404 when we fetched it on 10 October 2026, and a full text search of the Common Criteria database at <a href=\"https:\/\/sec-certs.org\/cc\/ftsearch\/?q=ProvenCore\" target=\"_blank\" rel=\"noopener\">sec-certs.org for &#8220;ProvenCore&#8221;<\/a> returned no certificate entries the same day. The Common Criteria portal\u2019s product listing refused our requests outright. None of that means the certification did not happen. It means a reader who wants to check the scope, which is the only thing a certificate is for, currently cannot. NGRAVE does not name ProvenCore on the pages we read, so we will not assert the link on its behalf: what we can say is that no certificate naming NGRAVE or the ZERO turned up in the databases we searched.<\/p>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"ngrave-cert-check\" data-verb=\" checked\">\n<h3>Check any wallet certificate claim in four steps<\/h3>\n<p>Every step below is something a certificate is supposed to tell you. Run it on any device, any brand, including this one. If a review cannot answer step two, it has not read the document it is quoting at you.<\/p>\n<label><input type=\"checkbox\">Find the certificate number and the scheme that issued it. A level on its own, EAL5, EAL6 or EAL7, names nothing.<\/label>\n<label><input type=\"checkbox\">Find the exact product name and version that was evaluated, then compare it with the thing in your hand. A kernel, a chip and a wallet are three different products.<\/label>\n<label><input type=\"checkbox\">Look the certificate up in a public database and read the scope. If it cannot be found, the claim is a marketing line rather than a check you can repeat.<\/label>\n<label><input type=\"checkbox\">List what sits outside that scope: the phone app, the QR or Bluetooth channel, the fingerprint sensor, the shipping chain and the firmware update path.<\/label>\n<label><input type=\"checkbox\">Check the release notes for the firmware you are running, because support and fixes move and a certificate does not.<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">Ticks are saved on this device only. This checklist asks for nothing and stores nothing about your wallet.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-the-zero-compare-with-other-air-gapped-signers\">How does the ZERO compare with other air gapped signers?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prices and stock were read from each vendor\u2019s own store on 10 October 2026. The ZERO is the dearest of the four by a wide margin, and on the day we looked it was also the only one out of stock.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Device<\/th><th>Listed price<\/th><th>Stock on 10 Oct 2026<\/th><th>Certification the vendor leads with<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/shop.ngrave.io\/en-us\/products\/zero\" target=\"_blank\" rel=\"noopener\">NGRAVE ZERO<\/a><\/td><td>$398<\/td><td>Sold out<\/td><td>CC EAL7, described as a custom OS<\/td><\/tr><tr><td><a href=\"https:\/\/trezor.io\/trezor-safe-5\" target=\"_blank\" rel=\"noopener\">Trezor Safe 5<\/a><\/td><td>$129<\/td><td>In stock<\/td><td>EAL6+ secure element<\/td><\/tr><tr><td><a href=\"https:\/\/shop.ledger.com\/products\/ledger-flex\" target=\"_blank\" rel=\"noopener\">Ledger Flex<\/a><\/td><td>$249 list<\/td><td>Ships in 24 hours<\/td><td>EAL6+ secure element<\/td><\/tr><tr><td><a href=\"https:\/\/store.coinkite.com\/store\/coldcard-q\" target=\"_blank\" rel=\"noopener\">Coldcard Q<\/a><\/td><td>$319, down from $369<\/td><td>In stock<\/td><td>No EAL claim, open firmware<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two caveats, because being straight about them beats a tidy row. The Ledger Flex page rendered no price to our fetch, so the $249 figure comes from <a href=\"https:\/\/www.ledger.com\/academy\/topics\/ledgersolutions\/ledger-flex-ease-of-use-free-from-compromise\" target=\"_blank\" rel=\"noopener\">Ledger\u2019s academy page<\/a> rather than the live store. And an EAL6+ secure element is a chip certification, the same category of claim as an EAL7 operating system: one component, not the signer you hold. We made that point about the <a href=\"https:\/\/getbitcoin.guide\/articles\/trezor-safe-5-review\/\">Trezor Safe 5<\/a> and the <a href=\"https:\/\/getbitcoin.guide\/articles\/ledger-flex-review\/\">Ledger Flex<\/a> too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Coldcard Q row is the instructive one. It carries no EAL claim at all, and it still had the worst summer of any wallet this year. <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, says seeds made on affected Mk4, Mk5 and Q firmware held &#8220;about 72 bits of entropy rather than the expected 128 bits&#8221;, and that &#8220;updating the firmware does not change or repair an existing seed&#8221;. A certificate would not have caught that bug, and the absence of one did not cause it. The fallout is in our <a href=\"https:\/\/getbitcoin.guide\/articles\/coldcard-q\/\">Coldcard Q write up<\/a>.<\/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\/ngrave-zero-review-chart.png\" alt=\"Bar chart comparing the ngrave zero price with Coldcard Q, Ledger Flex and Trezor Safe 5.\" class=\"wp-image-508\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-chart.png 1600w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-chart-300x169.png 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-chart-1024x576.png 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-chart-768x432.png 768w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/ngrave-zero-review-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Prices read from the NGRAVE, Coinkite and Trezor stores on 10 October 2026. The Ledger Flex page rendered no price to our fetch, so the 249 dollar figure is Ledger&#8217;s own published list price rather than a live store reading. The Coldcard Q was showing 319 dollars, down from 369.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-many-coins-does-the-ngrave-zero-really-support\">How many coins does the NGRAVE ZERO really support?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here the product page argues with itself. On 10 October 2026 one feature summary on <a href=\"https:\/\/www.ngrave.io\/en\/zero\" target=\"_blank\" rel=\"noopener\">the ZERO page<\/a> promises &#8220;+3 500 coins and tokens&#8221;, while a section headed &#8220;Broad Crypto support&#8221; on the same page says &#8220;We support 15 coins and all Ethereum and MultiversX tokens&#8221;. Both are true in their own way, which is the problem: one counts tokens on a few chains, the other counts the chains. Read the big number, hold a coin on a chain the device never supported, and you find out at the worst possible moment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The release notes are the better guide, and they move. <a href=\"https:\/\/ngrave.io\/en\/zero-release-notes\" target=\"_blank\" rel=\"noopener\">NGRAVE\u2019s release notes page<\/a> lists version 1.8 in August 2026 as current, with 1.7 back in October 2024. The <a href=\"https:\/\/ngrave.io\/zero-1-8\" target=\"_blank\" rel=\"noopener\">1.8 notes<\/a> say it replaced the legacy QR format entirely with Universal QR, added the full Polygon token set plus PAXG, AMP and USDT on MultiversX, and put a warning screen before XRP and Stellar account closing transactions. They also say it removed &#8220;over 100 inactive, duplicated and legacy tokens&#8221; and that &#8220;BNB Beacon Chain and Groestlcoin (GRS) are no longer supported&#8221;, BNB on BNB Smart Chain unaffected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">None of that is scandalous. Pruning a token list is maintenance, not betrayal. It is simply the thing no certificate can speak to: support is a moving target, and the only way to check it is to read the release notes for the coins you hold.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-closed-firmware-mean-when-you-cannot-read-it\">What does closed firmware mean when you cannot read it?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The ZERO\u2019s firmware is not published. Checked on 10 October 2026, the <a href=\"https:\/\/github.com\/ngraveio\" target=\"_blank\" rel=\"noopener\">NGRAVE GitHub organisation<\/a> holds libraries and forks: a UR registry, a token database, a trimmed libwally-core, a CBOR library, research papers, and forks of Rabby and MetaMask Mobile. Useful work, none of it the device operating system. So a claim about a formally verified OS is one you take on trust, rather the opposite of what a proof buys you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Owners have noticed. On 24 April 2026, inside a thread about the company\u2019s <a href=\"https:\/\/www.reddit.com\/r\/Ngrave\/comments\/1qd880x\/ngrave_sold\/\" target=\"_blank\" rel=\"noopener\">January 2026 restructuring<\/a>, one owner asked when the firmware code would reach GitHub &#8220;to match your open source claims&#8221;. Nobody from the company answered there. The restructuring itself is on the record: NGRAVE\u2019s support account posted on 15 January 2026 that the company &#8220;completed a strategic restructuring supported by a group of investors&#8221;, that the largest new party was <a href=\"https:\/\/cointelegraph.com\/press-releases\/ngrave-global-pioneer-in-digital-asset-security-completes-strategic-restructuring-with-sights-set-on-usd-10-billion-in-assets-secured\" target=\"_blank\" rel=\"noopener\">Lydian Group<\/a>, and that the main new investor is Luxembourg based. That is a fact about continuity, not a signal to move anything anywhere. If reading the code matters to you, our piece on what <a href=\"https:\/\/getbitcoin.guide\/articles\/crypto-wallet-open-source\/\">open source wallets actually prove<\/a> sets out what you get, and the <a href=\"https:\/\/getbitcoin.guide\/articles\/bitbox02-review\/\">BitBox02<\/a> sits at the other end of that spectrum.<\/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\/user-reviews-of-the-ngrave-zero-wallet.jpg\" alt=\"Steel backup plate stamped at a workbench beside a safe, a habit any ngrave zero owner needs.\" class=\"wp-image-505\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/user-reviews-of-the-ngrave-zero-wallet.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/user-reviews-of-the-ngrave-zero-wallet-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/user-reviews-of-the-ngrave-zero-wallet-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/user-reviews-of-the-ngrave-zero-wallet-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">The recovery backup, not the certificate, is what saved the owner whose update failed.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-ngrave-zero-owners-actually-report\">What do NGRAVE ZERO owners actually report?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We read four threads in the ZERO owners\u2019 subreddit, roughly thirty comments, dated between November 2025 and August 2026. These are paraphrased accounts of what people report, not findings. The range runs from delighted to done with it.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An update that failed mid flash. In December 2025 an owner described a <a href=\"https:\/\/www.reddit.com\/r\/Ngrave\/comments\/1phtcot\/firmware_update_bricked_my_zero\/\" target=\"_blank\" rel=\"noopener\">ZERO that would not boot after an update<\/a>, surviving four and a half hours of cables, ports, laptops and the manual flashing route. NGRAVE replied in the thread the same day and replaced the device free of charge. The recovery backup was intact, so the cost was time.<\/li>\n\n<li>Battery and bulk, as a daily annoyance. In January 2026 an owner wrote that the device drains in the safe and has to be fetched and charged, and that signing means carrying it, so they were moving to a different setup and selling two units.<\/li>\n\n<li>A calm answer to the Coldcard scare. On 1 August 2026, the day after Coinkite\u2019s advisory, an owner asked whether the ZERO was <a href=\"https:\/\/www.reddit.com\/r\/Ngrave\/comments\/1vcn7sw\/is_the_ngrave_zero_still_save_regarding_de\/\" target=\"_blank\" rel=\"noopener\">exposed to the same seed generation bug<\/a>. Another replied that there was no evidence of it, different firmware and different key generation.<\/li>\n\n<li>The vendor\u2019s reply, two days later. On 3 August 2026 NGRAVE\u2019s support account wrote that the ZERO draws 256 bits of entropy from a hardware random number generator plus the fingerprint reading and the owner\u2019s interactions, does not rely on one entropy source, and that it recommends a passphrase regardless of wallet. It called the EAL7 operating system &#8220;the highest security certification available for this type of component&#8221;, narrower wording than the product page uses.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Where the accounts and the official story agree: support answers, and fast. Where they part: the marketing sells a certified device, while the risks in these threads were an update that bricked a unit, a battery, and an unanswered question about published code. None of those is what an EAL7 proof is about. All of them are what owning the thing is about. One vendor line is worth repeating, because it is the only universal advice here: a passphrase on top of the recovery words protects you even if the words leak. Read <a href=\"https:\/\/getbitcoin.guide\/articles\/your-recovery-phrase\/\">how a recovery phrase works<\/a> first, because a passphrase you forget is indistinguishable from a wallet you destroyed, and nothing legitimate will ever ask you to type those words into a website, an app or an email.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"so-is-the-certificate-worth-anything\">So is the certificate worth anything?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, narrowly. A formally verified kernel is a real achievement and better than no kernel assurance at all. It does not cover the companion app, the QR channel, the fingerprint sensor, the battery, the shipping chain or the update path, and in the accounts above it was the update path that bit. So when a review calls a certificate proof of the safest wallet in the world, ask which product and which version the certificate names. A page that cannot answer has not read the document it is selling you. Our guide to <a href=\"https:\/\/getbitcoin.guide\/articles\/what-is-a-cold-wallet\/\">what a cold wallet does and does not do<\/a> makes the longer case, and the <a href=\"https:\/\/getbitcoin.guide\/articles\/keystone-hard-wallet\/\">Keystone<\/a> review shows a cheaper air gap.<\/p>\n\n\n\n<div class=\"msq-tool msq-choose\" data-id=\"ngrave-threat-fit\">\n<h3>Which signer design suits the thing you are actually worried about?<\/h3>\n<p>Pick the risk that keeps you up, not the coin you hold. Every answer restates a trade off from the sources linked in this article. Nothing here is a recommendation to buy, sell or hold anything, and no tool on this site will ever ask you for a recovery phrase. Neither will any legitimate wallet or support agent.<\/p>\n<label><input type=\"radio\" name=\"ngrave-threat-fit\" value=\"code\">I want to read the code that signs my transactions<\/label>\n<label><input type=\"radio\" name=\"ngrave-threat-fit\" value=\"theft\">I am worried about somebody finding the device<\/label>\n<label><input type=\"radio\" name=\"ngrave-threat-fit\" value=\"update\">I am worried about a firmware update going wrong<\/label>\n<label><input type=\"radio\" name=\"ngrave-threat-fit\" value=\"safe\">I sign rarely and keep the device in a safe<\/label>\n<label><input type=\"radio\" name=\"ngrave-threat-fit\" value=\"often\">I sign often, usually from a phone<\/label>\n<div class=\"msq-choice-result\" data-for=\"code\" hidden><strong>Published firmware is the only way to get it, and the ZERO does not publish its own.<\/strong> On 10 October 2026 the NGRAVE GitHub organisation held libraries and forks rather than the device operating system. Devices that publish firmware, such as the Coldcard Q and the BitBox02, let others check the build. Published is not the same as audited, as our open source piece sets out.<\/div>\n<div class=\"msq-choice-result\" data-for=\"theft\" hidden><strong>The passphrase and PIN behaviour matter more here than any assurance level.<\/strong> NGRAVE&#8217;s own support account recommended adding a passphrase on top of the recovery words regardless of wallet, because it keeps funds out of reach even if the words leak. The cost is real: a passphrase you forget is indistinguishable from a wallet you destroyed, so the backup plan has to exist before you set one.<\/div>\n<div class=\"msq-choice-result\" data-for=\"update\" hidden><strong>This is the risk the certificate does not cover, and the one owners actually hit.<\/strong> A December 2025 account describes a ZERO that would not boot after an update, surviving the manual flashing route; the device was replaced and the recovery backup made it a loss of time. Verify the backup before any update, on any brand, and know which restore route you would use.<\/div>\n<div class=\"msq-choice-result\" data-for=\"safe\" hidden><strong>Battery and bulk become the recurring annoyance.<\/strong> An owner wrote in January 2026 that the ZERO drains while stored and has to be fetched and charged, and that signing means carrying it. Devices without a battery avoid that, at the cost of needing a cable or a card reader at the moment you sign. Neither is a security property, both are the reason people stop using a device.<\/div>\n<div class=\"msq-choice-result\" data-for=\"often\" hidden><strong>An air gap is paid for in seconds per signature.<\/strong> Firmware 1.8 replaced the ZERO&#8217;s legacy QR format with the Universal QR standard, which widens what it pairs with, but every transaction still crosses by camera. If that friction means you leave balances on an exchange instead, the air gap has made you less safe, not more.<\/div>\n<p class=\"msq-note\">Your choice stays on this device. This tool never asks for a recovery phrase, a passphrase or a wallet address.<\/p>\n<\/div>\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 the NGRAVE ZERO itself certified to EAL7?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>NGRAVE describes &#8220;a custom OS that achieved EAL7 certification&#8221; and lists &#8220;CC EAL7&#8221; in the ZERO specification table, but gives no certificate number, scheme or evaluated version. Searching the public Common Criteria databases on 10 October 2026 returned no certificate naming NGRAVE or the ZERO. Treat the claim as covering a component rather than the whole device.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What does EAL7 actually mean?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>EAL stands for Evaluation Assurance Level, and it describes how thoroughly a product was examined against a written security target, not how secure the result is. EAL7 is the top level and requires formal mathematical proof of the design, which is why it is normally awarded to small components such as an operating system kernel.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How much does the NGRAVE ZERO cost?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The official store listed the ZERO at $398 USD on 10 October 2026, with a ZERO and a USB-C cable in the box, and showed it as sold out on that date. A combo with the GRAPHENE steel backup has been listed at $498. Prices and stock change, so check the store rather than a review.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Which firmware version is current, and did it drop any coins?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Version 1.8, listed for August 2026 on NGRAVE\u2019s release notes page. It replaced the legacy QR format with Universal QR, added the Polygon token set and USDT on MultiversX, removed over 100 inactive or duplicated tokens, and ended support for BNB Beacon Chain and Groestlcoin. BNB on BNB Smart Chain was unaffected.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Was the NGRAVE ZERO affected by the Coldcard seed generation bug?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Nothing we found links the two. The Coinkite advisory names Coldcard firmware versions only, and NGRAVE stated on 3 August 2026 that the ZERO mixes a hardware random number generator with the fingerprint reading and the owner\u2019s interactions rather than relying on one entropy source. Different codebase, different key generation, and no NGRAVE advisory of its own has appeared.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is the ZERO firmware open source?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. On 10 October 2026 the NGRAVE GitHub organisation published libraries, a token database and forks of other wallet apps, but not the device operating system or firmware. An owner asked in the company\u2019s subreddit on 24 April 2026 when the firmware code would be published, and that question was not answered in the thread.<\/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, and Theo Brandt holds no financial qualification. Speak to a qualified professional about your own situation. Security claims were verified on 10 October 2026 against the sources linked above.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What the NGRAVE ZERO EAL7 claim covers, what the certifying record actually names, the coin count its own page contradicts, and what owners report after firmware 1.8.<\/p>\n","protected":false},"author":1,"featured_media":503,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"NGRAVE ZERO: What That EAL7 Certificate Really Covers","rank_math_description":"The NGRAVE ZERO lists at 398 dollars and its EAL7 claim describes an operating system kernel, not the finished device. Here is what sits outside it.","rank_math_focus_keyword":"ngrave zero","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-506","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\/506","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=506"}],"version-history":[{"count":3,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/506\/revisions"}],"predecessor-version":[{"id":511,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/506\/revisions\/511"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media\/503"}],"wp:attachment":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media?parent=506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/categories?post=506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/tags?post=506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}