Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cmsc818fall2023projects
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Peter Keleher
cmsc818fall2023projects
Commits
53364237
Commit
53364237
authored
1 year ago
by
Peter J. Keleher
Browse files
Options
Downloads
Patches
Plain Diff
auto
parent
2312a96b
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
notes/pbft.md
+26
-18
26 additions, 18 deletions
notes/pbft.md
with
26 additions
and
18 deletions
notes/pbft.md
+
26
−
18
View file @
53364237
...
...
@@ -7,9 +7,9 @@
## Differences from fail-stop consensus
-
3
*f*
+1 replicas instead of 2
*f*
+1 (non-byzantine consensus):
-
must be possible to make progress w/ only
*n - f*
replicas (because
*f*
might be faulty and
choose not to
respond)
-
however, the
*f*
not responding might be correct but slow (asynchrony), so there might be
*f*
bad responses
out of
the
*n - f*
-
implies
*(n - f - f) > f*
, or
*n >= 3f + 1*
-
must be possible to make progress w/ only
*n - f*
replicas (because
*f*
might be faulty and respond)
-
however, the
*f*
not responding might be correct but slow (asynchrony), so there might be
*f*
bad responses
in
the
*n - f*
responses
-
implies
*(n - f - f) > f*
, or
*n >= 3f + 1*
in order to guarantee majority
-
3 phases instead of two
-
cryptographic signatures
...
...
@@ -17,7 +17,7 @@
-
safety, liveness (
*n >= 3f+1*
)
-
can't prove both in async environment
-
safety guaranteed through protocol
-
liveness "guaranteed"
with
reasonable assumption on msg delays
-
so
liveness
must be
"guaranteed"
by limits on asynchrony (e.g.,
reasonable assumption on msg delays
)
-
performance
-
one round trip for reads
-
2 round trips for read/write
...
...
@@ -26,16 +26,14 @@
-
different security provisions (root passwd etc)
-
different implementations !!
**byzantine faults**
-
adversary(s) can
## Definitions
-
a
**view**
is a configuration of the system w/ one replica the
*primary*
and the others
*backups*
.
-
**byzantine faults**
:
adversary(s) can
-
coordinate faulty nodes
-
delay communication of non-faulty nodes (but not indefinitely)
-
equivocation
-
saying "yes" to Larry, "no" to "Moe"
-
lying about received messages
-
guarantees:
-
safety and liveness (assuming only
*floor(n-1/3)*
faulty,
*delay(t)*
does not grow faster than
*t*
indefinitely
-
equivocation
-
say "yes" to Larry, "no" to "Moe"
-
lie about received messages
**cool things**
-
much more robust/secure than paxos
...
...
@@ -43,23 +41,33 @@
-
little other cost
-
authenticators
## Rough outline
1.
client sends request to invoke an operation to the primary
1.
Primary multicasts request to backups
1.
Replicas execute the request and send replies to the client
1.
Client waits for $f+1$ replies from different reqplicas w/ same result
-
guarantees:
-
safety and liveness (assuming only $
\l
floor{
\f
rac{n-1}{3}}
\r
floor$ faulty,
*delay(t)*
does not grow faster than
*t*
indefinitely

## Phases
-
*pre-prepare*
and
*prepare*
phases order request even if primary
lying
-
*pre-prepare*
and
*prepare*
phases order request even if primary
faulty
-
replica tells all others what the primary told it
-
*prepare*
and
*commit*
phases ensure commits are totally ordered across views
-
a replica is
*prepared*
when:
-
has received a proper pre-prepare from primary, signature, current
*view*
-
2
*f*
"prepares" from other replicas that match it
-
Such a replica then:
-
multicasts "commit" to other replicas
-
a replica is committed-local iff:
-
*committed*
, and
-
has accepted 2
*f*
+1 commit msgs (possibly including it's own)
-
system is
*committed*
iff
*prepared*
true for
*f*
+1 replicas
-
*committed*
true iff
*committed-local*
true for some non-faulty replica
-
a replica is committed-local iff:
-
*committed*
, and
-
has accepted 2
*f*
+1 commit msgs (possibly including it's own)
-
system is
*committed*
iff
*prepared*
true for
*f*
+1 replicas
-
*committed*
true iff
*committed-local*
true for some non-faulty replica
## Optimizations
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment