Skip to main content

Split secrets into pieces, or attemp to recover secrets by recombining a subset of pieces.

Project description

Secret Splitter

  • Turn your digital secrets into digital puzzles (literally).
  • Distribute the pieces among a group of people.
  • Anyone can decode the secret by collecting all the pieces back.
  • But if even one piece is missing, all they have is random data.
  • You then trust that group of people to only share their pieces for a good reason.
  • You can add resilience by allowing for some pieces to be missing / corrupt.

Overview (wikipedia)

This module implements:

Splitting

  1. Apply a random mask to the secret
  2. For each block of the mask, generate a polynomial of degree D-1
  3. A piece consists of the masked secret and one point of each polynomial

Recovery

  1. Collect D pieces: D polynomials for each block of the mask
  2. Interpolate the points to retrieve the blocks of the mask
  3. Recover the secret by re-applying the mask to the masked version

Standard piece format

A puzzle piece is a yaml serialisation of the following mapping:

# string, tells if the secret encoded is a string encoded as UTF-8 ("utf-8") or a raw stream of bytes ("none")
encoding: utf-8

# one  puzzle piece, exact format depending on the implementation
# this implementation stores a sequence of [point, value] items, one per block of the secret
# Flow-sequence format preferred to keep it on one line
puzzle piece: [[1,258],[1,3]]

# base64 representation of the result of the mask XOR the byte representation of the secret
encoded secret: YXo=

# name of the algorithm used for splitting
algorithm: block-wise SSS

# different algorithms might add additional information required for recovering the secret.

Installation

  • Using PyPi

    python3 -m pip install secret-splitter

  • From source

    git clone https://git.sr.ht/~retzoh/secret-splitter-py && cd secret-splitter-py && python3 -m pip install .

Usage

  • Command line

    echo "secret" | python3 -m secret_splitter split 3 2 --stdin | python3 -m secret_splitter solve

    See python3 -m secret_splitter --help for all options.

  • Python script

    >>> from secret_splitter import split, solve
    >>> pieces = split('secret', 3, 2)
    >>> secret = solve(pieces)
    

Contibute

Contributions of new algorithms are welcome as long as they pass the test & lint suite.

To add a new algorithm, create src/secret_splitter/algorithm.py and add it to ALGORITHMS in src/secret_splitter/secret_splitter.py.

Install redo and run redo from the root folder to run the tests.

Project details


Download files

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

Source Distribution

secret_splitter-1.8.0.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

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

secret_splitter-1.8.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file secret_splitter-1.8.0.tar.gz.

File metadata

  • Download URL: secret_splitter-1.8.0.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for secret_splitter-1.8.0.tar.gz
Algorithm Hash digest
SHA256 ed341fcd1c7794db7bde2f3ea2461079ea9ea8ac92b16f2c39110b761626c319
MD5 1ca77791c000de909b171c3bd0ee1eee
BLAKE2b-256 77ad4aa673e5d4b1ba778be6504f387be4675e0025ee1cd2d1d9724bdd3584b1

See more details on using hashes here.

File details

Details for the file secret_splitter-1.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for secret_splitter-1.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7f224d362d07f5ea0257a7b61e55df8f0eab9b146639f482fdf201d3832d7ee0
MD5 4dd392710aa797129cab9ad2ff796494
BLAKE2b-256 d24ba422367051caf375e78b2272b1438cd7ea379b3ce49250c2dc53483ad4f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page