I am thinking of an app that could allow people to share text so they can post grievances about a totalitarian government in a p2p network. It has to be p2p because a website can be blocked. This would be for locals to post about their mayor or the neighborhood cop. Let's not worry about social engineering, let's only worry about the technical side of it.

Is it possible to 100% obfuscate the origin of the message creator? I know that TOR is not 100% secure. I imagine something like if someone were to send a message from a burner phone or the message is encrypted and split into multiple places then reassembled later. Meanwhile, the reader's origin doesn't need to be 100% obfuscated since they can't arrest millions of people just for reading it. They only want to catch the message creator.

The obfuscation of the original sender is paramount because without that, people would be too afraid to post anything. Right now there are always dissenters, but they are few and they post to places like facebook. Then eventually they get arrested.

Also the service should only allow text because there is potential for governments to introduce CP into it to destroy the legitimacy of it.

Do any of you know of an app like that? Would any of you be interested in modifying a TOR client to allow easy access to location based message boards?

  • The last paragraph makes your question close to an off-topic request for off-site resources. The remainder of the question is very broad. If there were a quick answer how to build a better Tor, it would already have been done.
    – 5gon12eder
    Mar 23 '17 at 17:44
  • Is there the possibility of using a central computer as a server to remove any sender information before passing the message on? You said that a website can be blocked, but you don't really need to have a website to put up a server somewhere acting as a node on this p2p network.
    – T. Sar
    Mar 23 '17 at 17:52

You can use something like that:

  1. User connects to server, authenticates the server, and negotiate a set of keys

  2. If the user have something to post, he encrypts the message with the key, padding it to fit an arbitrary fixed buffer, and larger messages are broken into pieces and sent later

  3. If the user don't have anything to post, client generates cryptographically secure random garbage for the same buffer size

  4. From time to time (10 sec, 1 min, 30 min) client will send the message

  5. Server decrypts the data with its private key, determines if it's a complete message, part of a large message, or garbage, and reacts according to the message type

In this case, as long as you protect the server, nobody can know if the user is reading messages or posting messages, as the client keeps sending the same kind of data periodically: same interval, same size, same entropy.

Data traffic analysis will fail, as the client will send the same data size with the same interval no matter if the user is posting or not. Posting messages longer than the buffer will take more time, but it will be worth if the main use of the system is anonymity.

  • 1
    That's a really interesting idea. I was also thinking in the lines of using a server to remove sender information, but your answer goes a step beyond. You have my +1!
    – T. Sar
    Mar 23 '17 at 17:54

How about creating a normal web page, and whenever a user connects to this page, there are parameters given that check for a message? Kind of cover the information inside a POST parameter, or let the user upload an image in which you encrypt the message with steganography? (You could use every 17th pixel's red value to transmit an ASCII character since it has a 8-bit red channel IIRC).

Other covert ops you can do:

Hide the message inside a DNS request.

  • DNS channel can use UDP packets without overhead through 3-way handshake
  • UDP packets can be spoofed
  • DNS is usually whitelisted for firewalls since there are DNS packets inside a network all the time without drawing suspicion

You can go even further and use a technique called an "acrostic message".

Imagine you want to send a 6 byte long string and you want to attach every byte to a DNS request going to a server. You can make a request for the following servers (only fictive examples):


If you encrypt the message first and then add to DNS steganography, they are still encrypted even if they get sniffed out.

One other practice to deceive would be to ping the servers I listed above and spoof the sender of the ping request so that they would send an answer to the server you are listening with. This is common practice when DDoSing (some forms at least) or penetration testing (deceiving). If I am not mistaken they should have a timestamp so you can reassemble the message again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.