<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>技術文章 — NT² 部落格</title>
    <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/categories/tech</link>
    <atom:link href="https://nt2-blog-staging.eavatar.workers.dev/zh-TW/categories/tech/feed.xml" rel="self" type="application/rss+xml" />
    <description>深入探討 NT² Vault 背後架構與實作方式的技術文章。</description>
    <language>zh-TW</language>
    <lastBuildDate>Thu, 24 Dec 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>就近控制平面，WebRTC 大量平面</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/control-plane-nearby-bulk-plane-webrtc</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/control-plane-nearby-bulk-plane-webrtc</guid>
      <pubDate>Thu, 24 Dec 2026 00:00:00 GMT</pubDate>
      <description>近距離工作階段有預算。聯絡人邀請與共用清單放得下。PDF 掃描通常放不下——所以附件在 SDP 交換後走大量平面，而不是塞進每個控制 frame。</description>
      <author>NT²</author>
      <category>share</category>
      <category>cryptography</category>
      <category>privacy</category>
      <category>web</category>
      <category>webrtc</category>
    </item>
    <item>
      <title>引導 QR 不上網</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/bootstrap-qr-stays-off-the-web</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/bootstrap-qr-stays-off-the-web</guid>
      <pubDate>Sun, 20 Dec 2026 00:00:00 GMT</pubDate>
      <description>若近距離引導能活在普通的 https 連結裡，驗證碼就已經逛過瀏覽紀錄、referrer，以及系統相機 → URL 開啟路徑。</description>
      <author>NT²</author>
      <category>share</category>
      <category>cryptography</category>
      <category>privacy</category>
      <category>security</category>
      <category>web</category>
    </item>
    <item>
      <title>近距離工作階段不是對等連線</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/proximity-session-is-not-a-peer-connection</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/proximity-session-is-not-a-peer-connection</guid>
      <pubDate>Thu, 17 Dec 2026 00:00:00 GMT</pubDate>
      <description>站在對方面前連上線，只是短命的工作階段。把對方認可為保管箱聯絡人——以及把共用接受進保管箱——仍是分開的動作。</description>
      <author>NT²</author>
      <category>share</category>
      <category>contacts</category>
      <category>cryptography</category>
      <category>零知識</category>
      <category>privacy</category>
      <category>web</category>
    </item>
    <item>
      <title>共用檔案、深層連結，與機器交接密碼</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/share-file-link-and-machine-handoff-passphrase</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/share-file-link-and-machine-handoff-passphrase</guid>
      <pubDate>Sun, 13 Dec 2026 00:00:00 GMT</pubDate>
      <description>密文與開啟它的機密不該當成一封方便的 email 一起走。NT² 把載體——檔案或連結——與 OOB 共用密碼傳遞分開，並把 Strong 當成機器交接。</description>
      <author>NT²</author>
      <category>share</category>
      <category>cryptography</category>
      <category>security</category>
      <category>privacy</category>
      <category>零知識</category>
      <category>deep-links</category>
    </item>
    <item>
      <title>延遲遺產釋放不是密碼復原</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/delayed-legacy-release-not-password-recovery</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/delayed-legacy-release-not-password-recovery</guid>
      <pubDate>Thu, 10 Dec 2026 00:00:00 GMT</pubDate>
      <description>遺產與緊急存取誘使產品「以防萬一」持有第二把鑰匙。NT² 拒絕那種神諭。遺產是延遲開封的密封封包——不是客服主控台解鎖。</description>
      <author>NT²</author>
      <category>share</category>
      <category>recovery</category>
      <category>security</category>
      <category>零知識</category>
      <category>privacy</category>
      <category>legacy</category>
    </item>
    <item>
      <title>撤銷你已經送出的共用</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/outbox-revoke-what-you-already-sent</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/outbox-revoke-what-you-already-sent</guid>
      <pubDate>Sun, 06 Dec 2026 00:00:00 GMT</pubDate>
      <description>共用離開你的保管箱之後，「對方開了嗎？」與「我還殺得掉嗎？」是寄件者的問題。答案活在本機寄件匣——不是充滿可讀郵件的雲端資料夾。</description>
      <author>NT²</author>
      <category>share</category>
      <category>architecture</category>
      <category>privacy</category>
      <category>零知識</category>
      <category>edge</category>
      <category>local-first</category>
    </item>
    <item>
      <title>對等連線不是手機通訊錄聯絡人</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/peer-connection-is-not-a-phone-contact</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/peer-connection-is-not-a-phone-contact</guid>
      <pubDate>Thu, 03 Dec 2026 00:00:00 GMT</pubDate>
      <description>「共用給聯絡人裡的某人」只有在該列持有對方保管箱的加密材料時才成立——而不是你希望對得上號的電話號碼。</description>
      <author>NT²</author>
      <category>share</category>
      <category>contacts</category>
      <category>identity</category>
      <category>cryptography</category>
      <category>零知識</category>
      <category>privacy</category>
    </item>
    <item>
      <title>四個介面，一組欄位</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/four-surfaces-one-field-set</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/four-surfaces-one-field-set</guid>
      <pubDate>Sun, 29 Nov 2026 00:00:00 GMT</pubDate>
      <description>如果「表單欄位」、「共用欄位」與「到期欄位」是三套不同的結構描述，它們終將產生分歧——而且會有人看見超出你本意的內容。單一使用中欄位集合，讓每個介面都保持誠實。</description>
      <author>NT²</author>
      <category>structured-vault</category>
      <category>semantic-fields</category>
      <category>sharing</category>
      <category>selective-disclosure</category>
      <category>category-templates</category>
    </item>
    <item>
      <title>可搜尋的中繼資料，封裝後的欄位值</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/searchable-metadata-sealed-field-values</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/searchable-metadata-sealed-field-values</guid>
      <pubDate>Thu, 26 Nov 2026 00:00:00 GMT</pubDate>
      <description>一座連標題都找不到的保管箱不能用。一座在伺服器上對每個密碼做全文索引的保管箱，也稱不上是保管箱。分界線在於投影過的中繼資料，與封裝後的欄位值之間。</description>
      <author>NT²</author>
      <category>structured-vault</category>
      <category>cbf</category>
      <category>fts5</category>
      <category>zero-knowledge</category>
      <category>local-first</category>
      <category>search</category>
    </item>
    <item>
      <title>從同一套型別系統組合出各個領域</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/compose-domains-from-one-type-system</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/compose-domains-from-one-type-system</guid>
      <pubDate>Sun, 22 Nov 2026 00:00:00 GMT</pubDate>
      <description>醫療套件和 IT 套件，不應該各自重新發明一次「到期日」。領域是靠把一份共享的語意目錄組合進類別範本來成長的——之後再啟用你需要的套件。</description>
      <author>NT²</author>
      <category>structured-vault</category>
      <category>category-templates</category>
      <category>field-packs</category>
      <category>semantic-fields</category>
      <category>local-first</category>
    </item>
    <item>
      <title>語意欄位，而非表單元件</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/semantic-columns-not-form-widgets</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/semantic-columns-not-form-widgets</guid>
      <pubDate>Thu, 19 Nov 2026 00:00:00 GMT</pubDate>
      <description>密碼欄位不是「這個畫面上的一個機密文字框」。它是整座保管箱都理解的語意欄位型別——連遮罩、健康檢查、共用預設值與傳輸格式都包含在內。</description>
      <author>NT²</author>
      <category>structured-vault</category>
      <category>semantic-fields</category>
      <category>category-templates</category>
      <category>field-registry</category>
      <category>local-first</category>
    </item>
    <item>
      <title>插槽，而非空白頁</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/slots-not-a-blank-page</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/slots-not-a-blank-page</guid>
      <pubDate>Sun, 15 Nov 2026 00:00:00 GMT</pubDate>
      <description>護照、銀行帳戶、API 金鑰與助記詞，並不是同一種文字。若保管箱把它們都當成同一張空白頁，你就只能自己記住結構該長什麼樣子。</description>
      <author>NT²</author>
      <category>structured-vault</category>
      <category>category-templates</category>
      <category>local-first</category>
      <category>document-model</category>
      <category>zero-knowledge</category>
    </item>
    <item>
      <title>Replica 批次內部——封包形狀</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/replica-batch-under-the-hood</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/replica-batch-under-the-hood</guid>
      <pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate>
      <description>盲目同步要讓人信任，最好能畫出封包長相。邊緣看見的是形狀、大小與進度——不是標題、 筆記，也不是可搜尋的機密閣樓。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>sync</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
      <category>edge</category>
      <category>local-first</category>
      <category>durable-objects</category>
      <category>r2</category>
    </item>
    <item>
      <title>威脅模型，2026：瀏覽器與擴充功能</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threat-model-2026-browser-and-extensions</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threat-model-2026-browser-and-extensions</guid>
      <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
      <description>威脅模型會隨瀏覽器老化。這份 2026 更新繼續點名殘餘風險——XSS、已解鎖遭竊、敵意擴充功能、 來源供應鏈——並檢查客戶端世界移動時，哪些防線仍然站得住。</description>
      <author>NT²</author>
      <category>security</category>
      <category>threat-model</category>
      <category>browsers</category>
      <category>extensions</category>
      <category>web-crypto</category>
      <category>xss</category>
      <category>zero-knowledge</category>
      <category>local-first</category>
    </item>
    <item>
      <title>來自一萬筆項目 OPFS 保管箱的基準測試</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/benchmarks-from-a-10k-item-opfs-vault</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/benchmarks-from-a-10k-item-opfs-vault</guid>
      <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
      <description>大型本機保管箱不是靠一句口號證明的。它靠的是量測人們實際使用的路徑—— 解鎖後的第一頁、防抖搜尋、FTS 與篩選查詢——並誠實說明這些數字不代表什麼。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>local-first</category>
      <category>sqlite</category>
      <category>opfs</category>
      <category>performance</category>
      <category>benchmarks</category>
      <category>fts5</category>
      <category>pwa</category>
    </item>
    <item>
      <title>離線可用不是「有網路再碰運氣同步」</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/offline-is-the-happy-path</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/offline-is-the-happy-path</guid>
      <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
      <description>許多應用自稱離線可用，實際上只是唯讀快取，加上一個期待基地台回來的佇列。 本地優先的保管箱先把完整 CRUD 放在裝置上。同步是可選的第二條路。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>local-first</category>
      <category>offline</category>
      <category>pwa</category>
      <category>sync</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
    </item>
    <item>
      <title>別處 XSS 偷工作階段；這裡金鑰不可匯出</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threat-model-xss-device-theft</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threat-model-xss-device-theft</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <description>宣稱無敵的保管箱是在賣戲碼。NT² 點名殘餘風險——已解鎖時的 XSS、遭竊且仍解鎖的裝置、 敵意擴充功能——並把設計收斂成：那些失敗不會同時變成密碼神諭或可匯出的金鑰傾倒。</description>
      <author>NT²</author>
      <category>security</category>
      <category>threat-model</category>
      <category>web-crypto</category>
      <category>xss</category>
      <category>zero-knowledge</category>
      <category>local-first</category>
      <category>crypto</category>
    </item>
    <item>
      <title>共用密碼學套件要有 100% 覆蓋率底線</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/hundred-percent-coverage-on-crypto-packages</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/hundred-percent-coverage-on-crypto-packages</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <description>規格界定範圍。安全否決承擔剩餘風險。覆蓋率底線做更窄的事：封印、包裝與描述保管箱事實的共用套件， 不容許未執行的一行——否則 agents 會把「做完了」連同缺口一起出貨。</description>
      <author>NT²</author>
      <category>ai-agents</category>
      <category>testing</category>
      <category>coverage</category>
      <category>crypto</category>
      <category>human-in-the-loop</category>
      <category>product-development</category>
      <category>engineering</category>
    </item>
    <item>
      <title>安全否決是角色，不是氣氛</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/security-veto-in-the-agent-loop</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/security-veto-in-the-agent-loop</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <description>Agents 能起草修補與綠燈建議。它們不能擁有這項決策：保管箱仍拒絕密碼託管、 可匯出金鑰，或「好心」的復原櫃檯。安全否決是帶權威的角色——不是聊天裡的情緒。</description>
      <author>NT²</author>
      <category>ai-agents</category>
      <category>security</category>
      <category>human-in-the-loop</category>
      <category>crypto</category>
      <category>secure-sdlc</category>
      <category>product-development</category>
      <category>engineering</category>
    </item>
    <item>
      <title>規格先於 agents 寫 code</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/spec-driven-development-for-agents</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/spec-driven-development-for-agents</guid>
      <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
      <description>依模糊提示寫 code 的 agent 會發明一個產品；依書面契約寫 code 的 agent 會交付你已核准的切片——或在契約邊界停下。</description>
      <author>NT²</author>
      <category>ai-agents</category>
      <category>spec-driven-development</category>
      <category>human-in-the-loop</category>
      <category>product-development</category>
      <category>security</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Workers 被允許看見什麼</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/what-the-workers-are-allowed-to-see</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/what-the-workers-are-allowed-to-see</guid>
      <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
      <description>零知識不是關於 HTTPS 的口號。它是邊緣的權限清單：Workers 可以儲存、路由、計費什麼—— 以及它們永遠不得得知什麼。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>cloudflare</category>
      <category>workers</category>
      <category>edge</category>
      <category>zero-knowledge</category>
      <category>privacy</category>
      <category>sync</category>
      <category>security</category>
    </item>
    <item>
      <title>.nt2backup 作為主權格式</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/nt2backup-as-portable-sovereignty</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/nt2backup-as-portable-sovereignty</guid>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
      <description>本機優先唯有在你能帶著雲端從未必須持有的加密快照離開時，才叫所有權。.nt2backup 就是那份快照：你掌控的檔案裡，裝著可攜保管箱設定檔區段與密封的承載。</description>
      <author>NT²</author>
      <category>backup</category>
      <category>local-first</category>
      <category>zero-knowledge</category>
      <category>architecture</category>
      <category>escape-hatch</category>
      <category>portability</category>
      <category>encryption</category>
    </item>
    <item>
      <title>同一套保管箱 UI：瀏覽器、PWA 與桌面／行動殼層</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/one-web-ui-three-shells</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/one-web-ui-three-shells</guid>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <description>解鎖、列表、搜尋與設定不該裂成三個產品。NT² Vault 維持一套保管箱 UI， 讓每個殼層只負責平台必須擁有的事：耐用檔案如何落在該裝置上。</description>
      <author>NT²</author>
      <category>pwa</category>
      <category>tauri</category>
      <category>webview</category>
      <category>opfs</category>
      <category>local-first</category>
      <category>attachments</category>
      <category>sqlite</category>
      <category>cross-platform</category>
    </item>
    <item>
      <title>保管箱設定檔是區段鍵值存放，不是一列巨無霸</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/vault-meta-as-section-kv</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/vault-meta-as-section-kv</guid>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <description>鹽值、保管箱金鑰 DID 公開材料、同步游標與引導偏好，不是同一列肥大的 SQL。它們以具名的 保管箱設定檔區段存在——讓備份、同步與解鎖各自只碰需要的部分。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>sqlite</category>
      <category>vault-meta</category>
      <category>local-first</category>
      <category>backup</category>
      <category>sync</category>
      <category>zero-knowledge</category>
      <category>pwa</category>
    </item>
    <item>
      <title>結構描述 v60 與漸進式遷移</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/incremental-vault-schema-migration</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/incremental-vault-schema-migration</guid>
      <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
      <description>本機保管箱是裝置上的真正 SQLite 資料庫。當產品推出結構描述 v60 時，上線時期的保管箱必須就地升級——不能因為原始碼裡的 CREATE 語句變了，就強迫清除重建。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>sqlite</category>
      <category>schema-migration</category>
      <category>local-first</category>
      <category>opfs</category>
      <category>pwa</category>
      <category>data-durability</category>
    </item>
    <item>
      <title>錯誤密碼必須以關閉方式失敗</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/password-verifier-fail-closed</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/password-verifier-fail-closed</guid>
      <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
      <description>解鎖不是對你所有資料的盡力解密。NT² 先檢查一小段本機驗證碼。錯誤密碼會以關閉方式失敗：保管箱維持鎖定，介面也保持誠實。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>crypto</category>
      <category>security</category>
      <category>local-first</category>
      <category>zero-knowledge</category>
      <category>web-crypto</category>
      <category>aes-gcm</category>
      <category>unlock</category>
    </item>
    <item>
      <title>CBF：結構化欄位離開記憶體的方式</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/cbf-payload-blobs-at-rest</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/cbf-payload-blobs-at-rest</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <description>編輯時，一筆憑證是欄位對應表。一旦這些欄位必須熬過鎖定、重新啟動或複本同步，它們需要的是可攜式密文形狀——而不是一份等著下一位讀取者打開的 JSON 傾印。</description>
      <author>NT²</author>
      <category>cryptography</category>
      <category>aes-gcm</category>
      <category>cbf</category>
      <category>local-first</category>
      <category>zero-knowledge</category>
      <category>envelope-encryption</category>
      <category>security</category>
    </item>
    <item>
      <title>自動鎖定是記憶體衛生問題</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/crypto-keys-must-not-survive-refresh</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/crypto-keys-must-not-survive-refresh</guid>
      <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
      <description>若解密後的金鑰控制代碼活得比已解鎖工作階段還久，靜止加密就不完整。NT² 把自動鎖定 當成記憶體衛生：不可匯出的 CryptoKey、只存在記憶體、在閒置、重新整理與關閉分頁時清除。</description>
      <author>NT²</author>
      <category>web-crypto</category>
      <category>security</category>
      <category>crypto</category>
      <category>session</category>
      <category>auto-lock</category>
      <category>local-first</category>
      <category>pwa</category>
      <category>zero-knowledge</category>
    </item>
    <item>
      <title>SQLite 放在 Web Worker 裡，不是選配</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/sqlite-in-a-web-worker</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/sqlite-in-a-web-worker</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description>本機優先保管箱需要裝置上真正的關聯式引擎。若把引擎放在 UI 執行緒， 每一次分頁查詢都會與繪製、輸入搶資源。NT² Vault 在 Web Worker 中執行 SQLite，外層是型別化訊息與單一鎖鏈，讓列表在資料庫保持誠實的同時仍能回應。</description>
      <author>NT²</author>
      <category>web-worker</category>
      <category>sqlite</category>
      <category>wasm</category>
      <category>wa-sqlite</category>
      <category>opfs</category>
      <category>local-first</category>
      <category>pwa</category>
      <category>concurrency</category>
    </item>
    <item>
      <title>選擇性 SSI——不是泛用 DIDComm 錢包</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/selective-ssi-not-a-did-wallet</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/selective-ssi-not-a-did-wallet</guid>
      <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
      <description>自主身份只有在你取用適合零知識保管箱的部分、並拒絕把產品拉成泛用 DID 錢包的部分時， 才真正有用。</description>
      <author>NT²</author>
      <category>identity</category>
      <category>did</category>
      <category>share</category>
      <category>architecture</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
      <category>security</category>
      <category>cryptography</category>
    </item>
    <item>
      <title>中繼索引密文；收件匣留在本機</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/blind-share-relay-local-inbox</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/blind-share-relay-local-inbox</guid>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <description>雲端可以協助傳遞密封封包，卻不必變成可讀郵件匣來存放待處理共用。中繼索引密文。 收件匣留在裝置上。</description>
      <author>NT²</author>
      <category>share</category>
      <category>inbox</category>
      <category>architecture</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
      <category>edge</category>
      <category>local-first</category>
    </item>
    <item>
      <title>共用密碼 ≠ 主密碼</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/share-passphrase-is-not-master-password</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/share-passphrase-is-not-master-password</guid>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <description>若共用內容能用解鎖保管箱的同一機密開啟，那就不是交接，而是遠端解鎖一切。NT² 把這些邊界分開。</description>
      <author>NT²</author>
      <category>share</category>
      <category>cryptography</category>
      <category>security</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
      <category>aes-gcm</category>
      <category>identity</category>
    </item>
    <item>
      <title>挑戰－回應，而非以 email 作為持有憑證</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/key-did-challenge-response-auth</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/key-did-challenge-response-auth</guid>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <description>雲端服務常把 email 收件匣當成帳號的根。加密保管箱需要不同的證明：以簽署金鑰的控制權，透過回答一次性挑戰來展示。</description>
      <author>NT²</author>
      <category>authentication</category>
      <category>identity</category>
      <category>cryptography</category>
      <category>did</category>
      <category>security</category>
      <category>privacy</category>
      <category>cloud</category>
      <category>zero-knowledge</category>
    </item>
    <item>
      <title>每個分頁一個已解鎖保管箱——刻意如此</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/single-writer-multi-tab-vault</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/single-writer-multi-tab-vault</guid>
      <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
      <description>在兩個瀏覽器分頁開啟同一個保管箱很平常。讓兩個分頁同時寫入同一份本機 SQLite 檔案則否。NT² Vault 選出一個寫入者，並讓其他已解鎖分頁當跟隨者。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>multi-tab</category>
      <category>local-first</category>
      <category>pwa</category>
      <category>sqlite</category>
      <category>broadcastchannel</category>
      <category>web-locks</category>
      <category>concurrency</category>
    </item>
    <item>
      <title>中繼資料在 SQLite，密文在 BlobStore</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/attachment-ciphertext-outside-sqlite</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/attachment-ciphertext-outside-sqlite</guid>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <description>保管箱需要知道哪些檔案屬於哪些項目、它們有多大、以及如何解開金鑰。 它不需要把那些加密位元組塞進負責回答這些問題的關聯式資料庫裡。</description>
      <author>NT²</author>
      <category>attachments</category>
      <category>sqlite</category>
      <category>blobstore</category>
      <category>opfs</category>
      <category>envelope-encryption</category>
      <category>local-first</category>
      <category>aes-gcm</category>
      <category>chunking</category>
    </item>
    <item>
      <title>標題用 FTS5；篩選勝出時走表掃描</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/fts5-vs-table-scan-in-the-vault</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/fts5-vs-table-scan-in-the-vault</guid>
      <pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate>
      <description>本機搜尋不是單一查詢形狀。自由文字需要標題與搜尋文字的全文索引。 類別、垃圾桶、封存等篩選需要一般的表條件。產品會切換策略， 讓介面不必把整個保管箱塞進記憶體，也能感覺可搜尋。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>local-first</category>
      <category>sqlite</category>
      <category>fts5</category>
      <category>search</category>
      <category>performance</category>
      <category>pwa</category>
    </item>
    <item>
      <title>永遠不要把整個保管箱載入 Svelte state</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/paged-list-not-full-table-load</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/paged-list-not-full-table-load</guid>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <description>本機保管箱可以保存數千筆結構化項目，卻不必變成巨大的記憶體內陣列。 耐用的真實資料留在 SQLite。介面只持有一分頁的輕量列表列， 並透過虛擬列表渲染。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>local-first</category>
      <category>sqlite</category>
      <category>svelte</category>
      <category>performance</category>
      <category>virtual-list</category>
      <category>pagination</category>
      <category>pwa</category>
    </item>
    <item>
      <title>帳號資料庫不能成為密碼神諭</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/no-password-oracle-in-d1</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/no-password-oracle-in-d1</guid>
      <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
      <description>帳號資料表即使沒有任何保管箱項目的明文，仍可能形成危險的密碼測試介面。我們移除 了那些會讓資料庫副本變成離線猜測或還原系統的資料欄。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>security</category>
      <category>privacy</category>
      <category>zero-knowledge</category>
      <category>edge</category>
      <category>cloudflare</category>
      <category>d1</category>
      <category>authentication</category>
    </item>
    <item>
      <title>一個保管箱身份，一個同步中樞</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/vault-durable-object-per-key-did</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/vault-durable-object-per-key-did</guid>
      <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
      <description>保管箱不必進入共用的明文信箱才能同步。它的公開密碼學身份可以指定專屬的邊緣協調器，用來通知 replica，並指向協調器本身無法開啟的加密 frame。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>sync</category>
      <category>privacy</category>
      <category>durable-objects</category>
      <category>key-did</category>
      <category>edge</category>
    </item>
    <item>
      <title>無法重設密碼，是刻意的設計</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/no-password-reset-by-design</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/no-password-reset-by-design</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>「聯絡客服重設密碼」聽起來令人安心。對加密保管箱而言，它也透露了最終由誰控制存取權。NT² 選擇一項更難實現的承諾：還原材料由你保管，而不是放在我們的客服中心。</description>
      <author>NT²</author>
      <category>security</category>
      <category>recovery</category>
      <category>zero-knowledge</category>
      <category>trust</category>
      <category>local-first</category>
    </item>
    <item>
      <title>在邊緣進行盲目 replica 同步</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/blind-replica-sync-on-the-edge</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/blind-replica-sync-on-the-edge</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <description>同步不必把本機保管箱變成雲端資料庫。邊緣可以辨識帳號、儲存不透明 replica frame 並傳遞更新，卻不必知道更新裡有什麼。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>sync</category>
      <category>privacy</category>
      <category>local-first</category>
      <category>zero-knowledge</category>
      <category>edge</category>
    </item>
    <item>
      <title>為什麼我們將保管箱的 SQLite 資料庫放在 OPFS，而非 IndexedDB</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/opfs-not-indexeddb-for-vault-sqlite</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/opfs-not-indexeddb-for-vault-sqlite</guid>
      <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
      <description>SQLite 需要的是檔案。隱私保管箱需要耐用的關聯式儲存，而且隨著項目、索引與加密附件增加， 效能仍須保持穩定。以 IndexedDB 承載 SQLite 虛擬檔案系統，確實能連接這兩個世界， 但這座橋也會介入每一次資料庫操作。對 NT² Vault 而言，瀏覽器中的保管箱檔案應該放在 Origin Private File System。</description>
      <author>NT²</author>
      <category>opfs</category>
      <category>indexeddb</category>
      <category>sqlite</category>
      <category>wasm</category>
      <category>wa-sqlite</category>
      <category>local-first</category>
      <category>pwa</category>
      <category>browser-storage</category>
    </item>
    <item>
      <title>解鎖本機保管箱，不等於登入雲端</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/unlock-local-auth-cloud</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/unlock-local-auth-cloud</guid>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <description>同一個畫面，可能讓兩個安全事件看起來像一次登入。我們刻意將它們分開，因為開啟加密資料與向伺服器證明身份，是風險各異的兩件事。</description>
      <author>NT²</author>
      <category>authentication</category>
      <category>local-first</category>
      <category>privacy</category>
      <category>security</category>
      <category>cryptography</category>
      <category>cloud</category>
    </item>
    <item>
      <title>每個物件一把金鑰：NT² Vault 內的信封加密</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/envelope-encryption-cek-per-object</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/envelope-encryption-cek-per-object</guid>
      <pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate>
      <description>保管箱可以用一把金鑰加密所有資料，並且仍然宣稱資料經過加密。但我們希望採用更實用的邊界：每個項目與附件都有自己的內容加密金鑰，再由保管箱金鑰保護這些金鑰。</description>
      <author>NT²</author>
      <category>信封加密</category>
      <category>aes-gcm</category>
      <category>密碼學</category>
      <category>本機優先</category>
      <category>附件</category>
      <category>opfs</category>
      <category>安全性</category>
    </item>
    <item>
      <title>KDF 鹽值留在你的裝置上</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/kdf-salt-stays-on-device</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/kdf-salt-stays-on-device</guid>
      <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
      <description>鹽值不是祕密，但它存放的位置，決定了誰能組成一套密碼猜測系統。NT² 將 KDF 鹽值與密碼驗證資料留在本機保管箱內，讓解鎖從頭到尾都在裝置上完成。</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>crypto</category>
      <category>security</category>
      <category>local-first</category>
      <category>zero-knowledge</category>
      <category>web-crypto</category>
      <category>pbkdf2</category>
      <category>key-derivation</category>
    </item>
    <item>
      <title>一人如何與 AI agents 共同開發並營運 NT² Vault</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/one-person-ai-coding-agent-product-lifecycle</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/one-person-ai-coding-agent-product-lifecycle</guid>
      <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
      <description>真正值得問的不是 AI agent 能不能寫 code，而是如何提供足夠的 context 與 autonomy， 讓 agents 快速前進，同時把產品決策、安全邊界、release 與 customer-facing actions 保留在明確的人類控制之下。</description>
      <author>NT²</author>
      <category>ai-agents</category>
      <category>human-in-the-loop</category>
      <category>spec-driven-development</category>
      <category>tdd</category>
      <category>devops</category>
      <category>security</category>
      <category>product-development</category>
    </item>
    <item>
      <title>為什麼選擇 PWA 本地優先、零伺服器的 Vault</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/why-pwa-local-first-zero-server-vault</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/why-pwa-local-first-zero-server-vault</guid>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <description>在雲端優先應用當道的時代，我們往往忽略了一個強大的替代方案：漸進式網頁應用（PWA）。當現代瀏覽器已經能在使用者裝置上完整執行高效、安全、高效能的應用時，為什麼還要維運一套沉重、昂貴且可能成為攻擊面的伺服器基礎設施？</description>
      <author>NT²</author>
      <category>architecture</category>
      <category>pwa</category>
      <category>privacy</category>
      <category>web-crypto</category>
      <category>sqlite</category>
      <category>wasm</category>
      <category>opfs</category>
    </item>
    <item>
      <title>多控保管箱與保管箱金鑰 DID：不用交出鑰匙的身份管理</title>
      <link>https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threshold-vault-key-did-self-sovereign-identity</link>
      <guid isPermaLink="true">https://nt2-blog-staging.eavatar.workers.dev/zh-TW/threshold-vault-key-did-self-sovereign-identity</guid>
      <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
      <description>自主身份聽起來很抽象。在 NT² 裡，實際版本更簡單：你的保管箱可以證明自己、在沒有客服介入下還原，並由你決定如何共用，而 NT² 始終保持盲視。</description>
      <author>NT²</author>
      <category>trust</category>
      <category>identity</category>
    </item>
  </channel>
</rss>