iX 5/2018
S. 104
Wissen
Softwareentwicklung
Aufmacherbild

Reproducible Builds

Aus der Schablone

Etliche Parameter verhindern, dass zwei Kompilate derselben Quelle automatisch bitidentisch sind. Das Projekt Reproducible Builds hat das Ziel, aus Quelltexten nachvollziehbar eindeutige binäre Objekte zu erzeugen.

Erhält man hundertprozentig identische Binärdateien, wenn man denselben Quellcode mehrmals kompiliert? Exakte Kopien – Bit für Bit? Theoretisch kennt man die Faktoren, die dafür zu berücksichtigen sind, in der Realität aber ist Reproduzierbarkeit trotzdem oft nicht gegeben. Wer darauf nicht abzielt, kümmert sich beispielsweise nicht darum, ob in den fertigen Objekten der Kompilierzeitpunkt hinterlegt ist. Woher wissen also Nutzer, ob sich hinter einem Download-Link die Software befindet, die sie haben wollen?

Open Source erhebt den Anspruch, dass Nutzer die Funktionsweise eines Programms nachvollziehen können. Doch ohne eine Garantie, dass ein Kompilat auch tatsächlich den offengelegten Quellen entspricht, erfordert dies einen gehörigen Vertrauensvorschuss in die Bereitsteller der Pakete: Debian, Microsoft, unabhängige Entwickler oder die interne Abteilung. Selbst wenn das Vertrauen gerechtfertigt ist, besteht die Gefahr, dass Angreifer gefälschte Pakete in Umlauf bringen. An diesem Punkt setzen die Reproducible Builds an, die – naheliegenderweise – aus dem Umfeld der Linux-Distributionen kommen.

Dadurch lassen sich identische Open-Source-Programme an unterschiedlichen Computern unabhängig voneinander in den gleichen Binärcode übersetzen. Wollte man etwa, wie es die Free Software Foundation Europe (FSFE) fordert, im öffentlichen Bereich komplett auf freie Software setzen, könnte binäre Reproduzierbarkeit sicherstellen, dass keine Partei – unberechtigt oder berechtigt – unbemerkt Hintertüren versteckt hat.

Insbesondere durch das Internet of Things, durch das Software auch in die Intimsphäre der Menschen eindringt, wird der Ansatz, Software reproduzierbar zu erzeugen, dringender und offensichtlicher. Dort macht diese Notwendigkeit allerdings keinen Halt: Kraftwerkssteuerung oder der gesamte Bereich Automotive, Medizintechnik und smarte Implantate sind weitere Bereiche, die ein hohes Maß an Vertrauen in die digitale Infrastruktur erfordern.

Dieses Vertrauen wäre gegeben, wenn etwa für einen Herzschrittmacher die Software und seine Funktionsweise offengelegt würden und – hier kommt die Reproduzierbarkeit ins Spiel – ein Hash-Abgleich sicherstellen könnte, dass man das unveränderte Binary der Software oder eines Softwareupdates vorliegen hat. Offensichtlich bedingt Reproduzierbarkeit Open-Source-Entwicklung, damit unabhängige Stellen die Quellen selbst kompilieren und ihre Hashwerte mit denen der Herausgeber vergleichen können.

Viele Ursachen können verhindern, dass Software reproduzierbar ist. Die meisten davon sind eine Konsequenz der verwendeten Werkzeuge. Allerdings erschweren unter anderem diese Variationen, zu erkennen, ob jemand unerwünschte Änderungen vorgenommen hat. Zwar könnten Nutzer direkt die Artefakte untersuchen, ob sich beispielsweise nur ein Datum verändert hat. Das Ziel der Reproducible Builds ist es aber, manuelles Prüfen zu vermeiden. Deshalb ist es wichtig, diese Einflüsse auszuschalten.