Testing Raven-Anonymous message broadcasting based on libp2p and Dandelion++

Hi Everyone,

I’ve been working on Raven, it’s an anonymous message broadcasting protocol based on libp2p’s gossibsub and Dandelion++. Dandelion++ is a light weight privacy preserving protocol against de-anonymization attacks on p2p networks, eg. most blockchain and messaging systems.

I have a messaging client and implemented dandelion++ in gossipsub https://github.com/rairyx/go-libp2p-pubsub/tree/dandelion++.

I’m excited about using Whiteblock’s performance/scalability testing suits for Raven, I did some simple tests with go-libp2p-pubsub-benchmark-tools(with some customization needed for my client) on local machine, it worked so far(with 30 nodes)

I’d like to do more scalability tests(1000+ nodes) on multiple machines with Genesis on various scenarios(latency, topology, attacks, node failures).

Looking forward for your ideas and feedback.

2 Likes

Hey Rai,

Thank you for your interest and using Whiteblock Genesis!

We will give you shortly early access to our software so you can perform more testing. On the topic of anonymized gossiping, we published a post on the topic recently and will probably perform more research: Proposal: No-tag back Gossiping

It looks like your approach is to preserve anonymity consists in using a stem approach to first set up connections, and then use noise to mask message exchange.

Do you control for the target of the message? How do you know in advance who the message is for and do you have a handshake even offline for the purpose of establishing encryption between participants?

How do you handle dynamic networks with new entrants and exits constantly happening? Wouldn’t your pattern degrade over time and require to rerun the first phase of the network establishment?

2 Likes

Hey Antoine,

Thank you for your reply and questions. I’m excited to have early access of your software. I’ll look into your no-tag back gossiping, as I’m very interested in new broadcasting/gossiping protocols. What do you think of it comparing to gossipsub?

Here is my answer to your questions.

The control of the target of message is done by gossipsub

The handshake is done by TLS 1.3 when nodes connect with each other.

No sure about handling for dynamic entrants and exit. The routing is Kadmelia if that’s what you mean.

Every node proceeds with epoch, the anonymous path in the stem phase would change for every epoch for graph-learning attack. Thanks.

Do you have a Dockerfile or image for your implementation? We can get you set up on the platform and help run some initial tests.

Do you mean something like gossipsub-testing? I tried to build one, I figured it needs some customization of go-libp2p-pubsub-benchmark-tools, I’ll try it again.

I built a Dockerfile based on gossip-testing, it contains customized go-libp2p-pubsub-benchmark-tools for Raven. I hope it works.

2 Likes

Hey Rai,

Now that you have a Dockerfile, it should be simple to write a test definition YAML file that you can deploy to Whiteblock Genesis. Take a look here at the quick start guide.

Also check out our gossipsub test definition file here for more guidance.

Let me know if you need additional support, we are happy to help :slight_smile:

1 Like

Hey Rene,

Thanks for your help! I’ll check it out and let you how it goes.

2 Likes

Hey Rene,

I have a few specific questions regarding the test, can I reach you out for some help?

Hi Rene,

I have a question regarding the docker image used for gossipsub: “gcr.io/whiteblock/gossipsub:master” in gossipsub.yaml, is this image built from https://github.com/whiteblock/dockerfiles/blob/master/gossipsub/Dockerfile? If I want to make a yaml for Raven, all I need to do is to replace the gossipsub image field in gossipsub.yaml with the Raven image build from the respective dockerfile https://github.com/rairyx/gossipsub-testing/blob/master/docker/Dockerfile, am I right?
And if I want to spin more than 4 nodes, do I just copy the setting for a single node under services for node n in yaml?
Also where can I see the metrics from the test result?(e.g. TotalNanoTime, LDH)

Thank you very much!