mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-22 17:12:14 +00:00
32 lines
1.8 KiB
Markdown
32 lines
1.8 KiB
Markdown
# Connection Encryption
|
|
|
|
libp2p can leverage the encrypted communications from the transports it uses (i.e WebRTC). To ensure that every connection is encrypted, independently of how it was set up, libp2p also supports a set of modules that encrypt every communication established.
|
|
|
|
We call this usage a _connection upgrade_ where given a connection between peer A to peer B, a protocol handshake can be performed that gives that connection new properties.
|
|
|
|
A byproduct of having these encrypted communications modules is that we can authenticate the peers we are dialing to. You might have noticed that every time we dial to a peer in libp2p space, we always use its PeerId at the end (e.g /ip4/127.0.0.1/tcp/89765/p2p/QmWCbVw1XZ8hiYBwwshPce2yaTDYTqTaP7GCHGpry3ykWb), this PeerId is generated by hashing the Public Key of the peer. With this, we can create a crypto challenge when dialing to another peer and prove that peer is the owner of a PrivateKey that matches the Public Key we know.
|
|
|
|
# 1. Set up encrypted communications
|
|
|
|
We will build this example on top of example for [Protocol and Stream Multiplexing](../protocol-and-stream-multiplexing). You will need the `@chainsafe/libp2p-noise` module to complete it, go ahead and `npm install @chainsafe/libp2p-noise`.
|
|
|
|
To add them to your libp2p configuration, all you have to do is:
|
|
|
|
```JavaScript
|
|
const Libp2p = require('libp2p')
|
|
const { NOISE } = require('@chainsafe/libp2p-noise')
|
|
|
|
const createNode = () => {
|
|
return Libp2p.create({
|
|
modules: {
|
|
transport: [ TCP ],
|
|
streamMuxer: [ Mplex ],
|
|
// Attach noise as the crypto channel to use
|
|
connEncryption: [ NOISE ]
|
|
}
|
|
})
|
|
}
|
|
```
|
|
|
|
And that's it, from now on, all your libp2p communications are encrypted. Try running the example [1.js](./1.js) to see it working.
|