Skip to content

Latest commit

 

History

History
105 lines (98 loc) · 4.27 KB

README.md

File metadata and controls

105 lines (98 loc) · 4.27 KB

zktls

Repository for development of the TLS 1.2 and TLS 1.3 stacks in Noir, to produce ZKPs that can be published to the blockchain

The objective is to make it possible to prove and authenticate connections to web servers, in order to then publish such proofs to the blockchain as oracles. This approach is similar to zkEmail (https://blog.aayushg.com/zkemail/), which brings new possibilities for blockchain dApps that are baffling and endless (https://speakerdeck.com/sorasuegami/ethcon-korea-2023-zk-email-on-chain-verification-of-emails-using-zkp?slide=34), and we aim to extend it to enable users to prove not just data that servers are willing to send them by email, but that can be found simply on any normal web server.

TLS version

A quick google search reveals that amongst the top web servers support for TLS 1.3 is at 63% (https://www.f5.com/labs/articles/threat-intelligence/the-2021-tls-telemetry-report) and support for TLS 1.2 is at 95% (https://www.clickssl.net/blog/ssl-statistics). For this reason it might be wiser to first implement support for TLS 1.2, in order to have access to proofs of connections from a broader range of popular websites, or one could also implement TLS 1.3 first and save development time on deprecated cipher suites, at the cost of reduced (but still significant for serious use-cases) access to proofs of connection to popular websites.

TLS 1.2

REF: https://datatracker.ietf.org/doc/html/rfc5246#autoid-58

the TLS protocol contains a large quantity of states and state transitions that need to be coded up. This is by itself not a small task, but we can make it easier if we first focus on implementing all the required primitives, and then focus on implementing the protocol code. As a further note: we need not implement protocol code for the server, as it is unlikely to be particularly useful for the use-cases we envision in zkTLS.

These are the building blocks we need:

TLS 1.3

REF: https://datatracker.ietf.org/doc/html/rfc8446

Similarly to version 1.2, there is a lot of code that needs to be written for the TLS 1.3 Client, but it is best to first fill in the basic building cryptographic building blocks: