Skip to main content

Fiddlesticks!

"Aaaagh! I forgot my 7zip password" - James (more times than he cares to remember).

Description

Password recovery tool, for password-encrypted files, using simple off-line brute force attacks. Password candidates are generated, using common variations of a guessed password (e.g. typos and substitutions).

Usage

  • Password-protected file owners recovering their own password themselves, as long as they can still recall a rough guess for their password, might only need to test every candidate password that's similar enough to the guess.
  • This may be a much faster and cheaper computation than the one an adversary must do, without such a guess, but in posession of a stolen password protected file[^0].

"Back of envelope" sketch 'calculation'

  • Attackers targetting a truly[^0] random password, must try up to 2**N candidate passwords (for each bit length N being considered).
  • Specifically, password owners may only need to consider every candidate within some maximum Weighted-Levenshtein distance from their best guess of the forgotten password, lets say a total of M.
  • Fiddlesticks is intended to assist recovering passwords from "close enough" guesses, when M is much smaller than 2**N.
  • If Fiddlesticks can crack an archive's password with a starting guess of an empty string, (if 2**N is also small enough to be feasible, with no guess) then anyone with the archive can also do so - the password wasn't strong enough.
  • If Fiddlesticks fails to crack an archive's password given some starting guess, a lower bound on how similar the actual password is to the starting guess can still be deduced (e.g. this could indicate that the starting guess was wrong).

Design and security notes

  • Any similar 3rd party password cracking service based on 'best guess' passwords, requires the user to share the guesses for their passwords with the service. Even if the password was not used for anything else, sharing even guesses for secret credentials with 3rd parties, is a critical security issue.

  • Fiddlesticks is designed to minimise the need for this. It is designed to:

    • a) require as few dependencies as possible,
    • b) be as easy to install as possible.
      The intention is firstly b) assists users to run Fiddlesticks in their own secure environment, without requiring them to take their password guesses outside of that. Secondly a) helps them decide for themselves whether or not to trust Fiddlesticks in the first place, in particular whether or not it will take their password guesses outside of its running environment. When the project was concieved, the intention was also to design it to:
  • c) require as little code as possible but the code has since become somewhat more complex, mainly in order to have a nice CLI. Simplicity and brevity should be much more highly prized features of any software. But you be the judge of whether or not this c) is still the case.

  • Recommended use is simply to automate attempts to open a 7z archive via the user's own 7zip.

  • There are a couple of alternative modes too, firstly: automating any other external Bash command that a candidate password can be appended to (that obeys the normal return code convention).

  • Secondly candidate passwords can be sent to stdout, from where they can be piped to a user's own external program or code (all the normal output from fiddlesticks goes to stderr).

  • Thirdly, if py7zr is also installed, fiddlesticks can use it to test passwords for 7z archived entirely within Python.

Other Notes

  • Fiddlesticks cannot recover passwords for online accounts. Online password entry attempts should be rate limited. Cracking is only possible locally if the website owner shares the password hash with the user, in which case they can probably provide the rest of their account data too.
  • If Fiddlesticks fails to 'crack' or find a known password, this should not be taken as proof of the password's strength. It won't ever be possible to think everything, and we certainly don't wish users to draw a false sense of security from Fiddlesticks.

Alternatives

[^0] Truly random passwords are difficult for humans to remember (without writing them down or saving them). At the very least, real world adversaries (posessing a stolen file or password hash) are likely to first attempt a dictionary attack

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fiddlesticks-0.0.0.tar.gz (33.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fiddlesticks-0.0.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file fiddlesticks-0.0.0.tar.gz.

File metadata

  • Download URL: fiddlesticks-0.0.0.tar.gz
  • Upload date:
  • Size: 33.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fiddlesticks-0.0.0.tar.gz
Algorithm Hash digest
SHA256 24f8acd18e72cd82b8aa694de8d4e9e8f3b7090b037af43e0f8dd63ed42b65d0
MD5 c431cad52542d52924312cbacf77606e
BLAKE2b-256 381d785b37d5f1c8e48d696aa3333130047ed05e8702ee1b094aeabf54e140f7

See more details on using hashes here.

File details

Details for the file fiddlesticks-0.0.0-py3-none-any.whl.

File metadata

  • Download URL: fiddlesticks-0.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fiddlesticks-0.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f2db1a00da9f413f7c879818bc85b9167249896bbbee0a9ddaba9ee5783ebe9
MD5 a715182622cfb424e66851841641b309
BLAKE2b-256 42b7022fa42d6199099d2c66b34889c9978428f979521379037fd1836a21d5b4

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

This release

0.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page