├── README.md ├── code └── README.md ├── collections └── README.md ├── reading └── README.md └── tools └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # HACS 2 | 3 | HACS (High Assurance Cryprographic Software) is an invite-only workshop, so far run twice in January 2016 and January 2017. 4 | 5 | This repo is a somewhat organised set of links to projects and resources related to or arising from the workshop. 6 | -------------------------------------------------------------------------------- /code/README.md: -------------------------------------------------------------------------------- 1 | # Links to verified code 2 | 3 | [CertiKOS](http://flint.cs.yale.edu/certikos/): kernel with clean-slate design with end-to-end guarantees on extensibility, security, and resilience 4 | 5 | [hacl*](https://github.com/mitls/hacl-star): an F* verified cryptographic library 6 | 7 | [hacrypto](https://github.com/GaloisInc/hacrypto): snapshots, architectures, audits, validation, and verification of crypto libraries 8 | 9 | [miTLS](https://mitls.org/): a verified reference implementation of TLS 10 | 11 | WIP: [applying SAW to OpenSSL](https://github.com/benlaurie/openssl/tree/saw/proof) 12 | 13 | [seL4](https://sel4.systems/): an L4 kernel verified with Isabelle/HOL 14 | 15 | [Verificatum](http://www.verificatum.com/index.html): verified voting stuff 16 | -------------------------------------------------------------------------------- /collections/README.md: -------------------------------------------------------------------------------- 1 | # Other Collections of ... Stuff 2 | 3 | [DeepSpec](http://deepspec.org/) 4 | 5 | [Project Everest](https://project-everest.github.io/) 6 | -------------------------------------------------------------------------------- /reading/README.md: -------------------------------------------------------------------------------- 1 | # Reading Matter 2 | 3 | [Entropy Loss and Output Predictability in the Libgcrypt PRNG](http://formal.iti.kit.edu/~klebanov/pubs/libgcrypt-cve-2016-6313.pdf) 4 | 5 | [Fun with Bignums: Crashing MatrixSSL and more](https://blog.fuzzing-project.org/51-Fun-with-Bignums-Crashing-MatrixSSL-and-more.html) 6 | 7 | [Modular Verification for Computer Security](http://www.cs.princeton.edu/~appel/papers/modsec.pdf) 8 | 9 | [Practical Detection of Entropy Loss in Pseudo-Random Number Generators](http://formal.iti.kit.edu/~klebanov/pubs/ccs2016.pdf) 10 | 11 | [Second Edition: Verification of a Cryptographic Primitive: SHA-256](http://www.cs.princeton.edu/~appel/papers/verif-sha-2.pdf) 12 | 13 | [Verified Correctness and Security of OpenSSL HMAC](http://www.cs.princeton.edu/~appel/papers/verified-hmac.pdf), by Lennart Beringer, Adam Petcher, Katherine Q. Ye, and Andrew W. Appel. In 24th USENIX Security Symposium, pages 207-221, August 2015 14 | 15 | [Verifying s2n HMAC with SAW](https://galois.com/blog/2016/09/verifying-s2n-hmac-with-saw/) 16 | 17 | # Coq Self-Study (CSS) 18 | 19 | [Software Foundations](https://www.cis.upenn.edu/~bcpierce/sf/current/index.html), by Benjamin C. Pierce, Arthur Azevedo de Amorim, Chris Casinghino, Marco Gaboardi, Michael Greenberg, Cătălin Hriţcu, Vilhelm Sjöberg, Brent Yorgey 20 | 21 | [Certified Programming with Dependent Types](http://adam.chlipala.net/cpdt/) by Adam Chlipala 22 | 23 | The best way to study these two books is to open them in the [CoqIDE](https://coq.inria.fr/download) assistant. 24 | -------------------------------------------------------------------------------- /tools/README.md: -------------------------------------------------------------------------------- 1 | # Tools for verifying things 2 | 3 | ## Formal Methods 4 | 5 | [AutoG&P](https://autognp.github.io): tool for performing highly automated game-hopping proofs for pairing-based cryptographic primitives 6 | 7 | [CBMC](https://github.com/diffblue/cbmc): a bounded model checker for C and Java 8 | 9 | [CompCert](http://compcert.inria.fr/) A verified C compiler, written in Coq 10 | 11 | 12 | The [Coq](https://coq.inria.fr/) Proof Assistant 13 | 14 | *While you can install Coq with `apt-get install coqide` or executing the binary/dmg if you use Windows. The best way to install coq is to use [opam](https://opam.ocaml.org/)*: 15 | 16 | ``` 17 | sudo apt-get install gcc 18 | sudo apt-get install opam 19 | opam init 20 | opam switch coq --alias-of 4.04.0 21 | opam install coq 22 | opam install coqide 23 | opam repo add coq-released https://coq.inria.fr/opam/released 24 | opam install coq-mathcomp-ssreflect 25 | opam install menhir 26 | ``` 27 | 28 | [Crucible](https://github.com/GaloisInc/crucible): a language-agnostic library for performing forward symbolic execution of imperative progams 29 | 30 | [Cryptol](http://cryptol.net/): a domain-specific language for specifying cryptographic algorithms 31 | 32 | [EasyCrypt](https://www.easycrypt.info/trac/): a toolset for reasoning about relational properties of probabilistic computations with adversarial code 33 | 34 | [Entroposcope](http://entroposcope.verifythis.org): a tool for finding entropy loss bugs in PRNGs 35 | 36 | [F*](https://www.fstar-lang.org/): an ML-like language with a type system for program verification 37 | 38 | [Fiat Crypto](https://github.com/mit-plv/fiat-crypto/): automatic derivation of fast crypto-primitive code (for now just ECC) from specifications in Coq, generating proofs along the way 39 | 40 | [Frama-C](http://frama-c.com/): an extensible and collaborative platform dedicated to source-code analysis of C software 41 | 42 | [gfverif](http://gfverif.cryptojedi.org): fast and easy verification of finite-field arithmetic 43 | 44 | [hacspec](https://github.com/HACS-workshop/hacspec): a language for specifying crypto 45 | 46 | [Ivory](http://ivorylang.org/): an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell 47 | 48 | [Kami](http://plv.csail.mit.edu/kami/): tool for verified hardware design (ISA->RTL) 49 | 50 | [KeY](http://www.key-project.org/): a deductive verifier of functional correctness of Java programs (wrt properties annotated in JML) 51 | 52 | [Kremlin](https://github.com/FStarLang/kremlin): translate a subset of F* to C 53 | 54 | [Software Analysis Workbench (SAW)](https://saw.galois.com/) 55 | 56 | [Vale](https://github.com/project-everest/vale): Verified Assembly Language for Everest 57 | 58 | [VeriFast](https://github.com/verifast/verifast/): a verifier for single-threaded and multithreaded C and Java programs annotated with preconditions and postconditions written in separation logic 59 | 60 | [Verified Software Toolchain (VST)](http://deepspec.org/research/VST/): software toolchain which includes static analyzers to check assertions about your program; optimizing compilers to translate your program to machine language; operating systems and libraries to supply context for your program 61 | 62 | [ZooCrypt](https://www.easycrypt.info/trac/wiki/ZooCrypt): fully automated analysis of padding-based encryption 63 | 64 | ## Fuzzing 65 | 66 | [AFL](http://lcamtuf.coredump.cx/afl/): a fuzzer 67 | 68 | [libFuzzer](http://libfuzzer.info): a fuzzer 69 | 70 | [OSS-Fuzz](https://github.com/google/oss-fuzz): fuzzing service for open-source software 71 | --------------------------------------------------------------------------------