diff --git a/stagex/img/binary-exploit-2.png b/stagex/img/binary-exploit-2.png new file mode 100644 index 0000000..56b1a5e Binary files /dev/null and b/stagex/img/binary-exploit-2.png differ diff --git a/stagex/img/binary-tampering.png b/stagex/img/binary-tampering.png new file mode 100644 index 0000000..76ed767 Binary files /dev/null and b/stagex/img/binary-tampering.png differ diff --git a/stagex/img/expanded-3-hashes.png b/stagex/img/expanded-3-hashes.png new file mode 100644 index 0000000..f2ad15b Binary files /dev/null and b/stagex/img/expanded-3-hashes.png differ diff --git a/stagex/incyber.md b/stagex/incyber.md index 4823c9e..23c7b10 100644 --- a/stagex/incyber.md +++ b/stagex/incyber.md @@ -22,22 +22,15 @@ How can we prove that our software has not been tampered during build time? * Binary - software that's in a format computers can work with * Compiler - builds software into binaries * Hashing - takes a data set and produces a fixed length string + * 8a1aaf746ada2a80fab03a58c91575ffe82885ac "banana" + * 9144b7b25e83a315de79e7a527f5631f9d4dacf2 "banan" --- @@ -58,6 +51,8 @@ and more. @@ -71,11 +66,12 @@ amount of source-level verification or scrutiny will protect you from using untrusted code...] --- +![no-tamper-evidence](https://antonlivaja.com/images/binary-exploit-2.png) + +--- + # What's the Answer? * Integrity hashes are already widely used + * How do we use them to verify the integrity of software during build time, not after? * Determinism / Reproducibility * > Method of building software which ensures that the resulting binary for @@ -119,12 +116,9 @@ again --- +![height:600px](https://antonlivaja.com/images/expanded-3-hashes.png) + + +--- + # How Deep Do We Have to Go? * Software Application @@ -157,9 +156,9 @@ binary you downloaded matches the hash they posted online and signed. * Compiler --- @@ -168,9 +167,9 @@ built * Allows us to make the whole tree deterministic -* Can be easily reproduced (deterministically) +* Can be easily reproduced -* Drop in replacement for the current approach +* Drop in replacement / easy to upgrade --- @@ -179,8 +178,6 @@ built ![right:0% left:0%](https://mermaid.ink/svg/pako:eNotjrsOgzAMRX8l8gw_kKFSga2dypgwWImBSHkpJANC_HtTiif73CP5HqCCJuCwJIwre3-kZ3Weog8uGktpYm37YJ14UfJkp3_cXbAX475lcmygSF6TV4a22-gvYxDPGK1RmE3wEzTgKDk0uv47fp6EvJIjCbyummYsNkuQ_qwqlhzG3SvgORVqIIWyrMBntFu9StSYaTBYe7ubnl_6WELh) - - --- # Who Compiles the Compiler? @@ -192,28 +189,26 @@ built * This means there is no clear providence to how we went from nothing to having a usable compiler --- # Bootstrapping Compilers -* Consists of "stages", and hundreds of steps of starting from a human auditable (256 byte) compiler written in hex0 and building up all the way up to a modern compiler +* Consists of "stages", and hundreds of steps of starting from a human auditable rudimentary compiler and building up all the way up to a modern compiler * Bootstrapping programming languages --- @@ -231,9 +226,9 @@ use two different compilers to build the code, and while unlikely it is possible # Status Check-In -* So far we have: - * A fully deterministic compiler - * Used that compiler to build all our dependencies +* So far we have established we need the following for a solution: + * Bootstrap a compiler in a deterministic manner + * Use compiler to build all our dependencies * Last thing remaining: your application --- -# Deterministic and Minimal Linux distribution +# [Stageˣ] + +Open source Linux Distribution + +--- + +# Multi-Signed, Bootstrapped, Deterministic, and Minimal