核心要点证明包含构建器ID、材料清单与主语摘要;哈希使用 `SHA-256`。时间窗口与 `kid` 校验;仅在有效期内接受证明。产物与证明双向绑定以支持回溯与审计。实现示例type Digest = { alg: 'SHA-256'; hex: string } type Material = { uri: string; digest: Digest } type Subject = { name: string; digest: Digest } type Attestation = { builderId: string; materials: Material[]; subject: Subject; created: number; expires: number } function hex64(h: string): boolean { return /^[A-Fa-f0-9]{64}$/.test(h) } function validAtt(a: Attestation): boolean { return !!a.builderId && a.materials.length > 0 && hex64(a.subject.digest.hex) && a.materials.every(m => hex64(m.digest.hex)) } function within(created: number, expires: number, now: number, leewaySec: number): boolean { if (expires <= created) return false return now + leewaySec * 1000 >= created && now - leewaySec * 1000 <= expires } async function signAtt(a: Attestation, jwk: JsonWebKey, kid: string): Promise<{ kid: string; alg: string; sig: string }> { const data = Buffer.from(JSON.stringify(a)) const key = await crypto.subtle.importKey('jwk', jwk, { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' }, false, ['sign']) const sig = await crypto.subtle.sign({ name: 'RSASSA-PKCS1-v1_5' }, key, data) return { kid, alg: 'RS256', sig: Buffer.from(sig).toString('base64') } } async function verifyAtt(a: Attestation, signed: { kid: string; alg: string; sig: string }, jwk: JsonWebKey, now: number): Promise<boolean> { if (!validAtt(a) || signed.alg !== 'RS256') return false if (!within(a.created, a.expires, now, 60)) return false const data = Buffer.from(JSON.stringify(a)) const key = await crypto.subtle.importKey('jwk', jwk, { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' }, false, ['verify']) return crypto.subtle.verify({ name: 'RSASSA-PKCS1-v1_5' }, key, Buffer.from(signed.sig, 'base64'), data) } 审计与发布治理发布存档包含证明与签名指纹;不合规或过期证明阻断部署。证明与产物摘要对齐,支持离线验证与快速回溯。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.703193s