{"id":13686341,"url":"https://github.com/zorggomat/FractalCryptGUI","last_synced_at":"2025-05-01T09:31:14.607Z","repository":{"id":43462685,"uuid":"402696118","full_name":"zorggomat/FractalCryptGUI","owner":"zorggomat","description":"Free cross-platform deniable encryption cryptoarchiver ","archived":false,"fork":false,"pushed_at":"2024-08-05T10:20:14.000Z","size":188,"stargazers_count":384,"open_issues_count":0,"forks_count":25,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-08-05T12:07:51.075Z","etag":null,"topics":["aes","aes-256","aes-encryption","cpp","cross-platform","cryptography","deniable-crypto","deniable-encryption","minizip","openssl","openssl-library","plausible-deniability","qt","qt5","qt5-gui","quazip","security","steganography","zlib"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zorggomat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2021-09-03T08:14:31.000Z","updated_at":"2024-08-05T10:20:19.000Z","dependencies_parsed_at":"2024-08-05T12:11:53.134Z","dependency_job_id":null,"html_url":"https://github.com/zorggomat/FractalCryptGUI","commit_stats":null,"previous_names":["zorggish/fractalcryptgui"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zorggomat%2FFractalCryptGUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zorggomat%2FFractalCryptGUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zorggomat%2FFractalCryptGUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zorggomat%2FFractalCryptGUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zorggomat","download_url":"https://codeload.github.com/zorggomat/FractalCryptGUI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224250215,"owners_count":17280522,"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":["aes","aes-256","aes-encryption","cpp","cross-platform","cryptography","deniable-crypto","deniable-encryption","minizip","openssl","openssl-library","plausible-deniability","qt","qt5","qt5-gui","quazip","security","steganography","zlib"],"created_at":"2024-08-02T15:00:30.116Z","updated_at":"2024-11-12T09:30:41.188Z","avatar_url":"https://github.com/zorggomat.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"logo\" src=\"https://raw.githubusercontent.com/zorggish/FractalCryptGUI/master/logo.png\" alt=\"Markdownify\" width=\"200\"\u003e\n  \u003cbr\u003e\n  FractalCrypt\n  \u003cbr\u003e\n  \u003c/h1\u003e\n  \n  \u003ch4\u003eFree cryptoarchiver permitting any number of hidden volumes for deniable encryption\u003c/h4\u003e\n\n  \u003cimg alt=\"Made with C++ badge\" src=\"https://forthebadge.com/images/badges/made-with-c-plus-plus.svg\"\u003e\n  \u003cimg alt=\"Powered by QT badge\" src=\"https://forthebadge.com/images/badges/powered-by-qt.svg\"\u003e\n  \u003cimg alt=\"Built with love badge\" src=\"https://forthebadge.com/images/badges/built-with-love.svg\"\u003e\n  \u003cbr\u003e\n  \u003cimg alt=\"Travis autobuild shield\" src=\"https://img.shields.io/travis/zorggish/FractalCryptGUI?style=flat-square\"\u003e\n  \u003cimg alt=\"Star counter shield\" src=\"https://img.shields.io/github/stars/zorggish/FractalCryptGUI?style=flat-square\"\u003e\n  \u003cimg alt=\"Code grade shield\" src=\"https://img.shields.io/codacy/grade/98d263fe8c7b4f879f2e365b94f80d75?style=flat-square\"\u003e\n  \u003cimg alt=\"License shield\" src=\"https://img.shields.io/github/license/zorggish/FractalCryptGUI?style=flat-square\"\u003e\n  \u003cimg alt=\"Code size shield\" src=\"https://img.shields.io/github/languages/code-size/zorggish/FractalCryptGUI?style=flat-square\"\u003e\n  \u003cimg alt=\"Contribuions shield\" src=\"https://img.shields.io/badge/contributions-welcome!-success?style=flat-square\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n## What is deniable encryption, and what is it used for?\nDeniable cryptography describes encryption methods, enabling to use [plausible denial](https://en.wikipedia.org/wiki/Plausible_deniability#Use_in_cryptography) of existing encrypted messages, which means there is no way to prove the existence of data in the plain text.\n\nIn many countries worldwide (for example, in the [UK](https://www.theverge.com/2017/5/17/15653786/rabbani-encryption-password-charged-terrorism-uk-airport) or the [US](https://www.theregister.com/2017/08/30/ex_cop_jailed_for_not_decrypting_data/)) you may be jailed or face legal issues for refusing to provide your password as required by law enforcement agencies, even if you are not suspected of any law violations.\n\nMoreover, if a powerful group of people (government, a gang of bandits) have a suspicion that you store the necessary information on your laptop (confidential papers, bitcoin wallet), come to you for a search or robbery and find an encrypted file, they most likely will not analyze it for potential vulnerabilities, but [will simply torture you until you tell them the password](https://imgs.xkcd.com/comics/security.png).\n\nFractalCrypt permits an encrypted file with an arbitrary number of keys. If any set of men ask you for a password, and you say that there is no information in the encrypted container or you have forgotten the password, it is far more likely that they will not believe you. Whereas, using FractalCrypt you can safely give away the keys to unclassified volumes, and there is no way to prove that there are actually more volumes than you have disclosed.\n\nIn addition, a file encrypted in such a way, unlike, let us say, a cryptocontainer on an unallocated drive space, can be transferred over the Internet, copied to a USB stick, etc.\n\n\n## How does FractalCrypt work?\nFirst, it creates a cryptocontainer of a user-specified size, filled with random characters. To create the first volume, the program archives the user-specified files to the beginning of the cryptocontainer and encrypts it using the first key. Thus, knowing the first key, you can access the first-layer files and the rest of the cryptocontainer.\n\n\u003cdiv align=\"center\"\u003e\u003cimg alt=\"Cryptocontainer structure\" src=\"https://i.ibb.co/FqY309M/file-struct.png\"\u003e\u003c/div\u003e\n\nTo create the second volume, the program will archive the files in the rest of the cryptocontainer and encrypt it with the second key; So, the first key is also needed to create or access data from the second volume.\n\nThe capability of plausible deniability is that the encrypted file is indistinguishable from noise; There is no way you can find out the amount of data stored in the cryptocontainer.\n\n## How to use FractalCrypt?\nIn order to get N-layer files, the user must enter N passwords.\n\nTo add a new layer (also referred to as a volume) without risk (i.e., overwriting the noise), you should enter all the keys; otherwise, if you enter only a part of the keys, the new layer will be written over the encrypted data.\n\nThe user can also delete a layer, in this case it is overwritten with noise; All layers over it are removed as well, so only the top layer can be safely removed.\n\n## Screenshots\n\u003cdetails\u003e\n  \u003csummary\u003eShow\u003c/summary\u003e\n  \u003cp\u003eStartup window\u003c/p\u003e\u003cimg alt=\"Startup window screenshot\" src=\"https://i.ibb.co/qyNXL68/1.png\"\u003e\u003cbr\u003e\n  \u003cp\u003eCreating new container\u003c/p\u003e\u003cimg alt=\"Creating new container window screenshot\" src=\"https://i.ibb.co/LxFWNx2/2.png\"\u003e\u003cbr\u003e\n  \u003cp\u003eMain window. Two passwords are entered, so it is possible to get the files of the second volume or create a third one \u003c/p\u003e\u003cbr\u003e\u003cimg alt=\"Main window screenshot\" src=\"https://i.ibb.co/gvXXJSZ/3.png\"\u003e\n  \u003cp\u003eArchive creation window\u003c/p\u003e\u003cimg alt=\"Archive creation window screenshot\" src=\"https://i.ibb.co/7tNHd3v/4.png\"\u003e\u003cbr\u003e\n\u003c/details\u003e\n\n## Technical details \nAES-256 is used for encryption in XTS mode.\nArgon2id is used to generate a key with 4 iterations, 128MB memory cost and 1 thread\n\nEach layer, when decrypted, has the following header:\n\n8 bytes - \"fractal\" c-string signature (null-terminated)\n\n8 bytes - the length of the subsequent zip archive in big endian, aligned to 16 bytes\n\n## Contributing\n\nPRs and contributions are welcomed. If you have a contribution in mind, please check out the [Contribution Guide](https://github.com/zorggish/FractalCryptGUI/blob/master/CONTRIBUTING.md) for information on how to do so.\n\n## Building from sources\nFractalCrypt uses the [Qt framework](https://account.qt.io/downloads) (downloading from the official site requires registration), the [OpenSSL library](https://www.openssl.org/) for encryption, and the [QuaZip library](http://quazip.sourceforge.net/) for creation and processing ZIP archives.\n\nQuaZip is a wrapper over the Gilles Vollant's Minizip package (according to the license terms, we inform that the files of these libraries have been changed in our project) which uses the [zlib library](https://www.zlib.net/).\n\n### Windows\nFor Windows, zlib comes with Qt.\n\nYou should individually download and install only OpenSSL, for instance, by following the [link](https://slproweb.com/products/Win32OpenSSL.html).\n\nOpenSSL is supposed to be available at C:\\OpenSSL-Win64, you can change this in your file FractalCrypt.pro. \n\nBy default, Qt will try to link OpenSSL dynamically, in this case you may need the file C:\\OpenSSL-Win64\\bin\\libcrypto-1_1-x64.dll in the directory with executable file.\n\n### Linux\nYou should individually install the zlib and openssl libraries if they are not included in your distro.\n\nOn apt-based systems, this can be done with the following commands:\n```\nsudo apt-get install zlib1g-dev libssl-dev\n```\n#### How to build FractalCrypt without Qt Creator:\n1. Install Qt libs\n```\nsudo apt-get install qt5-default qt5-qmake qtbase5-dev-tools qtchooser libqt5core5a qtbase-abi-5-12-8\n```\n2. Clone this repo\n```\ngit clone https://github.com/zorggish/FractalCryptGUI.git\ncd FractalCryptGUI\n```\n3. Build and run the project\n```\nqmake -project\nqmake FractalCrypt.pro\nmake\n./FractalCrypt\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzorggomat%2FFractalCryptGUI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzorggomat%2FFractalCryptGUI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzorggomat%2FFractalCryptGUI/lists"}