Conference:March 6-8, 2017
Workshops:March 9-10, 2017
Presentation: Assuring Crypto Code with Automated Reasoning
Location:
- Windsor, 5th flr.
Duration
Day of week:
- Wednesday
Level:
- Advanced
Persona:
- Developer
Key Takeaways
- Learn how to apply open-source tools to formally verify that software correctly implements a specification
- Discover how cryptographic algorithms are defined and implemented, and how they can be proven formally correct
- Apply the techniques to achieve worry-free refactoring
Abstract
Bugs in software are ubiquitous, but the impact of these bugs can vary widely. Sometimes they are largely benign, and at other times they can have catastrophic effects. Bugs in cryptographic software tend to be especially serious. To add to that, cryptographic algorithms are difficult to design and implement, requiring intricate and rare expertise. And even worse, such software operates in a context that can be assumed to be malicious, rather than random.
To achieve confidence of the correctness of cryptographic implementations in this context, we therefore need to apply a more rigorous testing standard. Ideally, we want to be able to test an implementation on all possible inputs. Fortunately, advances in automated reasoning technology, particularly in SAT and SMT solvers, makes exactly this approach possible, and even efficient.
This talk will describe the capabilities and operation of some open source tools that allow developers to conclusively and largely automatically determine whether a low-level cryptographic implementation, written in a language such as C, exactly matches a higher-level mathematical specification. We will particularly focus on work we have done to integrate these tools into the continuous integration system of Amazon's s2n implementation of TLS.
Interview
The talk will cover tools to help ensure that cryptographic code is correct with an extremely high degree of confidence, by comparing it to a trusted reference specification and against all inputs. It will also mention future plans to expand the scope of these tools beyond the cryptographic domain.
I’ll be talking about an application of a technique known as formal methods. It’s like static analysis, but it’s sound, meaning that it covers all possible behaviours of a program rather than just looking for specific instances of common bugs.
I’m emphasising cryptography because we have results that show that it works really well for that particular domain. It works when you have a specification of what the software should do, which tend not to exist for most software. Cryptographic algorithms tend to have detailed specifications in standards documents published by organizations such as NIST, and therefore are an ideal target for correctness proofs.
In the long run, we expect these techniques to be applicable to a wider variety of software, but for this talk, we’ll be looking at the specific examples where we can demonstrate successful verification. We’ll talk about some of the widely used open-source libraries that we’ve analysed with this process.
I want to raise awareness of two key points. First, that software that analyzes the structure of other software to determine whether it is correct, rather than just running it and inspecting the output, is feasible, and in fact quite practical for limited domains such as cryptography. Secondly, that we have developed a specific tool, the Software Analysis Workbench (SAW) that implements techniques of this sort.
It would be most appropriate for advanced level people in the Architect, Tech Lead, or Developer roles, who are interested in using or implementing cryptography. I’m talking about techniques which would be of interest to a larger audience - they techniques could be used in other areas, for example - but the main impact will be in cryptographic environments.
Similar Talks





Tracks
-
Architecting for Failure
Building fault tolerate systems that are truly resilient
-
Architectures You've Always Wondered about
QCon classic track. You know the names. Hear their lessons and challenges.
-
Modern Distributed Architectures
Migrating, deploying, and realizing modern cloud architecture.
-
Fast & Furious: Ad Serving, Finance, & Performance
Learn some of the tips and technicals of high speed, low latency systems in Ad Serving and Finance
-
Java - Performance, Patterns and Predictions
Skills embracing the evolution of Java (multi-core, cloud, modularity) and reenforcing core platform fundamentals (performance, concurrency, ubiquity).
-
Performance Mythbusting
Performance myths that need busting and the tools & techniques to get there
-
Dark Code: The Legacy/Tech Debt Dilemma
How do you evolve your code and modernize your architecture when you're stuck with part legacy code and technical debt? Lessons from the trenches.
-
Modern Learning Systems
Real world use of the latest machine learning technologies in production environments
-
Practical Cryptography & Blockchains: Beyond the Hype
Looking past the hype of blockchain technologies, alternate title: Weaselfree Cryptography & Blockchain
-
Applied JavaScript - Atomic Applications and APIs
Angular, React, Electron, Node: The hottest trends and techniques in the JavaScript space
-
Containers - State Of The Art
What is the state of the art, what's next, & other interesting questions on containers.
-
Observability Done Right: Automating Insight & Software Telemetry
Tools, practices, and methods to know what your system is doing
-
Data Engineering : Where the Rubber meets the Road in Data Science
Science does not imply engineering. Engineering tools and techniques for Data Scientists
-
Modern CS in the Real World
Applied, practical, & real-world dive into industry adoption of modern CS ideas
-
Workhorse Languages, Not Called Java
Workhorse languages not called Java.
-
Security: Lessons Learned From Being Pwned
How Attackers Think. Penetration testing techniques, exploits, toolsets, and skills of software hackers
-
Engineering Culture @{{cool_company}}
Culture, Organization Structure, Modern Agile War Stories
-
Softskills: Essential Skills for Developers
Skills for the developer in the workplace