DECENT Development Key Distribution

September 04, 2016

After last couple of weeks spent in China let me describe the development direction DECENT Project has taken. DECENT is currently in a pre-alpha stage with its fully functional prototype being extensively documented in:




Let me focus on some of the most interesting features of DECENT-Core. One of them is DECENT Key Distribution, which uses the concept of Shamir’s Secret Sharing (SSS), where a key is divided into multiple parts giving each participant in the sharing scheme a specific part. SSS provides a Threshold Scheme, where only a portion of all participants are required to decrypt the key.

According to Wikipedia,

“One can draw an infinite number of polynomials of degree 2 through 2 points. 3 points are required to define a unique polynomial of degree 2. This image is for illustration purposes only — Shamir’s scheme uses polynomials over a finite field, not representable on a 2-dimensional plane.”

Shamir’s Secret Sharing m-of-n threshold scheme mechanism is being implemented in DECENT-Core in the following steps:


  1. An author creates content in the form of computer files and selects two integers n and m such that n>m>2.
  2. The author’s application generates unique AES encryption key and encrypts a part of the content that is not “free to read”.
  3. The author’s application selects distribution protocol and creates a distribution package containing a free-to-read and encrypted content.
  4. The author’s application splits the encryption key into n shares so that m shares are required to retrieve the key using Shamir secret sharing algorithm.
  5. The author’s application finds n suitable publishers.
  6. The author’s application encrypts the n encryption key parts created in step 4 with public keys of the n publishers assigning 1 share to a single publisher.
  7. The author’s application generates the content submit transaction. The transaction will contain all content metadata, such as title, synopsis or tags, and network relevant data such as validity, price, list of publishers, and list of shares encrypted for each selected publisher.
  8. The transaction is included in next block, where it can be read by the publishers or consumer.

Content Consumer

  1. The content consumer selects content he wishes to buy and his application downloads the distribution package using a chosen protocol (various are admissible).
  2. The content consumer’s application generates request-to-buy transaction. The transaction is included in next block, where it is visible to publishers.
  3. The publishers’ nodes see the request-to-buy in the blockchain. They will decrypt the respective share (from the content_submit transaction) with their private key and encrypt it again with content consumer’s public key.
  4. The publishers’ nodes will generate delivery keys transaction containing the share encrypted with consumer’s key and proof-of-delivery. The transaction is included in next block, where it is visible to the content consumer.
  5. When there are enough shares delivered through the Blockchain, the content consumer will decrypt the shares with their private key, reconstruct the AES decryption key and decrypt the content.

Please note that all DECENT code is currently located in a private Github repository and will be revealed to the public soon.