امضا و attestation تو رجیستریهای پکیج؛ کی چی رو چک میکنه؟
خلاصهٔ کاملتر
Andrew Nesbitt تو این مقاله رجیستریهای پکیج رو از نظر امضا و attestation بررسی کرده. امضا (signature) بایتهای فایل رو به یه کلید وصل میکنه. attestation یه بیانیهٔ امضاشدهست که میگه فایل از کجا اومده؛ مثلاً SLSA provenance اسم ریپو، commit و workflow بیلد رو ثبت میکنه. معمولاً این بیانیهها با فرمت in-toto ساخته و با Sigstore (یه سرویس امضای عمومی با کلیدهای کوتاهمدت) امضا میشن.
نویسنده میگه فرق اصلی با توزیعهای لینوکس اینه که Debian و Fedora خودشون پکیج رو از سورس میسازن و امضا میکنن. ولی تو رجیستریهای زبان، هر کسی با یه اکانت آپلود میکنه و فایل روی لپتاپ یا CI خودش ساخته شده. پس امضای رجیستری فقط نشون میده فایل همونیه که آپلود شده؛ نسخهای که با توکن دزدی منتشر شده هم همون امضا رو میگیره. تو حملهٔ Ultralytics در دسامبر 2024، همین attestationها کمک کرد آپلودهای با توکن لورفته از نسخههای workflow اصلی جدا بشن.
trusted publishing یعنی به جای توکن API بلندمدت، CI یه اعتبار کوتاهمدت OIDC میگیره. npm از آوریل 2023 provenance رو آورد و از جولای 2025 با trusted publishing بهصورت پیشفرض تولیدش میکنه. PyPI با PEP 740 از نوامبر 2024 attestation داره، RubyGems از نوامبر 2024 و JSR هم خودکار SLSA provenance ثبت میکنه. crates.io، NuGet، Hex و Open VSX هم trusted publishing اضافه کردن.
مشکل اصلی، چک کردنه. تو npm، PyPI و بقیه، وریفای یه مرحلهٔ جدا از نصبه؛ مثلاً npm audit signatures یا CLI مربوط به pypi-attestations. نویسنده میگه چک امضا فقط نشون میده Sigstore کلید رو تأیید کرده، و باید جدا چک کنی گواهی مال همون ریپوی مورد انتظاره. ابزارهایی مثل gh attestation verify هر بار اسم ریپو رو ازت میخوان و فیلد attestation-identities تو لاکفایلهای PEP 751 قراره این رو یه بار ذخیره کنه.
چند اکوسیستم بهصورت پیشفرض چک میکنن: Go با checksum database که یه transparency log هست، Hackage با ایندکس امضاشده با TUF، Terraform برای providerها، NuGet روی ویندوز و لینوکس، و Nix و Guix و Spack که کش باینریشون رو امضا میکنن. Cargo، Julia و conda فقط هش رو با متادیتای امضانشده مقایسه میکنن؛ یعنی جلوی خرابی فایل رو میگیره ولی به اندازهٔ خود رجیستری قابل اعتماده. Docker Content Trust هم بازنشسته شده و سرور Notary v1 در 8 دسامبر 2026 خاموش میشه.
نکات کلیدی:
- npm از جولای 2025 با trusted publishing بهصورت پیشفرض provenance میسازه
- PyPI از نوامبر 2024 attestationهای PEP 740 داره ولی pip هنوز موقع نصب چکشون نمیکنه
- Go از نسخهٔ 1.13 checksum database رو پیشفرض فعال داره
- Maven Central هنوز امضای PGP رو اجباری میدونه و trusted publishing نداره
- crates.io ایندکس امضانشده داره و RFC مربوط به TUF از اکتبر 2024 بازه
- سرور Notary v1 داکر در 8 دسامبر 2026 خاموش میشه




