crypto: Index | Examples | Files

package afis

import ""

Package afis implements Anti-Forensic Information Splitting

The splitter supports secure data destruction crucial for secure on-disk key management. The key idea is to bloat information and therefor improving the chance of destroying a single bit of it. The information is bloated in such a way, that a single missing bit causes the original information become unrecoverable. The theory behind AFsplitter is presented in TKS1.

The interface is simple. It consists of two functions:

Split(data, stripes)
Merge(data, stripes)

Split operates on data and returns information splitted data. Merge does just the opposite: uses the information stored in data to recover the original splitted data.


AFsplitter reference implementation at

TKS1 paper at



Package Files

afis.go doc.go


var (
    ErrMinStripe = errors.New("afis: at least one stripe is required")
    ErrDataLen   = errors.New("afis: data length is not multiple of stripes")


var DefaultHash = sha1.New

DefaultHash is our default hashing function.

func Merge Uses

func Merge(data []byte, stripes int) ([]byte, error)

Merge data splitted previously with Split using the default SHA-1 hash.


secretKey := make([]byte, 16)
if _, err := io.ReadFull(rand.Reader, secretKey); err != nil {

// Split the original data using 4 stripes.
scrambled, err := Split(secretKey, 4)
if err != nil {

// Merge back
key, err := Merge(scrambled, 4)
if err != nil {

if !bytes.Equal(key, secretKey) {
    panic("merge failed")

func MergeHash Uses

func MergeHash(data []byte, stripes int, hashFunc func() hash.Hash) ([]byte, error)

MergeHash merges data splitted previously with the selected hash function.

func Split Uses

func Split(data []byte, stripes int) ([]byte, error)

Split data using the default SHA-1 hash.

func SplitHash Uses

func SplitHash(data []byte, stripes int, hashFunc func() hash.Hash) ([]byte, error)

SplitHash splits data using the selected hash function.

Package afis imports 7 packages (graph). Updated 2019-01-31. Refresh now. Tools for package owners.