3 releases
0.1.3 | Jul 24, 2021 |
---|---|
0.1.2 | Jul 21, 2021 |
0.1.0 | Jul 20, 2021 |
#1465 in Math
Used in guff-sharefiles
35KB
216 lines
guff-ida
Information Dispersal Algorithm in Rust
This crate name is a placeholder.
It will include functionality for doing IDA (Information Dispersal Algorithm) transforms on data.
It is a port/rewrite of my old Perl module Crypt::IDA
, which is
available from CPAN or from my
gnetraid
repository on
github.
lib.rs
:
A crate for working with Cauchy and Vandermonde matrices
A small collection of routines for creating matrices that can be used to implement erasure (error-correction) schemes or threshold schemes using Galois fields.
Note that this crate only provides data for insertion into a matrix. For the missing functionality, see:
- guff : basic operations over finite fields, including vector operations
- guff-matrix : full set of matrix types and operations
Using finite field matrix operations for threshold schemes
A "threshold scheme" is a mathematical method for securely splitting a secret into a number of "shares" such that:
-
if a set number (the "threshold") of shares are combined, the original secret can be recovered
-
if fewer shares than the threshold are combined, no information about the secret is revealed
Module Focus
This module focuses in particular on Michael O. Rabin's "Information Dispersal Algorithm" (IDA). In it, splitting a secret is achieved by:
-
creating a transform matrix that has the required threshold property
-
placing the secret into an input matrix, padding it if needed
-
calculating transform x input to get an output matrix
-
reading off each share as a row of the transform matrix and the corresponding row of the output matrix
To reconstruct the secret:
-
take the supplied transform matrix rows and put them into a square matrix
-
calculate the inverse of the matrix
-
form a new input matrix from the corresponding output data rows
-
calculate inverse x input
-
read the secret back from the output matrix
More details of the algorithm can be found later.
Dependencies
~550KB
~11K SLoC