方案)
Ente Legacy Kit基于 Shamir 秘密共享的物理式可撤銷帳戶恢復(fù)方案【免費(fèi)下載鏈接】ente End-to-end encrypted cloud for everything.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/en/enteLegacy Kits遺產(chǎn)恢復(fù)包是 Ente Locker 提供的一種物理化數(shù)字遺產(chǎn)與災(zāi)難恢復(fù)方案。它利用 Shamir 2-of-3 秘密共享將帳戶恢復(fù)密鑰拆分成 3 張獨(dú)立恢復(fù)單任意 2 張即可在瀏覽器中啟動(dòng)受控恢復(fù)流程——而單一恢復(fù)單完全不足以恢復(fù)任何信息。本文將從用戶操作、底層密碼學(xué)機(jī)制到服務(wù)端實(shí)現(xiàn)完整解讀 Legacy Kit 的設(shè)計(jì)與使用。什么是 Legacy KitLegacy Kit 是一組 3 張物理恢復(fù)單recovery sheet用于 Ente 帳戶的繼承、災(zāi)難恢復(fù)或自救。當(dāng)用戶丟失密碼和恢復(fù)密鑰時(shí)擁有任意 2 張恢復(fù)單的協(xié)助者可以通過(guò)瀏覽器啟動(dòng)帳戶恢復(fù)。與常規(guī)的恢復(fù)密鑰不同Legacy Kit 的恢復(fù)單不包含帳戶恢復(fù)密鑰也無(wú)法直接登錄帳戶。恢復(fù)單僅攜帶一個(gè)獨(dú)立的kit secret分片必須在瀏覽器中組合 2 張恢復(fù)單后本地重構(gòu)該 secret再通過(guò)服務(wù)器端驗(yàn)證才能進(jìn)入受控恢復(fù)流程。底層密碼學(xué)Shamir 的 2-of-3 秘密共享Legacy Kit 的核心數(shù)學(xué)基礎(chǔ)是 1979 年提出的 Shamir 秘密共享方案。Ente 選用最簡(jiǎn)單且實(shí)用的變體將一個(gè)秘密拆分為 3 份任意 2 份可重構(gòu)原始秘密僅 1 份則完全無(wú)法透露任何信息除字節(jié)長(zhǎng)度外。幾何直觀理解想象一條穿過(guò) y 軸的直線y 軸截距就是你的秘密斜率是一個(gè)隨機(jī)數(shù)使用后丟棄在直線上選 3 個(gè)不同的 x 值例如 x1, 2, 3計(jì)算對(duì)應(yīng)的 y 值每個(gè) (x, y) 對(duì)就是一個(gè)分片擁有任意 1 個(gè)分片直線上一個(gè)點(diǎn)可以畫出無(wú)限條經(jīng)過(guò)該點(diǎn)的直線無(wú)法確定 y 軸截距。擁有任意 2 個(gè)分片兩個(gè)點(diǎn)則唯一確定一條過(guò)這兩點(diǎn)的直線可以算出 y 軸截距——即秘密。GF(256) 有限域?qū)崿F(xiàn)實(shí)際實(shí)現(xiàn)中Shamir 方案在有限域 GF(256) 上運(yùn)算確保每個(gè)字節(jié)都是合法的域元素。Ente 的 2-of-3 方案按字節(jié)拆分秘密每個(gè)分片與原始秘密等長(zhǎng)。對(duì)于每個(gè)秘密字節(jié)s生成一個(gè)均勻隨機(jī)的字節(jié)r分片 1 存儲(chǔ)sXORr分片 2 存儲(chǔ)sXOR (r × 2 in GF(256))分片 3 存儲(chǔ)sXOR (r × 3 in GF(256))GF(256) 乘法使用標(biāo)準(zhǔn) AES 多項(xiàng)式 (0x11b)。任意 2 個(gè)分片加上其分片編號(hào)x 值 1, 2, 3即可恢復(fù)每個(gè)字節(jié)的s。單獨(dú)一個(gè)分片等價(jià)于sXOR 某個(gè)隨機(jī)字節(jié)與隨機(jī)數(shù)不可區(qū)分。相同的 2-of-3 數(shù)學(xué)方案也以獨(dú)立 Web 應(yīng)用 2of3 的形式提供任何文本型秘密均可使用無(wú)需 Ente 帳戶。恢復(fù)單的數(shù)據(jù)格式每張恢復(fù)單攜帶一個(gè)分片編碼為短文本碼同一張卡片上也以 QR 碼形式呈現(xiàn)以便手機(jī)掃碼。文本碼格式如下2of3-AQEA...2of3-前綴幫助閱讀者快速識(shí)別也讓解析器能在粘貼文本時(shí)給出明確的錯(cuò)誤提示。前綴之后是 base64url 編碼的字節(jié)載荷由 10 字節(jié)頭部加上分片數(shù)據(jù)組成字節(jié)偏移字段含義0版本號(hào)當(dāng)前格式固定為2。恢復(fù)也支持版本 1 的卡片1卡片索引1、2或3。這是恢復(fù)時(shí)用于組合分片的x 值2–3長(zhǎng)度秘密字節(jié)數(shù)的 16 位大端長(zhǎng)度恢復(fù)時(shí)兩個(gè)分片必須一致4–9隨機(jī) ID6 字節(jié)crypto.getRandomValues輸出同一秘密的所有三張卡片共享此 ID10分片數(shù)據(jù)秘密字節(jié)的分片數(shù)據(jù)含 4 字節(jié)校驗(yàn)和。校驗(yàn)和同樣受兩卡片閾值保護(hù)恢復(fù)單上的隨機(jī) ID用于檢測(cè)不匹配的卡片如果試圖組合來(lái)自不同 kit 的卡片解析器會(huì)報(bào)錯(cuò)These two cards are from different sets。校驗(yàn)和則用于檢測(cè)損壞的卡片組合后重新計(jì)算校驗(yàn)和并與恢復(fù)值比對(duì)不一致時(shí)提示These shares did not reconstruct a valid secret而不是靜默返回亂碼。服務(wù)端實(shí)現(xiàn)原理數(shù)據(jù)庫(kù)模型Legacy Kit 在服務(wù)端使用三張 PostgreSQL 表參見(jiàn)數(shù)據(jù)庫(kù)遷移腳本legacy_kit主表存儲(chǔ) kit 元數(shù)據(jù)。包含user_id、variant當(dāng)前僅支持 2-of-3固定值 1、notice_period_in_hrs恢復(fù)等待時(shí)間、encrypted_recovery_blob用戶恢復(fù)密鑰的加密版本、auth_public_key用于挑戰(zhàn)-應(yīng)答的身份驗(yàn)證公鑰、encrypted_owner_blob僅所有者可讀的分片名稱和載荷。支持軟刪除is_deleted布爾字段。legacy_kit_challenge存儲(chǔ)挑戰(zhàn)碼哈希用于恢復(fù)發(fā)起前的證明。一個(gè) kit 可同時(shí)存在多個(gè)未過(guò)期挑戰(zhàn)不會(huì)相互覆蓋。legacy_kit_recovery_session存儲(chǔ)恢復(fù)會(huì)話。關(guān)鍵字段包括statusWAITING/READY/BLOCKED/CANCELLED/RECOVERED、effective_notice_period_in_hrs、wait_till等待截止微秒時(shí)間戳、initiatorsJSONB 格式的審計(jì)信息。同一 kit 同一時(shí)刻最多只能有一個(gè) WAITING 或 READY 狀態(tài)的活躍會(huì)話。控制器核心邏輯服務(wù)端控制器代碼位于 server/pkg/controller/legacy_kit/controller.go主要流程如下創(chuàng)建 KitCreateKit校驗(yàn)NoticePeriodInHours是否在合法集合{0, 24, 168, 360, 720}中校驗(yàn)Variant是否為L(zhǎng)egacyKitVariantTwoOfThree即 2-of-3校驗(yàn)AuthPublicKey是否為合法的密封盒公鑰格式通過(guò)CreateKitWithLimit創(chuàng)建限制每個(gè)用戶最多 5 個(gè)未刪除 kit恢復(fù)等待時(shí)間validateNoticePeriodvar validNoticePeriods map[int]struct{}{ 0: {}, // 立即 24: {}, // 1天 168: {}, // 7天默認(rèn) 360: {}, // 15天 720: {}, // 30天 }發(fā)起恢復(fù)OpenRecovery驗(yàn)證使用的分片索引UsedPartIndexes是否合法——長(zhǎng)度為 2值在 1–3 范圍內(nèi)且不重復(fù)記錄發(fā)起者的 IP、User-Agent 作為審計(jì)線索創(chuàng)建或恢復(fù)恢復(fù)會(huì)話若是新建會(huì)話異步發(fā)送恢復(fù)啟動(dòng)通知郵件阻塞與刪除BlockRecovery/DeleteKit阻塞僅取消當(dāng)前 WAITING/READY 狀態(tài)的活躍會(huì)話kit 本身仍可用刪除會(huì)軟刪除 kit同時(shí)阻塞待處理的活躍恢復(fù)會(huì)話郵件通知恢復(fù)啟動(dòng)和完成時(shí)服務(wù)端會(huì)發(fā)送郵件參見(jiàn) email.go恢復(fù)啟動(dòng)主題Legacy Kit recovery initiated發(fā)送至 kit 所有者郵箱包含恢復(fù)延遲標(biāo)簽和受益方郵箱若有恢復(fù)完成主題Legacy Kit recovery completed恢復(fù)延遲標(biāo)簽的映射關(guān)系func recoveryDelayLabel(hours int32) string { switch hours { case 0: return immediately case 24: return 1 day default: return fmt.Sprintf(%d days, hours/24) } }創(chuàng)建 Legacy Kit當(dāng)前 Legacy Kit 的創(chuàng)建和管理僅在Ente Locker 移動(dòng)端提供。操作步驟移動(dòng)端打開(kāi) Ente Locker打開(kāi) Locker 菜單點(diǎn)擊Legacy進(jìn)入Legacy kits點(diǎn)擊Create legacy kit為 3 張恢復(fù)單分別命名選擇恢復(fù)等待時(shí)間按提示完成身份驗(yàn)證下載、打印或分享生成的恢復(fù)單 PDF每張恢復(fù)單應(yīng)分開(kāi)存放。建議的物理分發(fā)策略一張放在家中一張給信任的家人一張給律師或放在其他安全位置。恢復(fù)等待時(shí)間創(chuàng)建每個(gè) Legacy Kit 時(shí)需要從以下選項(xiàng)中選擇恢復(fù)等待時(shí)間等待時(shí)間服務(wù)端編碼值小時(shí)適用場(chǎng)景立即0自救恢復(fù)但幾乎無(wú)時(shí)間阻止未授權(quán)嘗試1 天24較輕量級(jí)的延遲保護(hù)7 天默認(rèn)168兼顧可用性與安全的平衡選擇15 天360更強(qiáng)的未授權(quán)恢復(fù)防護(hù)30 天720遺產(chǎn)繼承場(chǎng)景授權(quán)者有充足時(shí)間干預(yù)等待時(shí)間在恢復(fù)啟動(dòng)時(shí)固定下來(lái)。之后更改等待時(shí)間僅影響未來(lái)的恢復(fù)嘗試且不能在已有活躍恢復(fù)會(huì)話時(shí)更改。使用 Legacy Kit 恢復(fù)帳戶協(xié)助恢復(fù)者不需要安裝 Ente 應(yīng)用也不需要擁有 Ente 帳戶。他們只需要任意 2 張恢復(fù)單和一臺(tái)可訪問(wèn)網(wǎng)絡(luò)的瀏覽器。操作步驟Web 端打開(kāi)恢復(fù)單上印制的恢復(fù) URL。Ente Cloud 用戶使用的是legacy.ente.com自托管部署則使用印在恢復(fù)單上的自定義 URL上傳任意 2 張來(lái)自同一 kit 的恢復(fù)單按瀏覽器中的恢復(fù)流程操作等待恢復(fù)就緒等待時(shí)間到后狀態(tài)變?yōu)?READY為被恢復(fù)的帳戶設(shè)置新密碼Web 前端的掃描邏輯Web 前端恢復(fù)應(yīng)用位于 web/apps/legacy其掃描模塊scan.ts支持多種恢復(fù)單輸入格式圖片文件JPEG/PNG/GIF/WebP/BMP/HEIC 等自動(dòng)解析圖像尺寸分多個(gè)裁剪策略嘗試解碼 QR 碼PDF 文件首先嘗試從 PDF 元數(shù)據(jù)中提取恢復(fù)碼失敗則渲染頁(yè)面后解碼 QR純文本文件直接讀取文本內(nèi)容PDF 可視文本通過(guò)pdfjs-dist提取 PDF 文本層搜索 base64url 編碼的 JSON 載荷PDF 元數(shù)據(jù)提取pdf-payload.ts支持兩種標(biāo)記前綴ente-legacy-kit-share-v1:——單張恢復(fù)單ente-legacy-kit-shares-v1:——包含多張恢復(fù)單的 bundle分片數(shù)據(jù)的解析與校驗(yàn)share.ts使用 Zod Schema 嚴(yán)格驗(yàn)證每個(gè)字段export const LegacyKitShareSchema z.object({ pv: z.literal(1), // payload version kv: z.literal(1), // key version k: z.string().min(1), // kit ID (用于匹配同組卡片) i: z.number().int().min(1).max(3), // 分片索引 s: z.string().min(1) .refine((v) base64ByteLength(v) 32), // 32 字節(jié)分片數(shù)據(jù) c: z.string().min(1) .refine((v) base64ByteLength(v) 8), // 8 字節(jié)挑戰(zhàn)碼 n: z.string().min(1), // human-readable sheet name });組合兩張恢復(fù)單時(shí)會(huì)檢查它們的kkit ID是否一致、i分片索引是否不同確保來(lái)自同一 kit 且使用不同的兩張恢復(fù)單。管理 Legacy Kit查看與管理移動(dòng)端打開(kāi) Ente Locker打開(kāi) Locker 菜單點(diǎn)擊Legacy進(jìn)入Legacy kits點(diǎn)擊某個(gè) kit從 kit 詳情頁(yè)可以重新下載恢復(fù)單 PDF更改恢復(fù)等待時(shí)間無(wú)活躍恢復(fù)時(shí)刪除 kit阻塞正在進(jìn)行的恢復(fù)嘗試數(shù)量限制每個(gè) Ente 帳戶最多可創(chuàng)建5 個(gè)未刪除的 Legacy Kit。已刪除的 kit 不再計(jì)入此限制。每個(gè) kit 同一時(shí)刻只允許一個(gè)活躍的恢復(fù)會(huì)話。阻塞與刪除的行為差異操作對(duì)當(dāng)前恢復(fù)的影響對(duì) kit 未來(lái)使用的影響B(tài)lock recovery取消當(dāng)前活躍的恢復(fù)會(huì)話kit 仍可用擁有 2 張恢復(fù)單者可重新發(fā)起Delete kit阻塞待處理的恢復(fù)會(huì)話永久禁用該 kit 的恢復(fù)單不可恢復(fù)通知機(jī)制恢復(fù)啟動(dòng)時(shí) Ente 會(huì)向 kit 所有者發(fā)送郵件通知恢復(fù)完成時(shí)發(fā)送郵件通知目前延遲恢復(fù)變?yōu)榫途w狀態(tài)時(shí)不會(huì)單獨(dú)發(fā)送通知安全設(shè)計(jì)要點(diǎn)從官方安全說(shuō)明和源碼實(shí)現(xiàn)中可以總結(jié)以下安全設(shè)計(jì)零知識(shí)證明服務(wù)器永遠(yuǎn)不會(huì)看到 kit secret、恢復(fù)單內(nèi)容或解密后的恢復(fù)密鑰挑戰(zhàn)-應(yīng)答認(rèn)證恢復(fù)發(fā)起前需要先請(qǐng)求挑戰(zhàn)CreateChallenge生成 32 字節(jié)隨機(jī)數(shù)使用 kit 的 auth public key 密封后返回客戶端客戶端需解開(kāi)挑戰(zhàn)才能打開(kāi)恢復(fù)會(huì)話OpenRecovery服務(wù)端僅存哈希挑戰(zhàn)碼僅存儲(chǔ)其 SHA-256 哈希challenge_hash恢復(fù)會(huì)話令牌僅存儲(chǔ)其哈希token_hash原始值不在服務(wù)端留存加密存儲(chǔ)恢復(fù)單名稱和分片載荷通過(guò)EncryptedOwnerBlob加密后僅所有者可讀恢復(fù)密鑰通過(guò)EncryptedRecoveryBlob加密存儲(chǔ)2-of-3 閾值任何單張恢復(fù)單均無(wú)法泄露恢復(fù)信息恢復(fù)單不含恢復(fù)密鑰恢復(fù)單僅用于重構(gòu) kit secret恢復(fù)密鑰只在本地組合分片且等待期結(jié)束后才解密審計(jì)線索initiatorsJSONB 字段記錄了發(fā)起恢復(fù)時(shí)的 IP 地址、User-Agent 和使用的分片索引但這些僅作為參考線索不構(gòu)成身份證明帳戶恢復(fù)完成時(shí)清理 2FA恢復(fù)密碼重置流程會(huì)自動(dòng)移除兩步認(rèn)證和 passkey確保恢復(fù)后可使用新密碼訪問(wèn)已知設(shè)計(jì)限制Legacy Kits 目前不支持昵稱或Verify kit流程kit 的標(biāo)識(shí)基于 3 張恢復(fù)單的名稱如果用戶的帳戶恢復(fù)密鑰發(fā)生變化現(xiàn)有 kit 在未重新創(chuàng)建或重新包裹密鑰的情況下可能失效未來(lái)版本計(jì)劃支持Legacy Kits不創(chuàng)建受信任聯(lián)系人關(guān)系也不會(huì)暫停非活躍帳戶刪除流程總結(jié)Ente Legacy Kit 將經(jīng)典的 Shamir 2-of-3 秘密分享方案與一套完整的服務(wù)端協(xié)調(diào)流程挑戰(zhàn)-應(yīng)答認(rèn)證、可配置等待期、通知與阻塞機(jī)制相結(jié)合提供了兼顧密碼學(xué)安全與實(shí)用性的數(shù)字遺產(chǎn)恢復(fù)方案。核心設(shè)計(jì)理念是物理分發(fā)、線上可控——密鑰分片離線存放在恢復(fù)單上恢復(fù)流程則通過(guò)服務(wù)器協(xié)調(diào)實(shí)現(xiàn)可撤銷和可審計(jì)。配合移動(dòng)端創(chuàng)建和 Web 端恢復(fù)的跨平臺(tái)體驗(yàn)Legacy Kit 為用戶的 Ente 帳戶提供了一層不依賴單一信任實(shí)體的災(zāi)難恢復(fù)保障。相關(guān)資源Legacy 功能總覽Legacy FAQ2of3 獨(dú)立應(yīng)用使用指南2of3 技術(shù)原理詳解服務(wù)端 Legacy Kit 控制器源碼數(shù)據(jù)庫(kù)遷移腳本W(wǎng)eb 端恢復(fù)應(yīng)用移動(dòng)端 Legacy Kit 服務(wù)【免費(fèi)下載鏈接】ente End-to-end encrypted cloud for everything.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/en/ente創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考