Reproduceerbare builds / provenance (SLSA) onderzoeken #1027

Closed
opened 2026-07-31 20:28:19 +00:00 by brenno · 1 comment
Owner

Voortgekomen uit het "Te wegen"-punt van #1014 en het residu van ENISA-open punt O1 (assurance/enisa-sbd-mapping.md, playbook 14 — "release artefacts signed"). Vastgelegd zodat de sterkere garantie niet wegzakt.

Stand nu

De release-keten heeft herkomst, maar nog geen reproduceerbaarheid:

  • SHA256SUMS draagt een minisign detached signature (#1014, gedaan) — één handtekening verankert alle artefacten.
  • macOS is Developer-ID-getekend + genotariseerd; Windows-Authenticode is bewust niet gedaan (#1013).

Een handtekening zegt wie voor de bytes instaat. Een reproduceerbare build zegt iets sterkers: iedereen kan uit dezelfde bron dezelfde bytes maken, dus je hoeft de bouwmachine (en de ondertekenaar) níet te vertrouwen. De bronroute biedt daar nu een zwakke vorm van ("een workflow die je kunt lezen" + gepinde toolchain), maar levert geen bit-voor-bit reproduceerbaar artefact.

Doel

Onderzoeken of en hoe reproduceerbaarheid haalbaar is, en wat het zou toevoegen:

  • Deterministische builds — Flutter-desktop/web bit-voor-bit reproduceerbaar krijgen. Bekende obstakels: ingebedde tijdstempels, absolute paden in de build, niet-deterministische toolchain-/linkerstappen, embedded build-ids.
  • SLSA-provenance — als tussenstap of alternatief: een ondertekende provenance-attestatie (bouwbron, -parameters, -omgeving) zonder volledige bit-reproduceerbaarheid. Weeg het niveau (SLSA build L1–L3) tegen wat een lokaal-eerst project zonder gehoste CI kan waarmaken.
  • Verhouding tot bestaande waarborgen — complementair aan de minisign-handtekening en de bronroute, geen vervanging. Wat wint de gebruiker er concreet mee?

Te wegen

  • Haalbaarheid vs. inspanning: volledige determinisme in Flutter is lastig en kan een doorlopende onderhoudslast worden.
  • Past het bij de kernwaarde "de gebruiker bouwt uit de bron"? De bronroute is er al; dit maakt hem verifieerbaar identiek.
  • Per platform verschillend (web waarschijnlijk het makkelijkst, macOS/Windows lastiger).

Verwant

Residu van #1014; naast #1013. Onderdeel van de veilige-distributievraag #520 en ENISA O1.

Voortgekomen uit het "Te wegen"-punt van #1014 en het residu van ENISA-open punt O1 (`assurance/enisa-sbd-mapping.md`, playbook 14 — "release artefacts signed"). Vastgelegd zodat de sterkere garantie niet wegzakt. ## Stand nu De release-keten heeft **herkomst**, maar nog geen **reproduceerbaarheid**: - `SHA256SUMS` draagt een minisign detached signature (#1014, gedaan) — één handtekening verankert alle artefacten. - macOS is Developer-ID-getekend + genotariseerd; Windows-Authenticode is bewust niet gedaan (#1013). Een handtekening zegt *wie* voor de bytes instaat. Een **reproduceerbare build** zegt iets sterkers: iedereen kan uit dezelfde bron dezelfde bytes maken, dus je hoeft de bouwmachine (en de ondertekenaar) níet te vertrouwen. De bronroute biedt daar nu een zwakke vorm van ("een workflow die je kunt lezen" + gepinde toolchain), maar levert geen bit-voor-bit reproduceerbaar artefact. ## Doel Onderzoeken of en hoe reproduceerbaarheid haalbaar is, en wat het zou toevoegen: - **Deterministische builds** — Flutter-desktop/web bit-voor-bit reproduceerbaar krijgen. Bekende obstakels: ingebedde tijdstempels, absolute paden in de build, niet-deterministische toolchain-/linkerstappen, embedded build-ids. - **SLSA-provenance** — als tussenstap of alternatief: een ondertekende provenance-attestatie (bouwbron, -parameters, -omgeving) zonder volledige bit-reproduceerbaarheid. Weeg het niveau (SLSA build L1–L3) tegen wat een lokaal-eerst project zonder gehoste CI kan waarmaken. - **Verhouding tot bestaande waarborgen** — complementair aan de minisign-handtekening en de bronroute, geen vervanging. Wat wint de gebruiker er concreet mee? ## Te wegen - Haalbaarheid vs. inspanning: volledige determinisme in Flutter is lastig en kan een doorlopende onderhoudslast worden. - Past het bij de kernwaarde "de gebruiker bouwt uit de bron"? De bronroute is er al; dit maakt hem verifieerbaar identiek. - Per platform verschillend (web waarschijnlijk het makkelijkst, macOS/Windows lastiger). ## Verwant Residu van #1014; naast #1013. Onderdeel van de veilige-distributievraag #520 en ENISA O1.
Author
Owner

Onderzocht en afgehandeld op main (4ede15ab, PR #1032).

Web — empirisch: van 2854 bestanden verschilde er precies één over twee schone builds (flutter_bootstrap.js), en daarin alleen een willekeurig serviceWorkerVersion-cachebustergetal; geen absoluut bouwpad lekt. Dat getal is nu deterministisch afgeleid van de service-workerinhoud (tool/pack_web_release.dart), zodat de bundelinhoud reproduceerbaar is binnen een vaste bouwomgeving. Herbouw-en-vergelijk-route in docs/BUILD.md.

Gewogen weg (mét heropen-trigger, assurance/reproduceerbare-builds.md): macOS bit-repro is principieel onmogelijk voor een derde (serverside notarisatieticket); Windows te weinig opbrengst; een aparte SLSA-attestatie vraagt L2/L3 een runner-sleutel/isolatie die botst met least-privilege — reproduceerbaarheid bedient "vertrouw de bouwer niet" hier beter.

Eerlijke kanttekening — de native-assetslaag (dartcv4/OpenCV via CMake) bleek de resterende variabele voor repro over machines heen. Aangewezen als sluitstuk en apart belegd: #1033 (onder #520).

ENISA-residu O1 bijgewerkt. Bewaker-review (publieke belofte) akkoord. Sluit dit als afgehandeld.

Onderzocht en afgehandeld op main (`4ede15ab`, PR #1032). **Web** — empirisch: van 2854 bestanden verschilde er precies één over twee schone builds (`flutter_bootstrap.js`), en daarin alleen een willekeurig `serviceWorkerVersion`-cachebustergetal; geen absoluut bouwpad lekt. Dat getal is nu deterministisch afgeleid van de service-workerinhoud (`tool/pack_web_release.dart`), zodat de bundelinhoud reproduceerbaar is binnen een vaste bouwomgeving. Herbouw-en-vergelijk-route in `docs/BUILD.md`. **Gewogen weg** (mét heropen-trigger, `assurance/reproduceerbare-builds.md`): macOS bit-repro is principieel onmogelijk voor een derde (serverside notarisatieticket); Windows te weinig opbrengst; een aparte SLSA-attestatie vraagt L2/L3 een runner-sleutel/isolatie die botst met least-privilege — reproduceerbaarheid bedient "vertrouw de bouwer niet" hier beter. **Eerlijke kanttekening** — de native-assetslaag (dartcv4/OpenCV via CMake) bleek de resterende variabele voor repro over machines heen. Aangewezen als sluitstuk en apart belegd: #1033 (onder #520). ENISA-residu O1 bijgewerkt. Bewaker-review (publieke belofte) akkoord. Sluit dit als afgehandeld.
brenno 2026-07-31 21:49:57 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1027
No description provided.