FAQ

General

chevron-rightIs Kryptor compatible with age and Minisign?hashtag

No, it uses newer cryptographic primitives and different file formats to address problems with both tools. However, Kryptor isn't perfect either.

chevron-rightWhy should I use Kryptor over the alternatives?hashtag

Three words: security, privacy, and usability.

  1. Kryptor uses strong, fast, and modern cryptographic algorithms, offering post-quantum securityarrow-up-right. It also addresses security limitations of tools like agearrow-up-right and Minisignarrow-up-right.

  2. Unlike most tools, Kryptor limits metadata by using an indistinguishable from random encrypted file format. Encrypted files have no identifiable headers and are randomly padded. File names can also be encrypted.

  3. Encrypt/sign multiple files and directories at once. No need to specify an output file path. No config options. Short public keys. Fewer command-line options than Minisignarrow-up-right whilst also supporting encryption.

chevron-rightWhen should I not use Kryptor?hashtag
chevron-rightHas Kryptor been audited?hashtag

No, audits are extremely expensive (e.g. $5,000+). A very generous donation would be required to cover the cost.

However, some cryptographers were contacted for design feedback and advice, libsodiumarrow-up-right and Monocypherarrow-up-right are used for the cryptography, and it should be possible to single-handedly audit the code.

chevron-rightI forgot my passphrase/lost a key, can I recover encrypted files?hashtag

No, it would take an impractical amount of time to bruteforce the encryption keys unless you used a very weak passphrase/low entropy key.

chevron-rightIs it safe to use Kryptor for long-term backups?hashtag

Sort of. Backwards compatibility for major versions is not a goal for Kryptor, as explained here. However, Kryptor doesn't get updated that frequently. Breaking changes will get grouped together and require significant planning and sometimes waiting for dependencies to get updated.

To ensure you can decrypt files in the future, you can either:

  1. Keep a copy of the executable and source code of the version used to encrypt files. The .NET version will eventually go out of support, but you can edit the version in the source code and rebuild. The main risk is that further changes may be needed to get things working due to .NET/dependency changes, which would require some familiarity with C#.

  2. Re-encrypt files when a new major version is released.

The second approach is recommended if possible.

chevron-rightDoes Kryptor connect to the internet?hashtag

No, unless you use the -u|--update option to check for updates via GitHubarrow-up-right, as explained here.

Best practices

chevron-rightWhich method of encryption should I use?hashtag
  • For yourself: passphrases or random pre-shared keys. Keep them in a password manager.

  • For others: your private key and their public key. Keep your private key backed up on external storage (e.g. memory sticks).

chevron-rightHow do I choose a strong passphrase?hashtag

Just let Kryptor generate a passphrase for you and store it in a password manager like KeePassXCarrow-up-right or Bitwardenarrow-up-right.

chevron-rightWhat's a keyfile?hashtag

A keyfile is a file that's combined with or used instead of a passphrase. If combined, it acts like 2FA. Used alone, it's weaker than a passphrase in that it's stored on disk and can't be memorised. In both cases, it needs to be kept secret.

A random keyfile is equivalent to a random symmetric key stored on disk. Using a regular file as a keyfile is equivalent to hashing the file, so the file should be high in entropy (e.g. compressed).

chevron-rightHow do I choose a keyfile?hashtag

Just let Kryptor generate a keyfile for you and back it up on external storage (e.g. memory sticks).

However, if you insist on choosing a regular file, make sure it's a compressed file type (e.g. .zip).

chevron-rightShould I store keyfiles in the cloud?hashtag

No, they're not encrypted. It would be like uploading a text file containing your passphrase.

chevron-rightHow do I share my public key?hashtag

Send people your public key string or .public file. Either could also be put on a personal website.

chevron-rightHow do I back up my private key?hashtag

Navigate to the ~/.kryptor directory and copy any .private files to external storage (e.g. memory sticks). Keeping private keys offline is good practice even though they're encrypted.

chevron-rightHow do I share a pre-shared key?hashtag
chevron-rightWhen should I rotate my key pair?hashtag

When you think the private key has been compromised, which shouldn't happen if you keep it offline and use a strong passphrase.

Contributing

chevron-rightHow do I report bugs?hashtag

Please use the Bug report issue template on GitHubarrow-up-right.

chevron-rightHow do I report vulnerabilities?hashtag

Please read the SECURITY.mdarrow-up-right file on GitHub.

chevron-rightCan I help package Kryptor?hashtag

Yes, please get in touch.

Crypto

chevron-rightWhy ChaCha20-Poly1305?hashtag

It's fast, standardisedarrow-up-right, doesn't require hardware support, and ChaCha20 has a higher security marginarrow-up-right than AES.

chevron-rightHow does the key-committing ChaCha20-Poly1305 padding fix work?hashtag

The latter 32 bytes of block 0 (after the Poly1305 key) are prepended to the ciphertext as a commitment. For decryption, this commitment is checked in constant time alongside the tag, eliminating a timing difference. Here'sarrow-up-right some code.

This is similar to the padding fix discussed in How to Abuse and Fix Authenticated Encryption Without Key Commitmentarrow-up-right. Credit goes to Loup Vaillant for the block 0 ideaarrow-up-right.

chevron-rightWhy BLAKE2b?hashtag

It's fasterarrow-up-right than SHA-2 and SHA-3 whilst having a larger security margin than BLAKE3arrow-up-right and being as real-world securearrow-up-right as SHA-3.

chevron-rightWhy Argon2id?hashtag

Argon2 won the Password Hashing Competitionarrow-up-right in 2015 and is now recommended over other password-based key derivation algorithms, such as PBKDF2 and scrypt.

Argon2id is used because it's the recommended mode in the RFCarrow-up-right and Argon2i is vulnerable to attacksarrow-up-right plus weaker in terms of GPU/ASIC resistance.

chevron-rightWhy randomised padding?hashtag

PADMÉarrow-up-right padding, which is deterministic, was originally implemented. However, Covert Encryptionarrow-up-right convinced me that it seems wrongarrow-up-right to have deterministic file sizes when trying to make files indistinguishable from random.

Coding

chevron-rightHow do I build from source?hashtag

Instructions can be found here.

chevron-rightWhy are Kryptor executables ~30 MiB?hashtag

Because the .NET runtime is includedarrow-up-right so users don't have to install .NET themselves, and ReadyToRunarrow-up-right compilation is enabled to improve startup performance.

chevron-rightWhat programming language is Kryptor written in?hashtag
chevron-rightWhat versioning do you use?hashtag

Last updated