Linux-releaseartefacten ondertekenen (detached signature) #1014
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1014
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Voortgekomen uit de ENISA Secure-by-Design-afbeelding (
assurance/enisa-sbd-mapping.md, open punt O1 — playbook 14, "release artefacts signed"). Eén issue per onbehandeld platform; dit is Linux.Stand nu
scripts/notarize_macos.sh).SHA256SUMS— inSECURITY.mduitdrukkelijk "geen handtekening". De checksum-lijst zelf is niet ondertekend, dus wie de lijst kan vervangen, kan ook de checksums vervangen.Doel
Een detached signature (GPG of
minisign) over de release-artefacten én overSHA256SUMS, met de publieke sleutel gepubliceerd op een vaste plek (repo +security.txt/website), zodat de checksum-keten een verifieerbaar anker krijgt.Te wegen
minisign—minisignis kleiner, moderner en makkelijker te verifiëren; GPG is bekender bij distributies.Verwant
Onderdeel van de veilige-distributievraag #520.
Besluit: Route A — minisign (Ed25519) detached signature over
SHA256SUMS, lokaal-handmatig getekend. Anders dan bij #1013 (waar ondertekening weinig oplevert) is dit goedkoop en zuiver additief, dus de keuze is: wél doen.De vorm
SHA256SUMS.minisig, lokaal met de hand getekend door de beheerder — precies het model van de macOS-notarisatie (scripts/notarize_macos.sh). De private sleutel blijft bij de stichting; geen secret in de forge-runner, conform het uitgangspunt in dit issue.minisign.pub/KEYS), op de website, en aangewezen vanuitweb/.well-known/security.txt+SECURITY.md. Een publieke sleutel is geen geheim.minisign -Vm SHA256SUMS -P <sleutel>(of via hetKEYS-bestand).Waarom minisign, niet GPG of SSH
docs/design/GIT_STORAGE.md). minisign is dezelfde lichte smaak — één korte sleutel, geen keyring, geen web-of-trust, geen expiry-gedoe.docs/design/AGENTIC_BUILD_PLAN.md) geldt hier niet: release-ondertekening draait met een extern gereedschap bij het uitbrengen, niet met code in de app. minisign voegt dus geen Dart-afhankelijkheid toe.Reikwijdte-inzicht
SHA256SUMSdekt élk bestand in de release (macOS, Windows, Linux, web, beide SBOM's). Eén handtekening overSHA256SUMSverankert daarmee de hele release — dit issue heet "Linux", maar de oplossing is platform-onafhankelijk en lost het herkomst-anker voor alle platformen tegelijk op.Reproduceerbare build (uit "Te wegen")
De sterkere garantie (herbouw tot identieke bytes → geen vertrouwen in de bouwmachine nodig), maar een fors, apart traject; deterministische Flutter-desktopbuilds zijn lastig. Complementair aan ondertekening, geen voorwaarde. Apart, later issue — niet in deze ronde.
Uitvoeringsplan
minisign -Gom een sleutelpaar lokaal te genereren; private sleutel bewaren zoals de macOS-signing-identity/notary-profielen (keychain/veilige opslag), nooit op een runner.scripts/sign_release.sh+make sign-releasedat lokaalminisign -Sm SHA256SUMSdraait en de.minisigaan de release hangt;minisign.pub/KEYSin de repo; verwijzing insecurity.txt,SECURITY.mden de verify-instructies in.forgejo/release-body.md.SECURITY.md§"Release artifact integrity and signing",KNOWN_LIMITATIONS.md,docs/BUILD.md,release-body.md,FAQ.mdbijwerken — inclusief het corrigeren van de onjuiste regel "Windows and Linux … warn on first launch" (een Linux-tarball kent geen OS-waarschuwing bij eerste start).assurance/enisa-sbd-mapping.mdbijwerken zodra de handtekening staat.Blokkade/volgende stap: stap 1 (sleutelpaar genereren + private-sleutelbeheer) is een handmatige beheerderactie, net als de eenmalige macOS Developer-ID/notary-opzet. Zodra de publieke sleutel bestaat, kan de rest bedraad worden.
Onderdeel van de veilige-distributievraag #520.
Geïmplementeerd en gemerged op main —
c36f406e(PR #1026).Wat er in zit
SHA256SUMSdraagt nu een minisign (Ed25519) detached signatureSHA256SUMS.minisig. Eén handtekening over de lijst verankert élk artefact dat zij noemt — alle vier platformen + de SBOM's (DebianRelease/Release.gpg-model).make sign-release→scripts/sign_release.sh): de private sleutel komt nooit als secret op een runner. Het script tekent, verifieert meteen en ruimt de handtekening op als de verify faalt.minisign.pubin de repo-root, sleutel-ID9A467E62F323426D, gepind in de poorttest/release_signing_test.dart(een verwisseling laat de bouw falen). Verifiëren:minisign -Vm SHA256SUMS -p minisign.pub.Getoetst
make checkgroen;make check-secretsschoon; shellcheck OK; end-to-end met de echte sleutel (tekenen/verifiëren/onafhankelijke herverificatie/faal-opruiming). Twee reviews — bewaker en security-architect — beide akkoord, alle bevindingen verwerkt (o.a. de sleutel-ID als vast anker tegen de single-host-vertrouwenswortel).Wat er bewust NIET in zit
Beheerder-actiepunt
Het sleutelpaar is gegenereerd; de private helft staat lokaal (
~/.minisign/ocideck-release.key) en is momenteel zonder wachtwoord. Aanrader (zie BUILD.md): zet er een wachtwoord op metminisign -C -s ~/.minisign/ocideck-release.key.Onderdeel van de veilige-distributievraag #520.