1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
name: secret-sharing
version: 1.0.0.3
synopsis: Information-theoretic secure secret sharing
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.
> (1,"\134\168\154\SUBV\248\CAN:\250y<\GS\EOT*\t\222_\140")
> (2,"\225\206\241\136\SUBse\199r\169\162\131D4\179P\210x")
> (3,"~\238%\192\174\206\\\f\214\173\162\148\&3\139_\183\193\235")
> (4,"Z\b0\188\DC2\f\247\f,\136\&6S\209\&5\n\FS,\223")
> (5,"x\EM\CAN\DELI*<\193q7d\192!/\183v\DC3T")
>> 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.
license: LGPL-2.1
license-file: LICENSE
author: Peter Robinson <peter.robinson@monoid.at>
maintainer: peter.robinson@monoid.at
copyright: Peter Robinson 2014
category: Cryptography
build-type: Simple
cabal-version: >=1.8
homepage: http://monoid.at/code
stability: experimental
library
hs-source-dirs: src
exposed-modules: Crypto.SecretSharing
Crypto.SecretSharing.Internal
build-depends: base >=4.6 && < 5,
bytestring ==0.10.*,
dice-entropy-conduit >= 1.0.0.0,
binary >=0.5.1.1,
vector >=0.10.11.0,
finite-field >=0.8.0,
polynomial >= 0.7.1
ghc-options: -Wall
test-suite Main
type: exitcode-stdio-1.0
x-uses-tf: true
build-depends: base >= 4 && < 5,
QuickCheck >= 2.4,
test-framework >= 0.4.1,
test-framework-quickcheck2,
polynomial,
bytestring,
vector,
binary,
finite-field,
dice-entropy-conduit
hs-source-dirs: src, tests
main-is: Tests.hs
|