summaryrefslogtreecommitdiff
path: root/PlantUML-ModelingTrust/GnuPG-WoT-Download/202-ThreatModel-SLSA4-ReproducibleBuilds-TrustAnchor.puml
blob: f183b2add25e0ffe1f9b2fd6ea8f3e1b04807c8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
@startuml
!include <archimate/Archimate>

left to right direction
skinparam rectangle {
  BackgroundColor #FFF6F6
  BorderColor #550000
}
skinparam note {
  BackgroundColor #FFFFCC
}

'  makes Rel_ green
skinparam ArrowFontColor<<greenRel>> green


' Anchor as SVG sprite
sprite $anchor <svg viewBox="0 0 204.851 204.851">
  <path fill="#000000" d="M139.518,128.595l16.834,16.336c0,0-20.644,29.877-42.725,30.473
  c0.479,0,0.117-84.092,0.039-104.472c14.694-4.797,25.402-18.182,25.402-34.117
  c0-20.009-16.697-36.218-37.273-36.218c-20.615,0-37.312,16.209-37.312,36.208
  c0,15.671,10.376,28.929,24.748,33.961l0.098,104.277c-26.643-1.837-42.061-27.474-42.061-27.474
  l17.997-17.41L0,120.505l9.887,63.301l17.362-16.795c15.036,12.105,32.017,37.244,72.876,37.244
  c51.332-1.309,63.184-28.939,76.344-39.804l18.993,18.514l9.389-63.907L139.518,128.595z
  M82.558,36.208c0-10.298,8.608-18.661,19.218-18.661s19.257,8.363,19.257,18.661
  c0,10.327-8.647,18.681-19.257,18.681S82.558,46.535,82.558,36.208z"/>
</svg>




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 :  <color:green>combines TA</color>
TAb o-- B2 :  <color:green>combines TA</color>






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