# Dever 安全数据合同 ## Goal 让密码、令牌和部署密钥在 Dever 中具有编译器可识别的非观察边界,使大型应用能够存储私密 Model 字段、处理 Secret 和调用成熟密码算法,同时彻底移除环境变量配置入口。 ## Dependencies - 无前置子任务;这是 Port setting、认证 API 和 CMS 会话的基础。 ## Requirements - Model `private` 字段由所属 component/domain 的 App 拥有;生成的 Model CRUD 可以持久化,所属 App 可以访问,其他角色和领域不能访问。 - 含 private Model 字段的完整 Model 不能出现在 App 输入/输出、API/Job wire 输出、日志或跨领域类型观察面;App 使用显式 View record。 - 新增 opaque `Secret` 标量:不可 Render、比较、拼接、普通 JSON 编码、Map key、Model 存储或错误 payload。 - Secret 只允许进入批准 sink:Argon2id hash/verify、HMAC、常量时间验证、后续受控 Cookie/bearer setting sink;不提供通用 Secret-to-Text。 - 提供操作系统 CSPRNG token、Argon2id 密码 hash/verify、SHA-256、HMAC-SHA256 和常量时间字节/摘要验证;使用成熟依赖,不自实现密码算法。 - 密码哈希存储为 private Text,明文密码使用 Secret;错误不得包含明文、密钥或摘要原文。 - 删除 `dever.process.environment` 及对应 intrinsic/runtime bridge、文档和测试;不保留别名、fallback 或 deprecated 路径。 - `dever.process.arguments` 保留,但不得成为 setting override;配置来源规则由后续 Port/Job/API setting 合同继续约束。 - `.dever` 与 `.dever.md` 使用相同语法/语义;所有正式测试放根 `test/`。 ## Acceptance Criteria - [ ] 所属 App 可创建、更新、读取 private Model 字段,并能用其验证密码;其他角色/领域的字段访问在 check 阶段拒绝。 - [ ] App 签名、API response、日志和普通 JSON 对 private/Secret 的直接或嵌套泄漏均被静态拒绝。 - [ ] Secret 不能被渲染、比较、拼接、存入 Model/Map key 或放进普通错误 payload。 - [ ] secure token 两次调用不复用值且使用 OS CSPRNG;无随机源时返回显式安全失败。 - [ ] Argon2id hash/verify 验证成功、错误密码、损坏 hash 和资源上限;SHA/HMAC 与已知向量一致。 - [ ] 搜索和负向编译测试确认应用无法调用环境变量读取,仓库没有兼容入口。 - [ ] 既有普通 record private 字段、Model schema、API envelope、日志和 Markdown 回归保持通过。 ## Out Of Scope - 通用密钥管理服务、密钥轮换协议和硬件安全模块。 - JWT/OAuth、会话业务模型、RBAC 和登录 API;由后续 API/CMS 子任务实现。 - 数据库列加密;private 表示可见性,不声称静态或磁盘加密。