{"id":23579586,"url":"https://github.com/catsec/scrambler","last_synced_at":"2026-05-01T06:34:08.286Z","repository":{"id":269872055,"uuid":"908702073","full_name":"catsec/scrambler","owner":"catsec","description":"Crypto wallet backup protector","archived":false,"fork":false,"pushed_at":"2025-06-29T05:28:12.000Z","size":946,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T06:32:14.349Z","etag":null,"topics":["backup","bitcoin-wallet","crypto","trezor"],"latest_commit_sha":null,"homepage":"https://www.catsec.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catsec.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,"zenodo":null}},"created_at":"2024-12-26T18:25:28.000Z","updated_at":"2025-06-29T05:28:15.000Z","dependencies_parsed_at":"2024-12-26T20:17:02.668Z","dependency_job_id":"9c3990e0-94ad-4ab9-a25c-0c28a23ce9f1","html_url":"https://github.com/catsec/scrambler","commit_stats":null,"previous_names":["catsec/scrambler"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/catsec/scrambler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catsec%2Fscrambler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catsec%2Fscrambler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catsec%2Fscrambler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catsec%2Fscrambler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catsec","download_url":"https://codeload.github.com/catsec/scrambler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catsec%2Fscrambler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32487591,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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":["backup","bitcoin-wallet","crypto","trezor"],"created_at":"2024-12-26T23:11:13.961Z","updated_at":"2026-05-01T06:34:08.271Z","avatar_url":"https://github.com/catsec.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catsec Wallet Word Scrambler\n\nEver wondered what would happen if your wallet backup got stolen? \n\nCatsec Wallet Word Scrambler is a Rust-based tool designed to securely scramble wallet backup words using a password of your choice. It provides a way to enhance the security of your wallet by obfuscating your recovery words. The program supports scrambling and recovery workflows.\n\n## Features\n- **Scramble Wallet Words**: Securely scramble your wallet recovery words using a user-provided password.\n- **Recover Wallet Words**: Recover scrambled wallet words using the correct password.\n- **Wordlist Support**: Includes support for multiple languages and wordlists.\n- **Password Security**: Utilizes strong cryptographic algorithms like Argon2 and SHA3 for password hashing and scrambling.\n- **Platform Independence**: Designed to run on air-gapped machines without requiring a network connection.\n\n## Security Warning\nThis program is intended to run on:\n- Freshly formatted and air-gapped machines.\n- Machines with no active network connections.\n\nAlthough nothing is saved locally, it is strongly recommended to securely wipe the machine after use.\n\n\n## Installation\n\nIf you don't want to compile, help yourself to the binaries: [here](https://github.com/catsec/scrambler/releases/latest).\n\n### Prerequisites\n1. Install Rust: [Rust Installation Guide](https://www.rust-lang.org/tools/install)\n2. Clone the repository:\n   ```bash\n   git clone https://github.com/catsec/scrambler.git\n   cd scrambler\n   ```\n\n### Build\nTo build the project, run:\n```bash\ncargo build --release\n```\nThe compiled binary will be available in the `target/release/` directory.\n\n## Usage\n\n### Running the Program\nTo run the program, use:\n```bash\ncargo run --release\n```\n\n### Workflow\n1. **Scramble Wallet Words**:\n   - Select the \"Scramble a new wallet\" option.\n   - Choose the desired language and wordlist.\n   - Provide a secure password.\n   - Enter your wallet words.\n   - View or save the scrambled words.\n\n2. **Recover Wallet Words**:\n   - Select the \"Recover an existing wallet\" option.\n   - Provide the scrambled words and password.\n   - The program will unscramble and display the original words.\n\n### File Support\nYou can optionally save or load wallet words from `.txt` files in the current directory.\n\n## Development\n### File Structure\n- `src/`\n  - `constants.rs`: Contains constant definitions such as wordlists and cryptographic parameters.\n  - `input.rs`: Handles user input and validation.\n  - `crypto.rs`: Implements cryptographic functions like hashing and key derivation.\n  - `utils.rs`: Contains utility functions for word scrambling and recovery.\n- `Cargo.toml`: Rust package configuration.\n\n\n## How it works\n\nthe program take two inputs:\n- password\n- list of words\n\nThen the follow process accures:\n- Derive a 512bit key from the password and deviding it to 10 or 11 bits chunks (according to the wordlist size).\n- Words are then converted to their index according to the wordlist resulting in a 10 or 11 bit value for each word.\n- This value is then XORed with the key chunk until all words are XORed.\n- Calculate a new word according to the XORed values index.\n- the result is a list of new words that if will be xored again with a key derived from the same password will return the original value.\n\nThis process will returen a valid list word for any password, eliminating known plaintext attacks (though SLIP39 produces preditable first words that might be used to eliminate some results)\n\n## Demo \n![Demo of Catsec Wallet Word Scrambler](https://raw.githubusercontent.com/catsec/scrambler/main/assets/scrambler.gif)\n\u003cp align=\"right\" style=\"font-size: small; color: gray;\"\u003e\nMade with \u003ca href=\"https://asciinema.org\" target=\"_blank\"\u003easciinema\u003c/a\u003e.\n\u003c/p\u003e\n\n## License\nThis project is licensed under the Apache 2.0 License. See the `LICENSE` file for details.\n\n## Author\n**Ram Prass** - Catsec\n\n## Q\u0026A\n\n### Why do I even need it?\n\nCurrent wallet backups are not encrypted. This means that if someone gains access to your backup, you're basically F**KED. No safe is impenetrable, and someone will always find a way to access it.\nUsing a password to protect your wallet gives you some assurance that, even if someone gets hold of your wallet’s recovery words, they won’t be able to use them without knowing your password.\n\n## Why do you create a word list?\n\nI decided to use a word list to maintain compatibility with hardware tools designed to safeguard wallets.\nThis way, you can etch the scrambled words onto those devices, ensuring they are not the original sequence but still recoverable.\n\n## Why does it take so long (up to 2 minutes) to derive the key?\n\nTL;DR: I don’t trust you.\n\nThe short answer is that while I encourage users to create strong passwords, most don’t.\nFrom easily guessable personal details to slight variations of previously used passwords, users tend to choose poor passwords.\n\nBy ensuring every password produces a legitimate output and employing a time-intensive key derivation process, the system offers better protection against hackers.\n\nAdditionally, while I use state-of-the-art algorithms (SHA-3, Argon2id), they may become vulnerable over time. Wallet backups are meant to last for years, so extra caution is necessary.\n\n## Can I save my generated scrambled word list on the cloud?\n\nI wouldn’t advise it. Always use multiple layers of protection:\n\nStore it on a USB stick, place it in a safe, or both. After all, it’s your money at stake.\n\n## How can I be sure you’re not stealing my wallet?\n\nYou can’t! Don’t trust me, and don’t trust anyone else either.\n\nReview the code if you’re able to, and always use an air-gapped machine. Wipe it clean after use!\n\n## All this security advice seems excessive: air-gapped machines, wiping everything clean...\n\nNo, it’s not excessive.\n\nWhen it comes to your money, no precaution is too great.\n\n\n---\n### Disclaimer\nThis tool is provided \"as is\" without warranty of any kind. Use at your own risk. Ensure proper backups before scrambling or recovering wallet words.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatsec%2Fscrambler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatsec%2Fscrambler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatsec%2Fscrambler/lists"}