ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ente Legacy Kit:基于 Shamir 秘密共享的物理式可撤销帐户恢复方案

Ente Legacy Kit:基于 Shamir 秘密共享的物理式可撤销帐户恢复方案 Ente Legacy Kit基于 Shamir 秘密共享的物理式可撤销帐户恢复方案【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/enteLegacy Kits遗产恢复包是 Ente Locker 提供的一种物理化数字遗产与灾难恢复方案。它利用 Shamir 2-of-3 秘密共享将帐户恢复密钥拆分成 3 张独立恢复单任意 2 张即可在浏览器中启动受控恢复流程——而单一恢复单完全不足以恢复任何信息。本文将从用户操作、底层密码学机制到服务端实现完整解读 Legacy Kit 的设计与使用。什么是 Legacy KitLegacy Kit 是一组 3 张物理恢复单recovery sheet用于 Ente 帐户的继承、灾难恢复或自救。当用户丢失密码和恢复密钥时拥有任意 2 张恢复单的协助者可以通过浏览器启动帐户恢复。与常规的恢复密钥不同Legacy Kit 的恢复单不包含帐户恢复密钥也无法直接登录帐户。恢复单仅携带一个独立的kit secret分片必须在浏览器中组合 2 张恢复单后本地重构该 secret再通过服务器端验证才能进入受控恢复流程。底层密码学Shamir 的 2-of-3 秘密共享Legacy Kit 的核心数学基础是 1979 年提出的 Shamir 秘密共享方案。Ente 选用最简单且实用的变体将一个秘密拆分为 3 份任意 2 份可重构原始秘密仅 1 份则完全无法透露任何信息除字节长度外。几何直观理解想象一条穿过 y 轴的直线y 轴截距就是你的秘密斜率是一个随机数使用后丢弃在直线上选 3 个不同的 x 值例如 x1, 2, 3计算对应的 y 值每个 (x, y) 对就是一个分片拥有任意 1 个分片直线上一个点可以画出无限条经过该点的直线无法确定 y 轴截距。拥有任意 2 个分片两个点则唯一确定一条过这两点的直线可以算出 y 轴截距——即秘密。GF(256) 有限域实现实际实现中Shamir 方案在有限域 GF(256) 上运算确保每个字节都是合法的域元素。Ente 的 2-of-3 方案按字节拆分秘密每个分片与原始秘密等长。对于每个秘密字节s生成一个均匀随机的字节r分片 1 存储sXORr分片 2 存储sXOR (r × 2 in GF(256))分片 3 存储sXOR (r × 3 in GF(256))GF(256) 乘法使用标准 AES 多项式 (0x11b)。任意 2 个分片加上其分片编号x 值 1, 2, 3即可恢复每个字节的s。单独一个分片等价于sXOR 某个随机字节与随机数不可区分。相同的 2-of-3 数学方案也以独立 Web 应用 2of3 的形式提供任何文本型秘密均可使用无需 Ente 帐户。恢复单的数据格式每张恢复单携带一个分片编码为短文本码同一张卡片上也以 QR 码形式呈现以便手机扫码。文本码格式如下2of3-AQEA...2of3-前缀帮助阅读者快速识别也让解析器能在粘贴文本时给出明确的错误提示。前缀之后是 base64url 编码的字节载荷由 10 字节头部加上分片数据组成字节偏移字段含义0版本号当前格式固定为2。恢复也支持版本 1 的卡片1卡片索引1、2或3。这是恢复时用于组合分片的x 值2–3长度秘密字节数的 16 位大端长度恢复时两个分片必须一致4–9随机 ID6 字节crypto.getRandomValues输出同一秘密的所有三张卡片共享此 ID10分片数据秘密字节的分片数据含 4 字节校验和。校验和同样受两卡片阈值保护恢复单上的随机 ID用于检测不匹配的卡片如果试图组合来自不同 kit 的卡片解析器会报错These two cards are from different sets。校验和则用于检测损坏的卡片组合后重新计算校验和并与恢复值比对不一致时提示These shares did not reconstruct a valid secret而不是静默返回乱码。服务端实现原理数据库模型Legacy Kit 在服务端使用三张 PostgreSQL 表参见数据库迁移脚本legacy_kit主表存储 kit 元数据。包含user_id、variant当前仅支持 2-of-3固定值 1、notice_period_in_hrs恢复等待时间、encrypted_recovery_blob用户恢复密钥的加密版本、auth_public_key用于挑战-应答的身份验证公钥、encrypted_owner_blob仅所有者可读的分片名称和载荷。支持软删除is_deleted布尔字段。legacy_kit_challenge存储挑战码哈希用于恢复发起前的证明。一个 kit 可同时存在多个未过期挑战不会相互覆盖。legacy_kit_recovery_session存储恢复会话。关键字段包括statusWAITING/READY/BLOCKED/CANCELLED/RECOVERED、effective_notice_period_in_hrs、wait_till等待截止微秒时间戳、initiatorsJSONB 格式的审计信息。同一 kit 同一时刻最多只能有一个 WAITING 或 READY 状态的活跃会话。控制器核心逻辑服务端控制器代码位于 server/pkg/controller/legacy_kit/controller.go主要流程如下创建 KitCreateKit校验NoticePeriodInHours是否在合法集合{0, 24, 168, 360, 720}中校验Variant是否为LegacyKitVariantTwoOfThree即 2-of-3校验AuthPublicKey是否为合法的密封盒公钥格式通过CreateKitWithLimit创建限制每个用户最多 5 个未删除 kit恢复等待时间validateNoticePeriodvar validNoticePeriods map[int]struct{}{ 0: {}, // 立即 24: {}, // 1天 168: {}, // 7天默认 360: {}, // 15天 720: {}, // 30天 }发起恢复OpenRecovery验证使用的分片索引UsedPartIndexes是否合法——长度为 2值在 1–3 范围内且不重复记录发起者的 IP、User-Agent 作为审计线索创建或恢复恢复会话若是新建会话异步发送恢复启动通知邮件阻塞与删除BlockRecovery/DeleteKit阻塞仅取消当前 WAITING/READY 状态的活跃会话kit 本身仍可用删除会软删除 kit同时阻塞待处理的活跃恢复会话邮件通知恢复启动和完成时服务端会发送邮件参见 email.go恢复启动主题Legacy Kit recovery initiated发送至 kit 所有者邮箱包含恢复延迟标签和受益方邮箱若有恢复完成主题Legacy Kit recovery completed恢复延迟标签的映射关系func recoveryDelayLabel(hours int32) string { switch hours { case 0: return immediately case 24: return 1 day default: return fmt.Sprintf(%d days, hours/24) } }创建 Legacy Kit当前 Legacy Kit 的创建和管理仅在Ente Locker 移动端提供。操作步骤移动端打开 Ente Locker打开 Locker 菜单点击Legacy进入Legacy kits点击Create legacy kit为 3 张恢复单分别命名选择恢复等待时间按提示完成身份验证下载、打印或分享生成的恢复单 PDF每张恢复单应分开存放。建议的物理分发策略一张放在家中一张给信任的家人一张给律师或放在其他安全位置。恢复等待时间创建每个 Legacy Kit 时需要从以下选项中选择恢复等待时间等待时间服务端编码值小时适用场景立即0自救恢复但几乎无时间阻止未授权尝试1 天24较轻量级的延迟保护7 天默认168兼顾可用性与安全的平衡选择15 天360更强的未授权恢复防护30 天720遗产继承场景授权者有充足时间干预等待时间在恢复启动时固定下来。之后更改等待时间仅影响未来的恢复尝试且不能在已有活跃恢复会话时更改。使用 Legacy Kit 恢复帐户协助恢复者不需要安装 Ente 应用也不需要拥有 Ente 帐户。他们只需要任意 2 张恢复单和一台可访问网络的浏览器。操作步骤Web 端打开恢复单上印制的恢复 URL。Ente Cloud 用户使用的是legacy.ente.com自托管部署则使用印在恢复单上的自定义 URL上传任意 2 张来自同一 kit 的恢复单按浏览器中的恢复流程操作等待恢复就绪等待时间到后状态变为 READY为被恢复的帐户设置新密码Web 前端的扫描逻辑Web 前端恢复应用位于 web/apps/legacy其扫描模块scan.ts支持多种恢复单输入格式图片文件JPEG/PNG/GIF/WebP/BMP/HEIC 等自动解析图像尺寸分多个裁剪策略尝试解码 QR 码PDF 文件首先尝试从 PDF 元数据中提取恢复码失败则渲染页面后解码 QR纯文本文件直接读取文本内容PDF 可视文本通过pdfjs-dist提取 PDF 文本层搜索 base64url 编码的 JSON 载荷PDF 元数据提取pdf-payload.ts支持两种标记前缀ente-legacy-kit-share-v1:——单张恢复单ente-legacy-kit-shares-v1:——包含多张恢复单的 bundle分片数据的解析与校验share.ts使用 Zod Schema 严格验证每个字段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 字节分片数据 c: z.string().min(1) .refine((v) base64ByteLength(v) 8), // 8 字节挑战码 n: z.string().min(1), // human-readable sheet name });组合两张恢复单时会检查它们的kkit ID是否一致、i分片索引是否不同确保来自同一 kit 且使用不同的两张恢复单。管理 Legacy Kit查看与管理移动端打开 Ente Locker打开 Locker 菜单点击Legacy进入Legacy kits点击某个 kit从 kit 详情页可以重新下载恢复单 PDF更改恢复等待时间无活跃恢复时删除 kit阻塞正在进行的恢复尝试数量限制每个 Ente 帐户最多可创建5 个未删除的 Legacy Kit。已删除的 kit 不再计入此限制。每个 kit 同一时刻只允许一个活跃的恢复会话。阻塞与删除的行为差异操作对当前恢复的影响对 kit 未来使用的影响Block recovery取消当前活跃的恢复会话kit 仍可用拥有 2 张恢复单者可重新发起Delete kit阻塞待处理的恢复会话永久禁用该 kit 的恢复单不可恢复通知机制恢复启动时 Ente 会向 kit 所有者发送邮件通知恢复完成时发送邮件通知目前延迟恢复变为就绪状态时不会单独发送通知安全设计要点从官方安全说明和源码实现中可以总结以下安全设计零知识证明服务器永远不会看到 kit secret、恢复单内容或解密后的恢复密钥挑战-应答认证恢复发起前需要先请求挑战CreateChallenge生成 32 字节随机数使用 kit 的 auth public key 密封后返回客户端客户端需解开挑战才能打开恢复会话OpenRecovery服务端仅存哈希挑战码仅存储其 SHA-256 哈希challenge_hash恢复会话令牌仅存储其哈希token_hash原始值不在服务端留存加密存储恢复单名称和分片载荷通过EncryptedOwnerBlob加密后仅所有者可读恢复密钥通过EncryptedRecoveryBlob加密存储2-of-3 阈值任何单张恢复单均无法泄露恢复信息恢复单不含恢复密钥恢复单仅用于重构 kit secret恢复密钥只在本地组合分片且等待期结束后才解密审计线索initiatorsJSONB 字段记录了发起恢复时的 IP 地址、User-Agent 和使用的分片索引但这些仅作为参考线索不构成身份证明帐户恢复完成时清理 2FA恢复密码重置流程会自动移除两步认证和 passkey确保恢复后可使用新密码访问已知设计限制Legacy Kits 目前不支持昵称或Verify kit流程kit 的标识基于 3 张恢复单的名称如果用户的帐户恢复密钥发生变化现有 kit 在未重新创建或重新包裹密钥的情况下可能失效未来版本计划支持Legacy Kits不创建受信任联系人关系也不会暂停非活跃帐户删除流程总结Ente Legacy Kit 将经典的 Shamir 2-of-3 秘密分享方案与一套完整的服务端协调流程挑战-应答认证、可配置等待期、通知与阻塞机制相结合提供了兼顾密码学安全与实用性的数字遗产恢复方案。核心设计理念是物理分发、线上可控——密钥分片离线存放在恢复单上恢复流程则通过服务器协调实现可撤销和可审计。配合移动端创建和 Web 端恢复的跨平台体验Legacy Kit 为用户的 Ente 帐户提供了一层不依赖单一信任实体的灾难恢复保障。相关资源Legacy 功能总览Legacy FAQ2of3 独立应用使用指南2of3 技术原理详解服务端 Legacy Kit 控制器源码数据库迁移脚本Web 端恢复应用移动端 Legacy Kit 服务【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表