Qarait/EraseKey

GitHub: Qarait/EraseKey

EraseKey 探索了信封加密下的密码学删除问题,通过独立于数据库的签名删除凭证日志解决陈旧备份恢复导致已删除密钥复活的边界情况。

Stars: 0 | Forks: 0

# EraseKey EraseKey 是一个小型 FastAPI 项目,旨在探讨密码学删除中一个棘手的边界情况:旧的数据库快照可能会同时恢复加密数据和解读它所需的 wrapped key。 该服务使用基于主体的独立数据密钥来加密记录。完成删除操作会移除这些 wrapped key,并在应用数据库之外写入一份已签名的凭证。如果之后陈旧的数据库状态导致密钥重新出现,EraseKey 可以利用该凭证找到并再次销毁它。API 在启动后、开始处理请求之前,会验证并核对该凭证日志。 ## 为什么会有这个项目 从生产数据库中删除一行,并不能保证从备份、副本或导出的副本中也被删除。信封加密提供了一种不同的控制方式:保留密文,但移除使其可读的密钥。 但这仍然会留下恢复问题。如果 wrapped key 和删除记录存放在同一个数据库中,回滚数据库就会恢复密钥并丢失删除记录。EraseKey 维护着一个独立的删除凭证日志,以将删除意图跨越这一边界保留下来。 ## 已实现的功能 - 租户、数据集和主体范围的记录 - AES-256-GCM 信封加密 - Mock 和 AWS KMS 密钥提供程序 - 待处理、计划中、已取消、已阻止和已完成的删除状态 - 针对破坏性操作的法律保留和增强验证 - 哈希链审计事件 - 带有密钥主体引用的签名删除凭证 - 幂等的凭证创建,确保安全地重试完成操作 - 对计划中和已删除主体的写入阻止 - 对复活密钥的读取时凭证强制校验 - 对陈旧 SQLite 恢复所复活密钥的启动核对 - 用于陈旧恢复场景的本地 Restore Lab 仪表板 ## Restore Lab 预览 ![EraseKey Restore Lab 仪表板](https://raw.githubusercontent.com/Qarait/EraseKey/master/docs/assets/erasekey-restore-lab.png) 这里提供了一个简短的运行动画演示:[`docs/assets/erasekey-restore-lab.gif`](docs/assets/erasekey-restore-lab.gif)。 ## 恢复流程的工作原理 ``` record -> subject data key -> wrapped by KMS provider | deletion finalized -----------+-> wrapped key removed +-> signed receipt journal stale database restore -> wrapped key returns -> receipt still exists -> reconciliation removes the key again ``` ## 快速开始 ``` cd mvp/erasekey python -m venv .venv # Linux/macOS source .venv/bin/activate # Windows PowerShell .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt -r requirements-dev.txt uvicorn app.main:app --reload ``` 打开 `http://127.0.0.1:8000/docs` 查看 FastAPI 生成的 API 文档。 打开 `http://127.0.0.1:8000/dashboard` 体验交互式 Restore Lab。 ## 公开演示模式 若要使用托管的沙箱环境,请使用 `ERASEKEY_PUBLIC_DEMO_MODE=true` 运行。公开演示模式仅开放以下接口: - `GET /` - `GET /dashboard` - `GET /healthz` - `GET /static/*` - `POST /demo/restore-scenario` 它会拦截原始 API 和 `/docs`,添加基本的浏览器安全标头,并对演示场景的运行进行限流。包含的 `Dockerfile` 即在此模式下启动,使用 mock KMS、临时容器存储以及非 root 用户。 内置的限流是在内存中进行的,旨在作为本地的安全防线。如果在生产环境中公开部署,请额外添加提供商层面或代理层面的限流。 ``` docker build -t erasekey-demo . docker run --rm -p 8000:8000 erasekey-demo ``` 运行测试: ``` python -m pytest -q tests ``` ## 项目地图 - [`mvp/erasekey/README.md`](mvp/erasekey/README.md):配置与删除工作流 - [`mvp/erasekey/docs/architecture.md`](mvp/erasekey/docs/architecture.md):架构与恢复模型 - [`mvp/erasekey/docs/api-spec.md`](mvp/erasekey/docs/api-spec.md):endpoint 概览 - [`docs/adrs`](docs/adrs):设计决策与限制 ## 适用范围 这是一个工程设计演示,而非生产级别的隐私平台。该 API 没有多租户身份验证,mock 的增强验证器并非真正的 WebAuthn,而且 SQLite 加上本地凭证文件无法提供分布式持久性。有关剩余的信任和故障边界,请参阅架构说明。
标签:AV绕过, FastAPI, 信封加密, 安全实验, 密码学删除, 请求拦截, 逆向工具