The "FXC" cryptographic protocol is used to split a secret string in multiple parts and to recover it using some of these parts (quorum). An functional application demonstrating its functionality is available at secrets.dyne.org
The FXC protocol and its use case (mostly related to social digital currency) are explained in this document Implementation of digital social currency infrastructure (D5.5) produced as part of the research conducted in the D-CENT project.
(require 'fxc.core)
(def secret (fxc.core/generate :url 32))
(def shares (fxc.core/encode fxc.core/settings secret))
(fxc.core/decode fxc.core/settings shares)
Default configuration settings:
{:salt "La gatta sul tetto che scotta",
:description "FXC v1 (Simple Secret Sharing, Freecoin component)",
:protocol "FXC1", :alphabet "ABCDEFGHJKLMNPQRSTUVWXYZ23456789",
:quorum 3,
:prime prime4096,
:type "WEB",
:total 5,
:max 1024,
:length 6,
:entropy 3.1}
Public functions:
fxc.core/encode
([conf pass])
Takes a string and returns multiple strings that can be used to
retrieve the original according to settings.
fxc.core/decode
([conf slices])
Takes a collection of strings and returns the original secret
according to the settings.
fxc.core/generate
([type size])
Generates a random password of type and size. Available types
are :bytes :base64 :base32 :hex and :url
Industry standard addressed: Information technology -- Security techniques -- Secret sharing
The Secret Sharing algorithm adopted is based on Shamir's Secret Sharing, references:
The implementation used is by Tim Tiemens with a 4096 cipher prime number. The Integer Compression algorithm used internally is the FastPFOR128 by Daniel Lemire, see: Lemire, D. and Boytsov, L. "Decoding billions of integers per second through vectorization" (2015).
FXC is Copyright (C) 2015-2019 by the Dyne.org Foundation
Designed, written and maintained by Denis Roio jaromil@dyne.org
This project is licensed under the AGPL 3 License - see the LICENSE file for details
If you modify FXC, or any covered work, by linking or combining it with any library (or a modified version of that library), containing parts covered by the terms of EPL v 1.0, the licensors of this Program grant you additional permission to convey the resulting work. Your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. Corresponding Source for a non-source form of such a combination shall include the source code for the parts of the libraries (dependencies) covered by the terms of EPL v 1.0 used as well as that of the covered work.
Can you improve this documentation? These fine people already did:
Jaromil & Aspasia BenetiEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close