secret-sharing: Information-theoretic secure secret sharing

[ cryptography, data, lgpl, library ] [ Propose Tags ]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,,,
Change log
Dependencies base (>=4.6 && <5), binary (>=, bytestring (>=, dice-entropy-conduit (>=, finite-field (>=0.8.0), vector (>= [details]
License LGPL-2.1-only
Copyright 2014-2020 Peter Robinson
Author Peter Robinson
Category Data, Cryptography
Home page
Bug tracker
Source repo head: git clone
Uploaded by PeterRobinson at 2020-05-10T04:09:01Z
Distributions Debian:, NixOS:
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 4334 total (26 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-05-10 [all 1 reports]

Readme for secret-sharing-

[back to package description]

Implementation of an (m,n)-threshold secret sharing scheme. A given ByteString b (the secret) is split into n shares, and any m shares are sufficient to reconstruct b. The scheme preserves information-theoretic perfect secrecy in the sense that the knowledge of up to m-1 shares does not reveal any information about the secret b.

Example in GHCi: Suppose that you want to split the string "my secret data" into n=5 shares such that at least m=3 shares are necessary to reconstruct the secret.

❯ :m + Data.ByteString.Lazy.Char8 Crypto.SecretSharing
❯ let secret = pack "my secret message!"
❯ shares <- encode 3 5 secret
❯ mapM_ (Prelude.putStrLn . show) shares -- each share should be deposited at a different site.
❯ let shares' = Prelude.drop 2 shares
❯ decode shares'
"my secret message!"

The mathematics behind the secret sharing scheme is described in: "/How to share a secret/." by Adi Shamir. In Communications of the ACM 22 (11): 612–613, 1979.