- Description
- Features
- Technology Stack
- Registration Process
- Architecture Description
- Frameworks & APIs
- Project Folder Structure
- Installation
- Demo
- MFA Demo
- Responsive Design Demo
- License
- Contact
Cypher is a cutting-edge encrypted chat application designed to prioritize user privacy and security. With end-to-end encryption, your messages remain confidential and secure, ensuring peace of mind in your communications. We don't store any IP addresses, metadata or user-linked data; it is perfectly anonymous.
- End-to-End Encryption: Messages are encrypted from sender to receiver, safeguarding your data from prying eyes. Every message stored on the database is encrypted and cannot be read even if the database is breached.
- Real-Time Messaging: Fast and seamless chat experience.
- Cross-Platform Support: Accessible on multiple devices for convenient communication.
- NO Metadata Storage: Prioritizes privacy by storing zero user metadata.
- React.js: Frontend framework for building the user interface.
- Redux: State management for handling user authentication and messaging.
- TailwindCSS: Utility-first CSS framework for styling the application.
- Axios: HTTP client for API requests.
- Socket.io-client: For real-time messaging between users.
- Node.js: Backend runtime for handling requests.
- Express.js: Lightweight framework for handling API routes and middleware.
- MongoDB: NoSQL database for storing user data and messages.
- Mongoose: ODM (Object Data Modeling) for interacting with MongoDB.
- Socket.io: WebSockets for real-time messaging.
- Bcrypt.js: Password hashing for secure authentication.
- Jsonwebtoken (JWT): Token-based authentication for user sessions.
- Cloudinary: Media storage for user profile pictures and message attachments.
Upon user registration, the following occurs:
- The client generates a 2048-bit RSA key pair (public and private key).
- The client encrypts the private key with the user's master password.
- The client sends the registration data (username, public key, and encrypted private key) to the server.
- The server stores the information in MongoDB.
- The server acknowledges the successful registration and redirects the client to the login page.
-
Client Side
- User Interface (UI): Allows users to send/receive messages and manage contacts.
- Local Key Management: Generates and stores private keys encrypted with the master password.
- Encryption Module: Encrypts outgoing messages using the recipient's public key and decrypts incoming messages with the user's private key.
-
Server Side
- Authentication Module:
- Handles user login with the master password.
- Validates identity and grants access to stored data.
- Database Connection: Stores users' data securely in MongoDB.
- Message Queue: Stores encrypted messages so that they are retrieved by the recipient.
- Key Exchange Service: Sends user's public key for ensuring message encryption.
- Authentication Module:
-
Database
- Stores public keys.
- Stores encrypted messages (encrypted with recipientβs public key).
- Stores encrypted private keys (encrypted with master passwords).
For more details, refer to the project architecture documentation.
- We use MongoDB Atlas as our cloud-hosted database.
- The backend interacts with MongoDB through the Mongoose library for structured data modeling.
- To store images and videos, we use Cloudinary.
- It provides secure cloud-based storage and delivers media via HTTPS links.
- We use Socket.io to facilitate real-time communication between the client and server.
- This enables instant message delivery and live updates.
Encrypted-Chat-App/
β
βββ client/ # Frontend (Client-side) code
β βββ public/ # Static files (e.g., index.html, images, icons, manifest)
β βββ src/ # React source code
β β βββ assets/ # UI assets (logos, backgrounds)
β β βββ components/ # UI Components (e.g., ChatBox, MessageList, SearchUser)
β β βββ layout/ # Layout-related components
β β βββ pages/ # Application pages (Home, Register, ForgotPassword)
β β βββ redux/ # Redux store and user management
β β βββ routes/ # Route definitions
β β βββ services/ # API calls and WebSocket handlers
β β βββ utils/ # Helper functions (e.g., encryption handling, file uploads)
β β βββ App.js # Main App entry point
β β βββ index.js # React root rendering logic
β β βββ index.css # Global styles
β β βββ tailwind.config.js # Tailwind CSS configuration
β βββ package.json # Frontend dependencies and scripts
β βββ package-lock.json # Package lock file
β βββ .env # Environment variables
β βββ .gitignore # Git ignore rules
β βββ README.md # Client documentation
β
βββ server/ # Backend (Server-side) code
β βββ config/ # Configuration files (e.g., DB connection)
β βββ controller/ # API route handlers (auth, search, user management)
β βββ models/ # Database schemas/models (User, Conversation)
β βββ routes/ # API route definitions
β βββ services/ # Business logic (e.g., conversation retrieval, token management)
β βββ socket/ # WebSocket implementation for real-time messaging
β βββ .env # Environment variables
β βββ .gitignore # Git ignore rules
β βββ docker-compose.yml # Docker setup for backend services
β βββ index.js # Main Express server setup
β βββ package.json # Backend dependencies and scripts
β βββ package-lock.json # Package lock file
β βββ README.md # Server documentation
β βββ Dockerfile # Docker container configuration
β
βββ install.sh # Installation script for automated setup
βββ LICENSE # License file
βββ project_architecture.md # Documentation of project architecture
βββ README.md # Main project README with setup instructions
βββ .git/ # Git repository metadata
βββ .gitignore # Git ignore rules
βββ docker-compose.yml # Multi-service Docker setup (client, server, database)
βββ details/ # Additional documentation or setup files
- Clone the repository:
git clone https://github.com/leonfullxr/Cypher.git
- Navigate to the project directory:
cd Cypher
- Install dependencies and start the server:
cd server npm install npm run dev &
- Start the client:
cd ../client npm install npm start &
Alternatively, you can use the provided install.sh
script:
bash install.sh
This project is licensed under the MIT License. See the LICENSE file for details.
For inquiries or support, reach out to us at [email protected].