Files
@ 0c78bfbee218
Branch filter:
Location: Shamira/readme.md - annotation
0c78bfbee218
2.2 KiB
text/markdown
compatibility with python<3.9
ccb4a27318f1 ccb4a27318f1 eba1ea340d1f ccb4a27318f1 ccb4a27318f1 ccb4a27318f1 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 eba1ea340d1f 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 1e161ede44c5 329ff9ed7905 329ff9ed7905 329ff9ed7905 32a0e0fcabd0 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 329ff9ed7905 a47ae3e113cc 32a0e0fcabd0 329ff9ed7905 329ff9ed7905 329ff9ed7905 8cbbc92dd17c 8cbbc92dd17c 329ff9ed7905 329ff9ed7905 329ff9ed7905 a47ae3e113cc 32a0e0fcabd0 329ff9ed7905 329ff9ed7905 329ff9ed7905 8cbbc92dd17c 8cbbc92dd17c 329ff9ed7905 329ff9ed7905 329ff9ed7905 eba1ea340d1f | # Shamira #
Implements [Shamir's secret sharing algorithm](https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing). Splits a string or a byte sequence byte-per-byte into _n_<255 shares, with any _k_ of them sufficient for reconstruction of the original input.
Outputs the shares as hexadecimal, Base32 or Base64 encoded strings.
## Installation ##
### From pip
Run `pip install shamira`.
### From the source
Can be run straight from the cloned repository by executing the package with `python -m shamira` or simply installed with `python setup.py build`, `python setup.py install`. Then imported in your code with `import shamira` or run from the command line with `shamira`.
## Usage
### As a CLI application
Run `shamira split ...` for splitting and `shamira join ...` for joining the shares back. Appending `--help` will show you the documentation.
### As a library
`from shamira import generate, generate_raw, reconstruct, reconstruct_raw`
`help(function)` will show the documentation.
## Issue tracker
Please report your issues to https://trac.19x19.cz/shamira/report
## Performance ##
As it is, the code is not very fast. Let's assume we have a secret of length _m_. For each byte, the splitting takes _n_ evaluations of a polynomial of order _k_ over Galois field 256, leading to _O(n\*k\*m)_ finite field multiplications. Reconstruction of the constant parameters during joining takes _O(k\*k + k\*m)_ multiplications.
Benchmark results, all values mean _seconds per byte_ of the secret length:
<table>
<tr>
<th>k / n parameters</th>
<th>Split</th>
<th>Join</th>
</tr>
<tr>
<td>2 / 3 (a Raspberry Pi 3)</td>
<td>6.08e-05</td>
<td>0.000435</td>
</tr>
<tr>
<td>2 / 3 (a laptop)</td>
<td>5.02e-06</td>
<td>4.12e-05</td>
</tr>
<tr>
<td>254 / 254 (a Raspberry Pi 3)</td>
<td>0.226</td>
<td>0.0314</td>
</tr>
<tr>
<td>254 / 254 (a laptop)</td>
<td>0.0125</td>
<td>0.00175</td>
</tr>
</table>
While the speeds are not awful, for longer secrets I recommend encrypting them with a random key of your choice and splitting only the key. Anyway, you can run your own benchmark with `shamira benchmark`
|