@startuml !include left to right direction skinparam rectangle { BackgroundColor #FFF6F6 BorderColor #550000 } skinparam note { BackgroundColor #FFFFCC } ' makes Rel_ green skinparam ArrowFontColor<> green ' Anchor as SVG sprite sprite $anchor right header = Threat Model - Reproducible Builds according to SLSA Level 4 using independent GnuPG signatures and keys as well as Reproducible Builds according to SLSA Level 4 corresponding to the Tor Browser release process, as well as NixOS, Debian and NetBSD = %date("yyyy-MM-dd hh:mm") endheader right footer = Advantages: * Consistency between source code and binaries through Reproducible Builds * No single trust anchor -> at least 2 independent builders * Subsequent manipulation detectable through checksums in the Git Transparency Log * Insider attacks made more difficult through multiple signatures * Key misuse detectable through checksums in the Git Transparency Log and temporal correlation via timestamps * Each box is a trust boarder endfooter caption = Threat Model - Reproducible Builds according to SLSA Level 4 endcaption actor "Downloader\n(Verifier)" as User #Green actor "Internet\n(Insecure)" as Net actor "NTP Server 1" as NTP1 actor "NTP Server 2 " as NTP2 actor "Attacker\n(Insider / External)" as Attacker #Red 'actor "Trusted Commiter 1" as Committer1 'actor "Trusted Commiter 2" as Committer2 actor "Keyserver 1" as Keyserver1 actor "Keyserver 2" as Keyserver2 rectangle "Maintainer" { rectangle "Source Code\n(in Git) <$anchor{scale=0.1,color=green}>" as Source rectangle "Git Release Tag\n(GnuPG-signed) <$anchor{scale=0.1,color=green}>" as Tag } rectangle "Independent build pipelines\n(at least 2)" { rectangle "Pipe A <$anchor{scale=0.1,color=lightgreen}>b1" as B1 rectangle "Pipe B <$anchor{scale=0.1,color=lightgreen}>b2" as B2 } Motivation_Goal(TAb, "combined Trust") ' Rel_Aggregation(TAb, B1, "combines", $lineColor="green", $textColor="green") TAb o-- B1 : combines TA TAb o-- B2 : combines TA rectangle "Download artefacts" { rectangle "Artefact A\n(Checksum)" as A1 rectangle "Artefact B\n(Checksum)" as A2 } rectangle "Git Transparency Log\n(tamper-hardened) <$anchor{scale=0.1,color=green}>" as Log rectangle "Distributed ledger with\n Merkle Tree records\n (Blockchain) <$anchor{scale=0.1,color=green}>" as Ledger rectangle "Operational environment\n(of the downloader)" { rectangle "Known public signing keys\n(obtained from at least\n 2 independent trust paths)" as Keys rectangle "Rebuild pipeline\n(Reproducible)" as Rebuild rectangle "Verification policy\n (organisational measure\n from BSI TR)" as Policy } NTP1 --> Log : Time NTP2 --> Log : Time Keyserver1 --> Keys : retrieves Keyserver2 --> Keys : retrieves Source --> B1 Source --> B2 B1 --> A1 B2 --> A2 A1 --> Log : Checksum A2 --> Log : Checksum A1 --> Ledger : Checksum A2 --> Ledger : Checksum Tag --> Source Net --> User Attacker -[#Red]-> B1 : compromises Attacker -[#Red]-> Net : controls Attacker -[#Red]-> Tag : compromises private key '// Commiter1 --> Tag : generates valid signature '// Commiter2 --> Tag : generates valid signature User --> Rebuild User --> Log Keys --> Policy Rebuild --> Policy Policy --> User : ACCEPT / REJECT @enduml