Skip to content

Commit a6887b4

Browse files
0xCyrWhiteStarSupremeS.A.S.U KATVIO
authored
chore: preparing v1.4.2 that is about LICENSING (#38)
* misc improvements related to v1.4.0 (#27) * fix(cli): complete truncated except clause in collect_manual_shares (#28) * chore(readme): set correct README file * chore: set version to 1.4.0 * chore: set version to 1.4.0 in README * content of v1.4.1 (#33) * fix(arch): unify encrypt path via FileEncryptor, fix test suite (N3) * fix(crypto): remove plaintext hash (C1), bind metadata as AAD (C2), key as bytearray (M4) * fix(supply-chain): pin installers with SHA-256 (H1), pin GH Actions by digest (H2), pin Docker image (H3) * fix(fs): chmod 750 (M1), non-root test user (M2), secure zip cleanup (N2), no-overwrite on decrypt (N4) * fix(robustness): verify share hash (L5), fix fallback set_id filtering (N5), narrow _read_metadata except (L8), os.urandom RNG (L6) * fix(opsec): minimal share metadata by default (N10), package integrity verification (M6) * fix(interactive): repair interactive mode broken by N10 minimal share format * refactor: remove dead code — verify_shares, save_share, secure_string (batch 2) * refactor: cohérence, optimisations et fix version check (batch 3) * security: secure memory hardening — mlock, SecureContext, shares clearing (batch 4) * test: add coverage for error messages, OS simulation, and UX modes * test: add edge-case error coverage * test: add deterministic file corruption coverag * test(memory): add memory security test suite * Add realistic test fixtures and cross-platform test fixes * test: fix fuzzing hash field, add edge-case roundtrip and bootstrap syntax checks * fix(cli): make --label optional, drop redundant manual-shares prompt * test: move fixture-based suites to fractum-tests, drop legacy compat tests * fix(ci): patch zizmor findings in release.yml, anchor gitignore/dockerignore globs * fix(tests): force UTF-8 stdout on Windows in run_tests.py * apply ruff format to src/, sync .gitignore * feat: add --bundle-encrypted, tests, release process and docs edited * fix(cli): complete truncated except clause in collect_manual_shares * fix: patch v1.4.1 blockers — offline build, arm64 wheel, version check (M5), zip bomb (L4), label messaging (#32) * ci: trigger CodeQL workflow on WhiteStarSupreme/misc-sec-improvements-pt1 branch * ci: point CodeQL workflow at dev/main instead of a feature branch --------- * chore: set version to 1.4.2 * Say that Fractum splits the AES key, not the file (#49) (#36) * Split the trademark policy out of LICENSE, and stop calling the project proprietary (#37) --------- Co-authored-by: WhiteStarSupreme <120492851+WhiteStarSupreme@users.noreply.github.com> Co-authored-by: S.A.S.U KATVIO <contact@katvio.com>
1 parent 5d39ed4 commit a6887b4

8 files changed

Lines changed: 465 additions & 367 deletions

File tree

.github/workflows/release.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ jobs:
111111
setup.py \
112112
README.md \
113113
LICENSE \
114+
TRADEMARK.md \
115+
SECURITY.md \
114116
--exclude="*.pyc" \
115117
--exclude="__pycache__/*" \
116118
--exclude="*.DS_Store" \

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM python:3.12.11-slim@sha256:47ae396f09c1303b8653019811a8498470603d7ffefc29cb
22

33
WORKDIR /app
44

5-
COPY setup.py README.md LICENSE bootstrap-linux.sh bootstrap-macos.sh bootstrap-windows.ps1 Dockerfile .dockerignore /app/
5+
COPY setup.py README.md LICENSE TRADEMARK.md SECURITY.md bootstrap-linux.sh bootstrap-macos.sh bootstrap-windows.ps1 Dockerfile .dockerignore /app/
66
COPY src/ /app/src/
77
COPY tests/ /app/tests/
88
COPY packages/ /app/packages/

LICENSE

Lines changed: 55 additions & 357 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Fractum
22

3-
**Split any sensitive file into encrypted shares** and reconstruct it only when enough shares are pooled → fully offline, no cloud, no single point of failure.
3+
**Encrypt any sensitive file, then split its encryption key into shares** so the file only comes back when enough shares are pooled → fully offline, no cloud, no single point of failure.
44

55
Designed for **long-term cold storage** of critical secrets: recovery credentials, exports of database & password managers, family photos, legal documents, crypto seed phrases.
66

7-
![Fractum splits a file into N encrypted shares, K of which reconstruct it](assets/images/encrypt-overview.png)
7+
![Fractum encrypts a file and splits its AES key into N shares, K of which recover the key](assets/images/encrypt-overview.png)
88

99
**When to use it:**
1010

@@ -17,7 +17,7 @@ Designed for **long-term cold storage** of critical secrets: recovery credential
1717

1818
**Why distributed?**
1919

20-
- Fewer than K shares reveal **nothing**: information-theoretic security *(same as Trezor SLIP-39, ICANN DNSSEC ceremonies)*
20+
- Fewer than K shares reveal **nothing**: the key-split has information-theoretic security *(same as Trezor SLIP-39, ICANN DNSSEC ceremonies)*; the file itself stays sealed under AES-256-GCM
2121
- No single point of failure: distribute shares across people, locations, media. No $5 Wrench Attack
2222
- Works completely offline in air-gapped environments
2323

@@ -39,7 +39,7 @@ Docker is the recommended way to run Fractum. The `--network=none` flag guarante
3939

4040
```bash
4141
git clone https://github.com/katvio/fractum.git
42-
cd fractum && git checkout tags/v1.4.1
42+
cd fractum && git checkout tags/v1.4.2
4343
mkdir -p data shares
4444
docker build -t fractum-secure .
4545
```
@@ -55,7 +55,7 @@ docker run --rm -it \
5555
--threshold 3 --shares 5 --label "bitwarden-backup"
5656
```
5757

58-
![Fractum splits a file into N encrypted shares, K of which reconstruct it](assets/images/encrypt-example.png)
58+
![Fractum encrypts a file and splits its AES key into N shares, K of which recover the key](assets/images/encrypt-example.png)
5959

6060

6161
## Decrypt:
@@ -83,7 +83,7 @@ Inside the container (or after a manual install), the binary is `fractum`. Prefi
8383
fractum -i # interactive mode — guided menu, no flags needed
8484
fractum --version # print the version
8585

86-
# Encrypt: split FILE into N shares, K of which are needed to recover it
86+
# Encrypt: encrypt FILE, split its key into N shares, K of which are needed to recover it
8787
fractum encrypt FILE -t <threshold> -n <shares> [OPTIONS]
8888
-t, --threshold <int> shares required to reconstruct (required)
8989
-n, --shares <int> total shares to generate (required)
@@ -118,6 +118,8 @@ Submit a pull request or open an issue.
118118

119119
## License
120120

121-
Fractum is licensed under a Custom Proprietary Software License that permits personal, non-commercial use. Commercial use is not permitted.
121+
Fractum is **Apache-2.0**. You may use it, modify it, redistribute it and use it commercially, without asking anyone.
122122

123-
📄 **[View Full License](LICENSE)**
123+
The name is separate: Apache-2.0 grants no trademark rights (section 6), so "Fractum", the logos and the associated marks stay with S.A.S.U. KATVIO. Fork the code freely, give your fork its own name.
124+
125+
📄 **[LICENSE](LICENSE)** · **[TRADEMARK.md](TRADEMARK.md)** · **[SECURITY.md](SECURITY.md)**

SECURITY.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Security policy
2+
3+
## Reporting a vulnerability
4+
5+
Report privately, not in a public issue: **contact@katvio.com**, with
6+
`SECURITY` in the subject line.
7+
8+
A dedicated `security@katvio.com` alias would be better, and does not exist
9+
today; `contact@katvio.com` is the only address the project publishes.
10+
11+
Include the version, the platform, and the smallest set of steps that
12+
reproduces the problem. A proof of concept helps but is not required.
13+
14+
What to expect:
15+
16+
| Step | Delay |
17+
|---|---|
18+
| Acknowledgement of receipt | 3 working days |
19+
| First assessment, severity and whether it is accepted | 10 working days |
20+
| Fix or documented mitigation for an accepted critical report | 90 days |
21+
22+
If you get no acknowledgement within the first delay, the address may be
23+
failing; open a public issue saying only that you are trying to reach the
24+
security contact, without any detail of the finding.
25+
26+
We ask for the usual restraint in return: no disclosure before a fix is
27+
available or the 90 days have passed, whichever comes first, and no testing
28+
against systems you do not own.
29+
30+
## Supported versions
31+
32+
Fixes land on the latest released minor version. Older versions receive nothing,
33+
so an upgrade is part of any remediation.
34+
35+
## What this software does and does not claim
36+
37+
Fractum encrypts a file with AES-256-GCM and splits the encryption key into
38+
shares using Shamir's Secret Sharing. It is a command line tool that runs
39+
offline, by design.
40+
41+
Two limits are worth stating plainly, because they are the ones that surprise
42+
people:
43+
44+
- **The share files are only as safe as where you put them.** The threshold
45+
protects against losing some of them, not against an attacker who collects
46+
enough of them. Storing several shares in one place removes the protection
47+
entirely.
48+
- **The machine that runs the tool sees the key in memory.** Fractum is designed
49+
for an offline, trusted workstation. Running it on a shared or compromised
50+
host defeats the point.
51+
52+
Cryptographic export and import rules vary by country. Using or redistributing
53+
this software is the user's responsibility in their own jurisdiction.

0 commit comments

Comments
 (0)