{"id":23447577,"url":"https://github.com/retr0kr0dy/ghostschat","last_synced_at":"2026-06-16T20:31:31.024Z","repository":{"id":229432002,"uuid":"776720552","full_name":"Retr0Kr0dy/GhostsChat","owner":"Retr0Kr0dy","description":"Chat and file transfer securely, 🛡️ embrace anonymity, and unleash your inner cyber ninja! 🥷💻💾 ","archived":false,"fork":false,"pushed_at":"2024-03-24T10:30:44.000Z","size":384,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-26T09:13:01.648Z","etag":null,"topics":["aes","annonymized","chat","coding","cryptography","development","file-transfer","python","rsa","secured-communication","security"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Retr0Kr0dy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-24T09:51:40.000Z","updated_at":"2024-03-24T11:26:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"e6e31364-620e-4d42-a813-019490635b0a","html_url":"https://github.com/Retr0Kr0dy/GhostsChat","commit_stats":null,"previous_names":["retr0kr0dy/ghostschat"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Retr0Kr0dy/GhostsChat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Retr0Kr0dy%2FGhostsChat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Retr0Kr0dy%2FGhostsChat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Retr0Kr0dy%2FGhostsChat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Retr0Kr0dy%2FGhostsChat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Retr0Kr0dy","download_url":"https://codeload.github.com/Retr0Kr0dy/GhostsChat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Retr0Kr0dy%2FGhostsChat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34423214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes","annonymized","chat","coding","cryptography","development","file-transfer","python","rsa","secured-communication","security"],"created_at":"2024-12-23T21:18:16.701Z","updated_at":"2026-06-16T20:31:31.001Z","avatar_url":"https://github.com/Retr0Kr0dy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GhostsChat\n\n\u003e [!WARNING]\nDo not fully trust GhostsChat as a secured-confidential messaging app. It's an IRC PoC thing.\n\nGhostsChat is a lightweight chat providing annonymity and simplicity.\n\n## Summary\n- [Usage](#Usage)\n- [HowItWorks?](#HowItWorks?)\n\n\n## Usage\n\nFirst you will need to generate a configuration file for the server and any client you want to have.\n\nYou need to use [GhostsChat-confgen.py](./GhostsChat-confgen.py) :\n\n![Alt_text](./assets/confgen.png)\n\nAs you can see, currently, you need to type the AES key you want to use, it will be changed in newer version.\n\nAfter creating configuration files, you should be able to start using GhostsChat.\n\nsimply type `python3 GhostsChat-client.py \u003cghosts-client-conf-file\u003e`.\n\n\u003e [!NOTE]\nCurrently, server is taking conffile in argument. See --help.\n\n## HowItWorks?\n\n##### Server part is just used to broadcast a message to every connected clients.\n\nThe server is untrusted, therefore, it only have access to encrypted data (no access to keys), and it doesn't store it.\n\n##### The client part is more complex.\n\nSimilar to the server it doesn't store anything, so wether you quit and reconnect or you weren't connected when the import message arrived, you missed it.\n\nThus GhostsChat is meant to be used along annother chat app (discord, telegram) so you can bring people for a meeting on GhostsChat.\n\nClient use AES-256-GCM (AES with salt, to simplify) for message encryption and RSA-4096 for signing packets.\n\nMessages are sent with form : \n```python\npayload = {\n    \"nickname\" : NICKNAME,\n    \"time\" : TIME,\n    \"sign\" : [int(byte) for byte in bytearray(SIGN)],\n    \"message\" : message\n}\n```\nThe `RsaSign()` sign the payload using the SHA-256 hashed message.\n\nAfter Encryption, payload look like this:\n\n```\n[12 bytes of nonce for AES-GCM][Encrypted data (len is multiple of the key len used)]\n```\n\nFor bigger messages (and for file transfer in future version), Chunk splitting functions are used to breakdown the data to send in smaller 4096 bytes chunks.\n\n\n\u003e [!WARNING]\nRemember, do not fully trust GhostsChat as a secured-confidential messaging app. It's an IRC PoC thing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretr0kr0dy%2Fghostschat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fretr0kr0dy%2Fghostschat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretr0kr0dy%2Fghostschat/lists"}