-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Contest] libp2p+noise: Win a Data Terra Nemo’19 conference ticket! #631
Comments
Unfortunately we didn't receive any submissions in time, but the spec and requirements are still valid for anyone who wants to help out. In fact, I'd like to bounty this out via Gitcoin or similar. |
@raulk Have you seen https://noiseexplorer.com/patterns/IX/ ? |
@emilbayes yeah! the contest actually recommended using the Go code from there as a starting point. |
@raulk Ah sorry, I see |
@emilbayes what do you think about the choice of |
libp2p+noise: Win a Data Terra Nemo’19 conference ticket!
Submissions open until 14th May 2019 23:59:59 UTC. Winner announced on 15th May 2019.
Hey hackers! 👋
We are looking to implement a proof of concept for a Noise-based handshake in
go-libp2p
, and we know you’re eager to help!And there is a prize! To reward the winning submission, Protocol Labs is giving away a ticket to Data Terra Nemo 2019.
Data Terra Nemo is a technical conference for hackers and computer scientists focused on distributed and decentralized systems, taking place in Berlin next week (May 17-18th). It’s an excellent occasion to learn from – and interact with – top-notch thought leaders and hackers in the space. Just look at the speaker roster!
The conference has been sold out for weeks, and there’s a sizable waiting list, so we trust you’ll appreciate how truly exceptional this opportunity is to attend. The ticket is valued at 240€.
Background
We are looking to adopt the
IX
Noise handshake. We are inspired by Wireguard and Matrix, both of whom use theIK
handshake.IK
andIX
diverge in the prior knowledge that the initiator has of the responder’s static public key:IK
, the initiator HAS this knowledge and can preserve the privacy of its own public key by encrypting it to the responder’s static public key.IX
, the initiator LACKS this knowledge, but can otherwise authenticate the peer upon receiving their public key.In a peer-to-peer setting, public keys are exchanged readily, and peers need to prove their identity frequently, so attempts to conceal the initiator’s identity from observers are redundant. Such configurations are more relevant in hub-and-spoke-like models, or client-server settings.
More information in this post by Latacora. See also the IX handshake in the Noise Explorer.
Note: in libp2p, the peer ID is derived by hashing the public key struct, and the initiator always knows the peer ID of the responder when establishing a connection.
Integration with libp2p
When libp2p peers connect, they negotiate the protocol for establishing a secure, authenticated channel. You don’t need to know the details of this process.
If both parties support Noise
IX
, you can safely assume that libp2p will select the module you’ll be building to establish the crypto channel.We currently support two protocols:
/secio/1.0.0
./tls/1.0.0
.The Noise
IX
handshake will be the third member of that list. You can use those two as reference.The challenge
🔐 Target: Implement and integrate the Noise IX handshake in go-libp2p! 🔐
We’re aware that this might be bit rushed, so don’t feel your implementation should be perfect, robust or complete. It does make for a neat weekend project, though!
Our main goal is to get a decent headstart, and to get you buzzed about contributing to libp2p and shaping the future of peer-to-peer networking in general! We’ll definitely use this to scout for talent too ;-)
If you do manage to reach feature completeness and high robustness via tests of all kinds, that’s great! For all reasonable submissions that don’t win, there’ll be something in store for you, don’t worry ;-)
Technical details
/noise/ix/1.0.0
protocol ID.go-libp2p-crypto
andgo-libp2p-peer
.connsec.Transport
interface, and it’ll need to produce aconnsec.Conn
connection, so that it can interoperate withgo-libp2p
.Host
via the entrypoint constructorlibp2p.New(...)
, injecting your security channel as via theSecurity()
option.Submissions
Submissions open until 14th May 2019 23:59:59 UTC. Winner announced on 15th May 2019.
Here’s the process if you intend to participate:
[my github username without the k]@protocol.ai
now, and tell us who you are and how you plan to approach this![my github username without the k]@protocol.ai
.Protocol Labs employees and contributors are allowed to participate, but WILL NOT be considered for the prize. In the case a Protocol Labs submission wins, the reward will go to the next best non-PL submission.
The text was updated successfully, but these errors were encountered: