For all the crypto-anarchists, here’s a free project you can host on your server, allowing you to do some ‘crazy things,’ as Elisabêth Borne would say. This tool is called CryptBoard and is essentially an encrypted clipboard for securely copying and pasting text and files, enabling sharing between different machines.
Designed for excellent anonymity, CryptBoard uses hybrid RSA + AES client-side encryption. The client makes an anonymous authorization request to the server, obtaining a random UID, and each message is then encrypted in AES with a random 256-bit key.
This random AES key is encrypted by the user’s public RSA key and sent to the server. Upon receiving the message, the recipient decrypts the AES key with their RSA private key and decodes the AES-encoded message.
Users need to share their UID and RSA public key via a link or QR code to read and write to each other, but the private key is not shared with the server or other clients. Additionally, the integrity of the public key and UID can be visually verified by inspecting the avatar generated from the hash of the public key and UID.
Though it might sound a bit complex, this method resolves certain problems associated with sharing files or text between machines and VMs, or machines controlled remotely, without compromising on security. As CryptBoard comes in the form of a website, there’s no need to install a tool to share secrets like passwords.
For those interested in encryption, click here. The code is available on Github, allowing you to audit or improve it.
To install it on your machine, you’ll need Docker. Follow these steps:
- Clone the code:
git clone https://github.com/MihanEntalpo/cryptboard.io.git
- Install Docker and Docker Compose, as well as Nginx.
- Create the config file:
cp web-app/.env.docker.example web-app/.env.docker
- Generate the necessary private and public keys:
ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key
# No passphrase
openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub
- Add the contents of these files to the JWT_PUBLIC_KEY and JWT_PRIVATE_KEY variables in the .env.docker file:
LINE=$(cat ./web-app/jwtRS256.key | tr '\n' '$' | sed 's|\$|\\\\n|g;s|^|JWT_PRIVATE_KEY=|g'); sed -i "s|^JWT_PRIVATE_KEY.*|$LINE|g" -i ./web-app/.env.docker
LINE=$(cat ./web-app/jwtRS256.key.pub | tr '\n' '$' | sed 's|\$|\\\\n|g;s|^|JWT_PUBLIC_KEY=|g'); sed -i "s|^JWT_PUBLIC_KEY.*|$LINE|g" -i ./web-app/.env.docker
- Set the SERVER_HOST and SERVER_PORT variables in the .env.docker file, then create the Docker image:
./build-docker-images.sh
- Launch Docker Compose:
./docker-compose.sh up -d
- Check if everything works by going to the URL http://127.0.0.1:PORT/.
- Configure Nginx as a reverse proxy for this local server and enable SSL if necessary using the conf/nginx/docker-proxy pass.conf file as a template for your Docker configuration.
Ensure you set the correct hostname, proxy_pass port, log file location, and LetsEncrypt key and certificate files.
And if you’re feeling lazy, the tool can still be used here.”