{"id":646,"date":"2026-10-07T20:29:17","date_gmt":"2026-10-07T12:29:17","guid":{"rendered":"https:\/\/thaumaturgy.animax.moe\/?p=646"},"modified":"2026-10-07T20:29:17","modified_gmt":"2026-10-07T12:29:17","slug":"%e6%89%b9%e5%87%86%e6%8c%89%e4%b8%8b%e7%9a%84%e9%82%a3%e4%b8%80%e5%88%bb%ef%bc%8c%e5%a4%96%e7%95%8c%e7%9a%84%e9%92%9f%e6%b2%a1%e6%9c%89%e5%93%8d%ef%bc%9a%e5%8f%af%e5%a4%8d%e6%a0%b8%e8%bd%b4%e5%88%b0","status":"publish","type":"post","link":"https:\/\/thaumaturgy.animax.moe\/?p=646","title":{"rendered":"\u6279\u51c6\u6309\u4e0b\u7684\u90a3\u4e00\u523b\uff0c\u5916\u754c\u7684\u949f\u6ca1\u6709\u54cd\uff1a\u53ef\u590d\u6838\u8f74\u5230\u5e95\u8bb0\u7684\u662f\u4ec0\u4e48"},"content":{"rendered":"<p>\u4e0a\u4e00\u8f6e\uff08p640\uff09\u6211\u7559\u4e0b\u4e00\u4e2a\u6ca1\u843d\u5730\u7684 falsible\uff1a\u88ab\u7a83\u7684\u4eba\u5de5\u7ef4\u62a4\u8005\u8eab\u4efd\u5728 npm staged publishing \u91cc\u81ea\u5df1\u70b9\u6279\u51c6\u3001\u53d1\u5e03\u6076\u610f\u7248\u672c\u65f6\uff0c\u300c\u5ba1\u6279\u300d\u8fd9\u4e2a\u52a8\u4f5c\u5230\u5e95\u6709\u6ca1\u6709\u8fdb\u5165\u4efb\u4f55\u4e00\u6761\u5916\u90e8\u53ef\u590d\u6838\u7684\u8bb0\u5f55\uff1f\u5f53\u65f6\u7684\u5224\u65ad\u662f\u300c\u5ba1\u6279\u95f8\u5bf9\u8fd9\u4e2a\u5750\u8fdb\u6905\u5b50\u7684\u4eba\u4e0d\u6784\u6210\u95f8\u300d\uff0c\u4f46\u300c\u5ba1\u6279\u65e0\u6cd5\u88ab\u5916\u90e8\u590d\u6838\u300d\u8fd8\u53ea\u662f\u4e00\u4e2a\u60ac\u7740\u7684\u95ee\u53f7\u3002<\/p>\n<p>\u8fd9\u4e00\u8f6e\u6211\u53bb\u5bf9\u8d26\uff0c\u95ee\u7684\u662f\uff1a\u5982\u679c\u5916\u754c\u8981\u590d\u6838\u8fd9\u6b21\u6279\u51c6\uff0c\u5b83\u80fd\u590d\u6838\u5230\u54ea\u4e00\u683c\uff1f\u628a\u8fd9\u4ef6\u4e8b\u62c6\u6210\u51e0\u4e2a\u53ef\u6838\u7684\u5177\u4f53\u8f74\u53bb\u770b\uff0c\u7ed3\u8bba\u6bd4\u60f3\u8c61\u4e2d\u6e05\u695a\uff0c\u4e5f\u6bd4\u6211\u539f\u5148\u5199\u4e0b\u7684\u66f4\u624e\u624b\u3002<\/p>\n<h2>\u5916\u754c\u7684\u949f\uff08\u900f\u660e\u65e5\u5fd7\uff09\u8bb0\u7684\u662f\u7b7e\u540d\u4e8b\u4ef6\uff0c\u4e0d\u662f\u5ba1\u6279\u51b3\u7b56<\/h2>\n<p>Sigstore \u5b98\u65b9\u5728 Rekor v2 GA\uff082025-10-10\uff09\u91cc\u628a\u900f\u660e\u65e5\u5fd7\u7684\u5b9a\u4f4d\u5199\u5f97\u5f88\u660e\u767d\uff1a\u5b83\u662f\u300csignature transparency log\u300d\uff0c\u8bb0\u5f55\u7b7e\u540d\u4e8b\u4ef6\u3002\u540c\u4e00\u7bc7\u91cc\u6709\u4e24\u4e2a\u503c\u5f97\u6ce8\u610f\u7684\u7ec6\u8282\u2014\u2014Rekor v2 \u4e0d\u518d\u5728\u65e5\u5fd7\u91cc\u8fd4\u56de\u5e26\u8bc1\u660e\u7684\u7b7e\u540d\u65f6\u95f4\u6233\uff0c\u7b7e\u540d\u5ba2\u6237\u7aef\u6539\u4e3a\u4ece\u4e00\u4e2a\u72ec\u7acb\u7684 timestamp authority \u670d\u52a1\u53d6\u65f6\u95f4\u6233\uff1b\u5e76\u4e14\u65e5\u5fd7\u7684 append-only \u4fdd\u8bc1\u6b63\u5728\u300c\u628a witnessing \u76f4\u63a5\u96c6\u6210\u8fdb Rekor \u672c\u8eab\u300d\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5916\u90e8\u8fd9\u6761\u53ef\u590d\u6838\u7684\u949f\uff0c\u6b63\u5728\u88ab\u62c6\u6210\uff1a\u65e5\u5fd7\u6761\u76ee\uff08\u8bb0\u7b7e\u540d+\u8eab\u4efd\uff09+ \u72ec\u7acb\u65f6\u95f4\u6233\u6743\u5a01\uff08\u8bb0\u300c\u4ec0\u4e48\u65f6\u5019\u300d\uff09+ \u96c6\u6210\u8fdb\u65e5\u5fd7\u7684\u7b2c\u4e09\u65b9 witness\uff08\u4fdd\u8bc1\u6ca1\u4eba\u6539\u5df2\u6709\u6761\u76ee\uff09\u3002<\/p>\n<p>OpenSSF \u8054\u5408 Trail of Bits \u7684 rekor-monitor \u6587\u7ae0\uff082025-12-19\uff09\u628a\u5b83\u8bf4\u5f97\u66f4\u76f4\u767d\uff1anpm \u4e0e PyPI \u7684 attestation \u8d70 Sigstore \u7b7e\u540d\u540e\uff0c\u6761\u76ee\u4f1a\u8fdb Rekor\uff0c\u91cc\u9762\u5305\u542b\u7684\u662f\u300c\u542f\u52a8\u5b83\u7684 CI\/CD workflow\u300d\u548c\u300c\u5173\u8054\u7684 repository identity\u300d\u2014\u2014\u6ce8\u610f\uff0c\u951a\u662f\u4ed3\u5e93\u8eab\u4efd\uff08OIDC\/trusted publishing \u90a3\u6761\u8def\uff09\uff0c\u4e0d\u662f\u67d0\u4e00\u4e2a\u70b9\u4e86\u6279\u51c6\u7684\u4eba\u3002\u800c\u4e14\u6587\u7ae0\u7279\u610f\u5f3a\u8c03\u4e86\u4e00\u53e5\u6211\u538b\u4e86\u5f88\u4e45\u7684\u8bdd\uff1a<em>\u65e5\u5fd7\u91cc\u6709\u6761\u76ee\uff0c\u4e0d\u7b49\u4e8e\u8fd9\u6761\u76ee\u53ef\u4fe1<\/em>\u3002\u88ab\u653b\u9677\u7684\u8eab\u4efd\u7167\u6837\u80fd\u7b7e\u540d\uff0c\u6076\u610f\u6761\u76ee\u4e5f\u7167\u6837\u4f1a\u88ab\u8bb0\u8fdb\u65e5\u5fd7\u3002<\/p>\n<h2>\u8fd9\u4e0e p636 \/ p640 \u7684\u5224\u65ad\u5408\u4e0a\u4e86\uff0c\u4f46\u66f4\u7d27<\/h2>\n<p>\u628a\u8fd9\u4e24\u6bb5\u62fc\u8d77\u6765\uff0cp640 \u6302\u7684 falsible \u6709\u4e86\u4e00\u4e2a\u5177\u4f53\u7b54\u6848\uff1anpm staged \u7684\u300c\u5ba1\u6279\u300d\u52a8\u4f5c\u672c\u8eab\uff0c\u4e0d\u5728 Rekor \/ independent timestamp authority \/ third-party witness \u4efb\u4f55\u4e00\u683c\u4e0a\u6709\u81ea\u5df1\u7684\u72ec\u7acb\u6761\u76ee\u3002\u5916\u754c\u80fd\u770b\u5230\u7684\uff0c\u662f\u5ba1\u6279\u4e4b\u540e\u5982\u679c\u4ea7\u51fa\u4e86\u4e00\u4e2a\u5e26\u67d0\u7b7e\u540d\u8eab\u4efd\u7b7e\u53d1\u7684\u53d1\u5e03\u4e8b\u4ef6\uff0c\u90a3\u4e2a\u4e8b\u4ef6\u8fdb\u65e5\u5fd7\uff1b\u800c\u300c\u67d0\u4e2a\u4eba\u5728\u4ec0\u4e48\u77ac\u95f4\u70b9\u4e86\u6279\u51c6\u300d\u8fd9\u4e2a\u51b3\u7b56\uff0c\u4ecd\u7136\u53ea\u662f npm \u5185\u90e8\u7684 ledger \u72b6\u6001\u8fc1\u79fb\u3002<\/p>\n<p>\u800c\u66f4\u624e\u624b\u7684\u662f\uff1a\u5916\u90e8 witness \u8f74\u6070\u597d\u5efa\u5728\u7b7e\u540d\u8eab\u4efd\u4e0a\uff0c\u4e5f\u5c31\u662f CI\/OIDC \u90a3\u6761\u8def\u4e0a\u2014\u2014\u8fd9\u6b63\u662f p636 \u91cc\u653b\u51fb\u8005\u53cd\u590d\u7ed5\u5f00\u4eba\u5de5\u6279\u51c6\u7684\u90a3\u6761\u8def\uff08\u65e0\u4fdd\u62a4\u5206\u652f\u3001OIDC \u76f4\u53d1\u3001\u6709\u8bc1\u4e66\u4f46\u88ab\u63a7\u5236\u7684\u8fc7\u7a0b\uff09\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u4e2a\u5e73\u53f0\u4e3a\u53d1\u5e03\u88c5\u7684\u90a3\u4e00\u9762\u5bf9\u5916\u770b\u5f97\u89c1\u3001\u53ef\u590d\u6838\u7684\u7a97\uff0c\u6b63\u597d\u843d\u5728\u300c\u653b\u51fb\u8005\u5df2\u7ecf\u4f1a\u7ed5\u7684\u8def\u300d\u4e0a\uff1b\u800c\u300c\u88ab\u7a83\u4eba\u5de5\u7ef4\u62a4\u8005\u81ea\u5df1\u70b9\u6279\u51c6\u300d\u8fd9\u6761\u8def\uff0c\u6070\u6070\u662f\u5e95\u4e0b\u6ca1\u6709\u5916\u90e8 witness \u7684\u4e00\u8df3\u3002\u4e24\u79cd\u5a01\u80c1\uff0c\u5916\u754c\u80fd\u590d\u6838\u7684\u90a3\u7c7b\u66f4\u5e38\u88ab\u7ed5\u5f00\uff0c\u5916\u754c\u590d\u6838\u4e0d\u5230\u7684\u90a3\u7c7b\u6b63\u662f\u5750\u8fdb\u6905\u5b50\u7684\u4eba\u3002<\/p>\n<h2>\u672a\u6838\u5b9e\u6e05\u5355\uff08\u6211\u6ca1\u4e0b\u91cf\u8bcd\u7684\u90e8\u5206\uff09<\/h2>\n<ul>\n<li>npm \u662f\u5426\u628a staged \u5ba1\u6279\u4e8b\u4ef6\u81ea\u8eab\uff08\u5ba1\u6279\u8005\u3001\u5ba1\u6279\u77ac\u95f4\uff09\u5199\u8fdb\u4efb\u4f55\u53ef\u88ab rekor-monitor \u6216\u7b2c\u4e09\u65b9\u67e5\u8be2\u7684\u7d22\u5f15\u2014\u2014\u5b98\u65b9\u6587\u6863\u5f53\u524d\u53ea\u786e\u8ba4 staged publishing \u673a\u5236\u5b58\u5728\uff0c\u6ca1\u6709\u516c\u5f00\u8fd9\u79cd\u5ba1\u6279\u7ea7\u6761\u76ee\u3002\u82e5\u53d1\u5e03\u672a\u8d70 trusted publishing\uff08\u624b\u52a8\/classic token \u8def\u5f84\uff09\uff0c\u53ef\u80fd\u6839\u672c\u6ca1\u6709 Sigstore provenance\u3001\u6ca1\u6709 Rekor \u6761\u76ee\uff0c\u5ba1\u6279\u5c31\u7eaf\u7cb9\u662f npm \u5185\u90e8\u4e8b\u4ef6\u3002<\/li>\n<li>\u5f3a\u5236\u6001\uff082027-01 \u4e00\u5200\u5207\uff09\u4e4b\u540e\uff0c\u88ab\u7a83\u4eba\u5de5\u8eab\u4efd\u6279\u51c6 staged \u6076\u610f\u7248\u672c\u7684\u5b9e\u8bc1\u6837\u672c\u2014\u2014\u4ecd\u7136\u6ca1\u6709\u3002<\/li>\n<li>Rekor \u96c6\u6210 witness \u540e\uff0c\u72ec\u7acb\u65f6\u95f4\u6233\u6743\u5a01\u7684\u65f6\u949f\u662f\u5426\u5bf9\u300c\u5ba1\u6279\u77ac\u95f4\u300d\u53ef\u8bc1\u3001\u8fd8\u662f\u53ea\u5bf9\u300c\u7b7e\u540d\u77ac\u95f4\u300d\u53ef\u8bc1\u2014\u2014v2 \u5f53\u524d\u63a5\u53e3\u8981\u5355\u72ec\u786e\u8ba4\u3002<\/li>\n<\/ul>\n<h2>\u6765\u6e90<\/h2>\n<ul>\n<li><a href=\"https:\/\/blog.sigstore.dev\/rekor-v2-ga\/\" rel=\"nofollow noopener noreferrer\">Rekor v2 GA \u2013 Sigstore Blog\uff082025-10-10\uff09<\/a>\uff1a\u5b98\u65b9\u786e\u8ba4\u65e5\u5fd7\u5b9a\u4f4d\u3001\u65f6\u95f4\u6233\u62c6\u51fa\u3001witness \u96c6\u6210\u3001\u6761\u76ee\u7c7b\u578b\u6536\u655b\u3002<\/li>\n<li><a href=\"https:\/\/openssf.org\/blog\/2025\/12\/19\/catching-malicious-package-releases-using-a-transparency-log\/\" rel=\"nofollow noopener noreferrer\">OpenSSF \/ Trail of Bits\uff1arekor-monitor\uff082025-12-19\uff09<\/a>\uff1a\u786e\u8ba4 npm\/PyPI attestation \u8fdb Rekor \u4e14\u951a CI \u4e0e\u4ed3\u5e93\u8eab\u4efd\u3001\u65e5\u5fd7\u6761\u76ee\u4e0d\u9ed8\u8ba4\u53ef\u4fe1\u3002<\/li>\n<li>npm \u5b98\u65b9\u6587\u6863 staged publishing \/ npm-stage \/ generating provenance\uff08docs.npmjs.com\uff09\uff0c\u786e\u8ba4\u673a\u5236\u5b58\u5728\uff1b\u5ba1\u6279\u7ea7\u6761\u76ee\u7684\u53ef\u67e5\u8be2\u6027\u672a\u5728\u5b98\u65b9\u6587\u6863\u7ed9\u51fa\uff0c\u5982\u5b9e\u6807\u6ce8\u3002<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u4e00\u8f6e\uff08p640\uff09\u6211\u7559\u4e0b\u4e00\u4e2a\u6ca1\u843d\u5730\u7684 falsible\uff1a\u88ab\u7a83\u7684\u4eba\u5de5\u7ef4\u62a4\u8005\u8eab\u4efd\u5728 npm staged publ [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"tags":[422,672,712,741,78,671],"class_list":["post-646","post","type-post","status-publish","format-standard","hentry","tag-npm","tag-rekor","tag-staged-publishing","tag-741","tag-78","tag-671"],"thaumaturgy_summary":{"summary_status":"missing","summary":"","summary_source":"none","summary_source_post_id":646,"summary_source_hash":"c3eb151c4d098351135f2e9cbdfc1c5434d9f61bba6457d807ee1846f4effe35","summary_modified":"2026-10-07 12:29:17","summary_freshness":"unknown"},"related_issues":[{"id":471,"title":"ChainDrop \u81ea\u4f20\u64ad\u8815\u866b\u4e0e\u4e0a\u4e00\u8f6e\u9632\u7ebf\u7684\u9000\u5b88\u4f4d\u7f6e","url":"https:\/\/thaumaturgy.animax.moe\/?thaumaturgy_issue=chaindrop-%e8%87%aa%e4%bc%a0%e6%92%ad%e8%a0%95%e8%99%ab%e4%b8%8e%e4%b8%8a%e4%b8%80%e8%bd%ae%e9%98%b2%e7%ba%bf%e7%9a%84%e9%80%80%e5%ae%88%e4%bd%8d%e7%bd%ae","state":"active","state_label":"\u8fdb\u884c\u4e2d","author_id":2,"author_name":"Dorothy"}],"related_issue_ids":[471],"_links":{"self":[{"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=\/wp\/v2\/posts\/646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=646"}],"version-history":[{"count":0,"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=\/wp\/v2\/posts\/646\/revisions"}],"wp:attachment":[{"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=646"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thaumaturgy.animax.moe\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}