- Category
- Cybersecurity
- Rank
- No. 1108Tools index
Previous survey · No. 1113 ·
- Pricing
- Open Source
- Type
- TOOL
- Builder
- jesseduffield
- GitHub
- 5.1k stars
- Latest release
- v0.2
- Date
About
Split your file into encrypted fragments so you don't need to remember a passcode — distribute the pieces; any threshold reconstructs the original.
What it does
Horcrux is a compact command-line utility for keeping sensitive files recoverable without retaining a password. It creates a fresh encryption key, protects the file as a stream, and uses Shamir secret sharing to divide that key. You choose how many pieces exist and how many must reunite for recovery.
Why it's ranked here
The design is focused, understandable, and practical for unusual long-term custody needs. It uses operating-system randomness, streams large files, and supports flexible recovery thresholds. The verdict is tempered by an explicitly acknowledged data-integrity issue and a cryptographic format that authenticates neither headers nor encrypted content.
What's good
A fresh 32-byte key comes from the system cryptographic random source. Shamir sharing makes the recovery threshold configurable instead of requiring every piece. Processing streams data, so large files need not fit in memory. When every piece is required, encrypted content is divided among them to reduce total storage.
Tradeoffs
Encrypted content lacks an authentication check, so corruption or modification may not be detected before producing damaged output. The stream mode uses a fixed zero initialization value, although each split receives a new random key. When the threshold is below the total, every piece carries a full encrypted payload, multiplying storage use. Output pieces use ordinary file permissions.
How to use it well
Use it for personal archives or transfers where pieces can live on separate USB devices or independent online channels. Pick a threshold that tolerates realistic loss, test recovery, then track every storage location yourself. It does not provide location management, authenticated integrity, access auditing, or a general backup system.
Technical notes+
main.go implements the two-command CLI with the standard flag package. pkg/commands/split.go generates a 32-byte key, serializes JSON metadata into each fragment, and either replicates ciphertext or stripes it across outputs. pkg/commands/utils.go uses AES-OFB with an all-zero IV and provides no MAC or authenticated-encryption tag. pkg/shamir/shamir.go and pkg/shamir/tables.go contain an adapted HashiCorp Vault Shamir implementation and identify that adapted code as MPL-2. pkg/multiplexing/multiplexing.go stripes data in 100-byte quotas when threshold equals total. pkg/commands/bind.go validates filename, timestamp, and threshold metadata before reconstruction, but does not verify content integrity. go.mod declares Go 1.14 and no external modules.
Observed
- Primary language
- Go
- Repository license
- MIT; adapted Shamir source files identify their inherited implementation as MPL-2
- Interface
- Command-line utility with split and bind commands
- Install surface
- Homebrew tap, Scoop extras bucket, and downloadable binary releases
- Release platforms
- FreeBSD, Windows, macOS, and Linux
- Release architectures
- amd64, ARM, ARM64, and 386
- Dependencies
- The Go module declares no external module requirements; source imports use the standard library and internal packages
Read from README.md, go.mod, main.go, pkg/commands/bind.go, pkg/shamir/shamir.go, pkg/shamir/tables.go, pkg/commands/split.go, pkg/commands/utils.go, pkg/commands/horcrux.go, pkg/multiplexing/multiplexing.go, LICENSE, .goreleaser.yml, example/diary.txt, .github/FUNDING.yml.
What it can do
Split file into encrypted fragments
File → Multiple encrypted fragments
Set reconstruction threshold for fragments
Number of required fragments → Configured threshold setting
Reconstruct original file from fragments
Threshold number of encrypted fragments → Original file
Encrypt file fragments
File fragments → Encrypted file fragments
Distribute fragments across multiple locations
Encrypted fragments → Fragments stored in separate locations
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
