Superball: Anonymous Nostr Posting


https://laantungir.github.io/img_repo/0246a1c67289367573fcc552dffdc54867c15cca200572e12499db2d907df66b.jpg

This is an experiment I call #Superball.

Superballs are a way to post nostr events that help preserve the anonymity and location of the sender. Superballs use timing delays and add or subtract event padding to help defeat timing and size analysis, such as is used to help defeat TOR anonymity.

A Superball is a wrapped nostr event that is posted to a relay and picked up by a "Thrower". A Thrower is a program that watches relays for Superballs that are marked for them. The Thrower grabs the Superball, decrypts the outer shell of the Superball and reads the instructions inside, which tell the Thrower:

1. What relays to throw the superball to next.
2. How long to wait before throwing the superball.
3. Whether to add or remove padding to the superball to obscure its size.

When you create a Superball, you can chain throwers together. Depending on where the Thrower is in the chain, the Thrower will either rewrap the Superball with optional padding and post it to relays where it can be picked up by the next Thrower, or post the final event.

But enough talk. It's best understood by using it.

I have implemented the protocol in two web pages, which you can use to test it out:

This page lets you create and throw a superball. You can log in as yourself if you want, and just throw a superball. There are already throwers up. https://laantungir.net/superball/superball.html


This page lets you create a thrower. You can open as many of these pages as you want to create as many throwers as you want. You can watch your superballs propogate through your throwers. Don't log in as yourself. Log in as a new account to create a thrower. https://laantungir.net/superball/thrower.html

If you don't like reading instructions, go ahead and dive in. You can probably figure it out if you are nostr savy.


If you like instructions, keep reading:

QUICK START ONE- Throw a single bounce Superball

Go here to create a superball and throw it:

https://laantungir.net/superball/superball.html

1. Sign in with your favorite nostr method, or create a new throwaway test key.
https://laantungir.net/superball/img/sb1.png

2. Create a type 1 event that will eventually be posted.
https://laantungir.net/superball/img/sb2.png

3. Click on the Add Bounce button.
https://laantungir.net/superball/img/sb3.png
4. You have to, at a minimum, choose a thrower, along with what relays you want the thrower to throw your event to. The default delay is 30 seconds.
5. Click on Throw Superball, with the blue outline.
6. Scroll down to Event Flow Visualization. This will show you how your Superball will bounce around NOSTR.
https://laantungir.net/superball/img/sb4.png
7. Click on Throw Superball.
8. Click on Reset Builder to start again.

Quick Start Two: Throw a Double Bounce Superball

1. Click on Reset Builder on the bottom right of the page.
2. Repeat steps 1-6
3. Click on Add Bounce, and add another bounce. Note that with 2 or more bounces, you can now specify that the thrower add padding to the Superball, to defeat any size analysis of your superball. 

Quick Start Three: Create and Use Your Own Thrower

1. In a separate browser window, go to https://laantungir.net/superball/thrower.html
2. Log in not with your own key, but with a key you want to use for your Thrower that you are going to create. Jot down the key.
https://laantungir.net/superball/img/thrower01.png
3. Click on Edit Thrower Info, and give your thrower a fun name and description. Save the info. You may have to log back in for that information to display properly on this page.
4. Go to Edit Relays to add relays that you want your Thrower to be able to read from and write to. Save Relay Configuration.
5. Test Relays. Because your thrower will be publishing someone else's notes, it can't publish to relays that require authentication. That is what this button does.
6. Click on Start Thrower. Your thrower will then publish a kind 12222 thrower information document. This lets the world know your thrower is alive and active.
7. Go back to https://laantungir.net/superball/superball.html. Under Available Throwers, click on Refresh List and your thrower should appear. The account you logged into on the Superball Builder page has to follow at least one relay that the Thrower publishes to, or you won't see it.
8. Go ahead and create a superball, select your thrower, and throw it.
9. When the Thrower receives the Superball, it will show it in the Event Queue. You can follow the Processing Log if you encounter problems.

Project Link

https://git.laantungir.net/laantungir/super_ball

Inspiration

When I was a kid, I used to buy superballs from gumball machines, go into parking lots, and throw my superballs down as hard as I could onto the pavement. Hours of fun.

The early cypherpunks used Anonymous Remailers. I believe this may have been one of the most anonymous ways to message ever created. Tor and I2P are great, and can't be replaced, but their immediate nature means that they will always be vulnerable to timing attacks. Remailers helped solve this, and I think Superball can do the same on nostr.