{"id":15150043,"url":"https://github.com/amnesica/kryptey","last_synced_at":"2025-04-04T07:08:43.628Z","repository":{"id":165163351,"uuid":"640224990","full_name":"amnesica/KryptEY","owner":"amnesica","description":"Android keyboard for secure E2EE communication through the signal protocol in any messenger. Communicate securely and independent, regardless of the legal situation or whether messengers use E2EE","archived":false,"fork":false,"pushed_at":"2024-04-21T18:54:45.000Z","size":9318,"stargazers_count":733,"open_issues_count":21,"forks_count":34,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-04T07:08:38.647Z","etag":null,"topics":["android","android-keyboard","chat-control","chatcontrol","chatkontrolle","chatkontrolle-stoppen","e2ee","e2ee-encryption","end-to-end-encryption","input-method","java","keyboard","libsignal","messenger","privacy","security","signal-android","signal-protocol","stop-scanning-me"],"latest_commit_sha":null,"homepage":"","language":"Java","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/amnesica.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-13T11:46:40.000Z","updated_at":"2025-03-31T18:25:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"8ee59a38-1655-4d6a-9a27-deb8d7f4a154","html_url":"https://github.com/amnesica/KryptEY","commit_stats":{"total_commits":21,"total_committers":3,"mean_commits":7.0,"dds":0.1428571428571429,"last_synced_commit":"704236a091fc78162e0569e0bbfff1c4137e3a67"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amnesica%2FKryptEY","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amnesica%2FKryptEY/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amnesica%2FKryptEY/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amnesica%2FKryptEY/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amnesica","download_url":"https://codeload.github.com/amnesica/KryptEY/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247135144,"owners_count":20889421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["android","android-keyboard","chat-control","chatcontrol","chatkontrolle","chatkontrolle-stoppen","e2ee","e2ee-encryption","end-to-end-encryption","input-method","java","keyboard","libsignal","messenger","privacy","security","signal-android","signal-protocol","stop-scanning-me"],"created_at":"2024-09-26T14:01:50.853Z","updated_at":"2025-04-04T07:08:43.607Z","avatar_url":"https://github.com/amnesica.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"static/logo/logo.png\" height=\"150\" title=\"KryptEY Logo\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eKryptEY - Secure E2EE communication\u003c/h1\u003e\n\n![GitHub version](https://img.shields.io/badge/version-v0.1.5-brightgreen)\n![Chatkontrolle stoppen](https://img.shields.io/badge/chatkontrolle-stoppen-blueviolet)\n![Stop scanning me](https://img.shields.io/badge/stop-scanning%20me-blueviolet)\n\nAn Android keyboard for secure end-to-end-encrypted messages through the signal protocol in any messenger.\nCommunicate securely and independent, regardless of the legal situation or whether messengers use\nE2EE. No server needed.\n\nKryptEY was created by [mellitopia](https://github.com/mellitopia)\nand [amnesica](https://github.com/amnesica).\n\n## Motivation\n\nBreaking of end-to-end encryption (E2EE) by laws such as the planned EU chat control is an ongoing\nissue. Content in messengers that use E2EE, such as Whatsapp or Signal, could thus be monitored by\nthird parties. E2EE is often, but not always, standard in messengers. There are proven methods for\nE2EE such as PGP. However, these methods are sometimes cumbersomely integrated and require a lot of\neffort to use.\n\nKryptEY is an Android keyboard that implements the Signal protocol. The keyboard works\nmessenger-independently and both the X3DH Key Agreement Protocol and the Double Ratchet Algorithm\nwork without a server, thus it enables a highly independent use of the protocol.\n\n## Screenshots\n\n\u003cdiv style=\"display:flex\" align=\"center\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/06.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/07.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/08.jpg\" width=\"10.5%\"\u003e\n  \u003cimg alt=\"App image\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/09.jpg\" width=\"10.5%\"\u003e\n\u003c/div\u003e\n\n## Features\n\nBased upon the [Simple Keyboard](https://github.com/rkkr/simple-keyboard) KryptEY adds a view above\nthe Keyboard for the E2EE functionality.\n\n- use E2EE through Signal Protocol in any messenger\n- encryption/decryption of messages\n- enter message through separate text field in keyboard\n- use clipboard to read messages\n- manage contacts in own contact list in keyboard\n- message log to view sent/received messages\n- send messages as plain JSON (raw mode) or hidden in a decoy text (fairytale mode)\n- verification of E2EE functionality via fingerprint\n- Q\u0026A view helps with questions\n- dark \u0026 light theme\n\nSee [this](/KRYPTEY.md) document for further information on how KryptEY is working.\n\n## Demo\n\nConversation between Alice (left) and Bob (right) in the Signal Messenger using KryptEY.\n\n\u003cdiv style=\"display:flex;\" align=\"center\"\u003e\n\u003cimg alt=\"App image\" src=\"static/screenshots/demo.gif\" width=\"80%\"\u003e\n\u003c/div\u003e\n\n## Download\n\n\u003ca href='https://f-droid.org/en/packages/com.amnesica.kryptey/'\u003e\u003cimg alt='Get it on F-Droid' src='https://gitlab.com/fdroid/artwork/-/raw/master/badge/get-it-on-en.png' height='60'/\u003e\u003c/a\u003e\n\u003ca href='https://android.izzysoft.de/repo/apk/com.amnesica.kryptey'\u003e\u003cimg alt='Get it on IzzyOnDroid' src='https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png' height='60'/\u003e\u003c/a\u003e\n\u003ca href='https://github.com/amnesica/KryptEY/releases'\u003e\u003cimg alt='Get it on Github' src='static/github/get-it-on-github.png' height='60'/\u003e\u003c/a\u003e\n\nKryptEY requires Android 8.0 or newer. If you need instructions on how to use the app, see our\nhelp [here](/HELP.md)\n\n## Privacy\n\nRead our privacy statement [here](/PRIVACY.md)\n\n## Permissions\n\n- VIBRATE: Required for vibrations on key press\n\n## Security\n\nThe existing security properties for the Signal Protocol are also valid for the keyboard.\n\nThe elliptic curve X25519 with SHA-512 is used in the X3DH Key Agreement Protocol from the applied\nSignal library. The hash function SHA-256 is used for the various chains and AES-256 with CBC (\nPkcs#7) is used for the encryption of the messages. SHA-512 is also used to generate the\nfingerprint, the representation of the public key used for encryption.\n\n## Limitations\n\nThe keyboard was designed as a POC and only allows 1-to-1 conversations. However, the application\ncan also be used in a group chat to a limited extent. Here, a message can be directed to a\nspecific chat partner and not to all people. Other participants of the group chat cannot decrypt\nthe message.\n\nText messages in Telegram are getting copied as HTML and not as plain text. When decoding the\nmessage with the fairytale mode the copied message is compromised and can't be read properly.\nTherefore, it can't be decoded at all. However, the raw mode works properly. When using KryptEY\nwith Telegram we recommend the raw mode.\n\nSome messengers like Threema only allows up to 3500 bytes per message. Therefore, different\ncharacter input limitations apply. To stay under the 3500 bytes limit, only 500 characters are\nallowed for raw and fairytale mode. For convenience these limitation applies for all messengers.\n\n## Used libraries\n\n- [Signal Protocol (android)](https://github.com/signalapp/libsignal)\n- [Jackson](https://github.com/FasterXML/jackson)\n- [Protobuf (lite)](https://github.com/protocolbuffers/protobuf/tree/main/java)\n- [JUnit4](https://github.com/junit-team/junit4)\n\n## Credits\n\n- [AOSP Keyboard](https://android.googlesource.com/platform/packages/inputmethods/LatinIME/)\n- [Simple Keyboard](https://github.com/rkkr/simple-keyboard)\n- [OpenBoard](https://github.com/openboard-team/openboard)\n- [FlorisBoard](https://github.com/florisboard/florisboard)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famnesica%2Fkryptey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famnesica%2Fkryptey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famnesica%2Fkryptey/lists"}