ceof is the implementation and documentation of EOF (Eris Onion Forwarding), the secure, peer-to-peer (p2p), decentralised anonymous chat network.

You can read the bachelor thesis, which describes the motivation and goals or you can view the poster that was used on the presentation.


  • python3
  • python-gnupg (the package python3-gnupg exists for Debian)
  • virtualenv (optional, if isolating the environment for ceof)


  • Clone the git repo

    git clone git://

It is mirrored on github:

When the distro does not ship a Package for python3-gnupg

  • Create an isolated python environment

    virtualenv -p /usr/bin/python3 python-env

  • Activate the python environment and install gnupg

    . ./python-env/bin/activate pip install python-gnupg

Usage preparation

Create public/private key pair

This may take some time, try to keep your computer busy so you can gather more entropy.

cd ceof
./src/bin/ceof crypto -g --name "Nico@Tee" --email-address

Verify that everything worked fine:

./src/bin/ceof crypto --show

Prepare a peer to chat with

Do the following commands on your host and tell your friend to do the same vice versa:

Show the fingerprint of your PGP key

./src/bin/ceof crypto --fingerprint

Show your public key for export

./src/bin/ceof crypto --export

Once you have retrieved the public key, import it

./src/bin/ceof crypto -i < public-key-file

Create your friend as a peer using a name and its fingerprint

./src/bin/ceof peer --add yourfriend --fingerprint CF7F9EE965AFA1B5A4D1D4D1385D23177A80B7B0

Add an address of your peer:

./src/bin/ceof peer apic  --add-address tcp://

Warning You need at least 6 peers for ceof to work. 6 peers is the minimum number of peers required by the protocol to function safely.

Prepare noise

ceof sends regulary noise to prevent people from recognising when you send messages. To do so, ceof requires input for noise. You can use any kind files, but for debugging purpose text files are recommened.

For example, you could use the content of /usr/share/doc as a base:

mkdir -p ~/.ceof/noise
find /usr/share/doc -name \*.gz -exec zcat {} \; > ~/.ceof/noise/usr-share-doc

(abort after a minute or so)

Test that ceof can use the noise:

./src/bin/ceof noise

Prepare addresses to listen on

Add one tcp address to listen on

./src/bin/ceof listener --add tcp://

Show enabled listeners:

./src/bin/ceof listener --list

Start the server

./src/bin/ceof server


There are two IRC (!) channels, in which development takes places:

  • !eof - German
  • #cstar - Multi language (German/English)

You can subscribe to the !eof mailinglist. You can also contact me directly.