Skip to content

fksvs/fisilti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fisilti (Whisper)

Fisilti is a secure, ephemeral secret sharing platform built with Go and Vanilla JavaScript.

It allows you to send passwords, API keys, or sensitive text via a link that self-destructs immediately after being viewed once. Designed with a "Zero-Knowledge" architecture, the server never sees the plaintext data or the decryption keys.

Features

  • Zero-Knowledge Architecture: Encryption happens in the browser using the Web Crypto API. The decryption key is contained in the URL anchor (#) and is never sent to the server.

  • Burn-on-Read: Secrets are permanently deleted from the server memory the moment they are retrieved.

  • Double Encryption: 1.Client Layer: AES-256-GCM (Key generated by browser) 2.Server Layer: AES-256-GCM (Key generated by server on startup).

  • Ephemeral Storage: All data is stored in RAM. Restarting the server wipes all secrets instantly.

  • Secure Defaults: Enforces HTTPS/TLS to enable browser cryptography features.

  • Modern UI: Responsive design with automatic Dark/Light theme switching.

Architecture

Fisilti uses a Client-Side Encryption model to ensure privacy.

The Write Flow

  1. Client (Browser): Generates a random 32-byte ClientKey.

  2. Client: Encrypts the secret: AES-GCM(ClientKey, Secret).

  3. Client: Sends the Encrypted Blob to the server (via POST).

  4. Server: Encrypts the blob again using its internal MasterKey (Defense in Depth).

  5. Server: Stores the double-encrypted data and returns a random ID.

  6. Client: Constructs the final link: https://site.com/view/{ID}#{ClientKey}.

The Read Flow

  1. Recipient: Clicks the link. The browser sends GET /view/{ID} to the server.

    • Note: The browser does not send the #{ClientKey} part to the server.
  2. Server: Looks up ID. If found, decrypts its layer (MasterKey) and returns the Encrypted Blob.

  3. Server: Immediately deletes the record from memory.

  4. Client: Reads #{ClientKey} from the address bar.

  5. Client: Decrypts the blob locally to reveal the secret.

Installation & Usage

Prerequisites

  • Go 1.21+ installed.

  • OpenSSL (for generating development certificates).

  • Docker (if you want to run the project as container)

  1. Clone the Repository
git clone https://github.com/fksvs/fisilti.git
cd fisilti
  1. Generate SSL Certificates

Since the Web Crypto API requires a secure context (HTTPS), you must generate self-signed certificates for local development.

mkdir certs
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes -subj '/CN=localhost'
  1. Run the Server
go run cmd/main.go
  1. Access the Application

Open your browser and navigate to:

https://localhost:8080

Note: You will see a security warning because the certificate is self-signed. Click "Advanced" -> "Proceed" to accept it.

Building with Docker

  1. Build the project
docker build -t fisilti .
  1. Run the container

Generate the certificates first!

docker run -d -p 8080:8080 -v "$(pwd)"/certs:/app/certs:Z fisilti:latest

Contributing

Pull requests are welcome. For bug fixes and small improvements, please submit a pull request. For major changes, please open an issue first to discuss what you would like to change.

License

This project is free software; you can redistribute it and/or modify it under the terms of the GPLv3 license. See LICENSE for details.

About

Share sensitive information securely.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published