Giter VIP home page Giter VIP logo

psst's Introduction

psst: Paper-based Secret Sharing Technique

psst is a system for storing secrets without a single point of failure. psst helps the user to split a secret into up to four parts. Each part in isolation reveals nothing about the secret (except its length). Any two parts combined allow the secret to be restored.

The main goal of psst is simplicity. It is a system that can be used with just pen, paper and a six-sided dice. psst is great for people who want to deeply understand what they do and verify every step, and for anyone who has fun with information theory and cryptography.

psst is a restricted case of Shamir's Secret Sharing, operating in GF(5) with a threshold of two. See the Design Choices document for more information about that choice.

How to use psst?

  1. Download the psst worksheet:
    psst PDF (A4 paper)
    psst PDF (US Letter)
  2. Print the worksheet.
  3. Follow the instructions on the printed worksheet.

Find out more

psst was built as a fun way to learn about topics like cryptography and information theory. The Motivation document describes why we made psst, and explains its pros and cons.

The Design Choices document explains and justifies all the choices that went into designing psst.

In What Can Go Wrong, you can read about insecure ways of using psst, and potential attacks against its users.

Where and How to Store Shares discusses what to consider after someone has used psst, when they need a place to store their secret shares.

The page Supplemental Materials contains tables that might be useful for some use cases, but did not fit onto the worksheet.

Alternatives

A number of other implementations if Shamir's Secret Sharing exist:

  • SLIP-0039 is a scheme for hardware wallet seeds, supported by Trezor.
  • SSKR is a generic crypto-focused scheme.
  • EIP 3450 is an unfinished proposal focusing on BIP-39 seeds.
  • ssss is a Unix utility.

Codex32 is another pen-and-paper method for storing secrets. Compared to psst, it has more features (for example, it includes a checksum) and requires more time. People who like pen-and-paper computation will find Codex32's volvelle wheels interesting.

SeedXOR is a scheme that can be computed manually, like psst. The main difference is that it only supports n-of-n schemes, for example 2-of-2. If even one share is lost, the secret cannot be recovered.

BIP-39 Split Mnemonic is a simple 2-of-3 scheme implemented in Ian Coleman's BIP-39 tool. It generates three shares, each containing two thirds of the words in the seed phrase. The sets of words overlap, so that any two shares contain the full phrase. Split Mnemonics are much simpler to use than psst. On the other hand, each share only has a third of the entropy of the full seed. For short seeds (e.g., 12 words), this is only 42 bits, so the full seed can be brute-forced in relatively little time. For 24-word seeds, the brute-force approach is prohibitively expensive.

For many use cases, it is better to avoid secret sharing altogether. For example, to securely store cryptocurrency, a multisig scheme has advantages. For a detailed discussion, refer to CasaBlog: Shamir's Secret Sharing Shortcomings.

For a good overview of considerations for storing secrets, see How to Back Up a Seed Phrase.

Acknowledgements

psst was started by Sjlver and builds on the thinking of many others.

If you have fun using psst, you can send a tip:

  • Bitcoin: bc1q3hnhtgrse3etk52m626zxrkz0hah8hkag4et38
  • Ethereum: 0xAF16c970cb2329E9c3B8f4E54e1e8580937f8406

psst's People

Contributors

sjlver avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

psst's Issues

Create a website for psst

The current page (under /docs/index.html) just redirects to GitHub. It would be a bit nicer to put some content there.

Mention what type of data goes into the secret fields

After 15 minutes of reading the documentation, I am 50% sure that each blank for the secret should contain a single letter out of the alphabet of 25 distinct tokens (with X and J merged together), although the gap is large enough for a short word.

I understand that for the author this is super-obvious, but me, as a causal visitor who is not familiar with Shamir's secret sharing (and uses this work to try to familiarize oneself with the concept), this piece of information is missing with no place even to deduce it.

If the ambiguity is there on purpose because e.g. there are several operating modes the psst can operate - e.g. a secret comprised from 25-level tokens, or just digits, or maybe some other type of data - please provide an example. That can be in a form of a photo of the filled in form. Even better yet would be an accompanying video of the process of filling in the form and then recovering the secret.

And thank you for sharing this! :-)

Document how the tables are constructed

Something like this (from https://news.ycombinator.com/item?id=38963197)

The 25 rows of the table correspond to the 25 linear polynomials in GF(5), evaluated at x=0, 1, 2, 3, and 4.
GF(5) is the "field" that psst uses. It just means that all math is performed using only digits 0 to 4, and we take the remainder modulo 5 after each operation. A linear polynomial has the form ax + b. There are 25 of them because a and b can each take one of the five values.

For example, consider the polynomial 3x + 0. If you evaluate it at x=0, the result is 0. At x=1, it's 3. At x=2, it's 6, which corresponds to 1 in GF(5). At x=3, the result is 4, and at x=4, the result is 2. These values (0 3 1 4 2) form the fourth line in the table above.

The table on the first page of the worksheet and the table on each share all have the same rows. They are just sorted differently, to make it easier to lookup a given row.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.