Skip to content
This repository has been archived by the owner on Nov 2, 2019. It is now read-only.
/ dcrm-java Public archive

Distributed Control Rights Management Signature Verification Program

License

Notifications You must be signed in to change notification settings

FUSIONFoundation/dcrm-java

Repository files navigation

Distributed Control Rights Management Signature Verification Program

FUSION's Distributed Control Rights Management technology uses distributed computing, homomorphic encryption, zero knowledge proofs and other cryptographic techniques to replace the complete private key with private key fragments. Distributed generation of a valid public key, address and transaction signature in accordance with the targeted blockchain ECDSA algorithm and specification is implemented. With this technology, the management and operation of the crypto-assets on all different blockchains may be realized on FUSION. DCRM is the core technology facilitating the management of assets across heterogeneous blockchains.

To learn more about DCRM, please read the FUSION DCRM Verification v1 Guide.pdf.

Note: FUSIONDCRM is considered verification program. We make no warranties or guarantees of its security or stability.

Release info

FUSIONDCRM-v2.0 uses the same DCRM technology as the previous version, and build multiple virtual users locally to demonstrate how to complete the distributed execution of the DCRM. On the basis of the previous version, the new version completes a transfer transaction signature for assets controlled by distributed private key, and generates the RAW transaction. By broadcasting the original transaction to the target main chain, the user can transfer these assets, thus making the user have a more intuitive experience of dcrm technology.

This release shows the DCRM technology's support for Ethereum.

We will continue to update v2.0 in the near future. In v2.1, we will implement support for the DCRM technology used in both Ethereum and Bitcoin.

In the next phase, we will release v3.0 of the DCRM verification. In this release, we plan to build a distributed DCRM verification network based on P2P network environment. At that time, users can participate and experience the complete process of distributed generation of private keys, public keys and transaction signatures in a way that acts as one of the nodes.

1. Description of the verification

1.1 Function of distributed generation

The verification program demonstrates the verification process of the FUSION Distributed Control Rights Management, including:

  1. The private key fragments are generated and stored separately by multiple nodes. The public key is generated through distributed computation with the private key fragments.
  2. It implements the signature of the designated messages by multiple nodes based on distributed computation.
  3. There is no passing of the private key fragment or assembling a complete private key in this process.

1.2 Verification of public key and signature

The signature generated by Distributed Control Rights Management complies with the digital signature specification of the targeted blockchain. Signature verification remains unchanged. The validation of message signatures involves three input items:

  • The public key. In this case, it will be generated by the private key fragments based on distributed computation.
  • The message signature. In this case, using private key fragments to generate signature for hash of message based on distributed computation.
  • The message itself.

In this verification program, we verify the public key, message and message signature generated by using the method that conforms to the targeted blockchain ECDSA specification. If verification succeeds, we have demonstrated that FUSION Distributed Control Rights Management achieves the status of using the private key fragments, distributed computation, and zero knowledge proofs to generate the public/private key pairing and the message signature for the targeted blockchain.

WithDistributed Control Rights Management, the control and management of the target blockchain account system and crypto assets can be realized on FUSION.

1.3 Verification of application scope for Distributed Control Rights Management management

At present, most blockchains use ECDSA algorithm to implement public and private key pairing and message signature.

According to bitcoin and Ethereum's official documentation and code, both adopt the secp256k1 specification. USDT is based on bitcoin implementation. Therefore, all the above three adopt the same ECDSA specification, that is, secp256k1.

The specification of secp256k1 is adopted in this verification program, which shows that the Distributed Control Rights Management of FUSION can generate the public and private key pairs and the message signatures that are valid on bitcoin, Ethereum and USDT.

As can be seen in the source code, the program can support the other specification of ECDSA algorithms, such as secp256v1 / secp256r1, so it can adapt to control of the different targeted blockchain account and assets by adjusting the parameter. You can find this parameter in the source code. (/FUSIONDCRM/src/org.fsn_cfc.util/BitcoinParams.java)

1.4 Additional Notes

Paillier Cryptosystem

The FUSION's Distributed Control Rights Management, adopts the Paillier Cryptosystem to achieve secure computations among nodes without leaking any information. In the scheme design and final implementation, the private key of the Paillier Cryptosystem is generated and stored in a distributed manner, which ensures that no node can decrypt the result alone. There are a lot of mature implementations of Paillier encryption. In this demo verification program, in order to demonstrate Distributed ECDSA Key Generation, we simplify the process of distributed Paillier encryption.

Blockchain Address Generation

The conversion of public key to blockchrain address is standard hash functions. Distributed computation is not needed. So, the demo verification program does not cover any generation or verification of blockchain address.

Some notes about Java Programming

In order to implement and demonstrate verification program more rapidly, we use Java for developing purposes. After this, we will switch to Golang, and finally run Distributed Control Rights Management on the FUSION mainnet.

In anticipation of the Lock-in and management of real assets, Distributed Control Rights Management will be tested in the FUSION testnet to demonstrate and tune, and so as to get the optimal implementation.

2. Compilation on Windows

2.1 Contents

The compressed file, named "FUSION DCRM verification v1.zip", includes the source code of verification program, and a dynamic linking library file named gmp.dll.

Gmp.dll comes from the mathematical computing algorithm library of GMP (The GNU Multiple Precision Arithmetic Library, https://gmplib.org/).

2.2 Environment

Windows environment configuration.

  1. Download and install the JDK 1.8 32bit for Windows.

Download address:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

And configure system environment variables based on where JDK is actually installed, such as:

And put the gmp.dll in this directory: jre/bin.

  1. Download and install the Eclipse 32 bit for Windows.

Download address:

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/oxygen/3a/eclipse-jee-oxygen-3a-win32.zip

2.3 Compile and execute

Run the Eclipse, and click the "import" option on the "file" menu.

Select the option named "Existing projects into workspace" of "General" item and click "next".

By clicking the button named "browse", select the folder where the validator program folder resides, and click "finish".

The project directory of FUSIONDCRM is displayed on the left of the Eclipse window. There are two programs: TestThresholdECDSA.java and BatchThresholdECDSA.javain the path of /FUSIONDCRM/src/org.fsn_cfc.test.

Double-click one of them, you can see the source code in the middle of the Eclipse window. Right-click on the code area, select "Run As" from the menu that appears, and click "Java Application" to execute the program.

The output information during execution is displayed in the "Console" window.

3. Compilation on Mac OS

3.1 Contents

The compressed file, named "FUSION DCRM verification v1.zip", includes the source code of verification program.

3.2 Environment

Mac OS environment configuration:

  1. Download and install the JDK 10.0. for Mac OS.

Download address:

http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

  1. Download and install the Visual Studio Code for Mac OS.

Download address:

https://code.visualstudio.com/#alt-downloads

  1. Download and install the java debugging plug-in for Visual Studio Code.

Download address:

https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug

4.Install the brew and libgmp

Install the brew package management, and enter the command under the terminal as follow.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
  1. Install the libgmp.
brew install gmp

After successful brew package management installation, enter the command in the terminal as follows.

3.3 Compile and execute

  1. Open the project folder in the Visual Studio Code

  2. After generating the project configuration file launch.json, press F5, run the main program.

Note: because the default configuration of VSCode does not support accepting input parameters in a debug environment, there will be an error message: Failed to evaluate. Reason: Cannot evaluate because the thread is resumed.

The solution is to change the parameters of the main class in launch.json as this "console": "integratedTerminal"

  1. After inputting the signature message and number of nodes in the debugging terminal window, output the execution state information content and pass the test.

4. Compilation on Linux

4.1 Contents

The compressed file named "FUSION DCRM verification v1.zip", includes the source code of verification program.

4.2 Environment

Linux environment configuration:

  1. Download and install the JDK10.0.1 64bit for Linux.

Download address:

http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

Configure the system environment variables.

  1. Download and install the Eclipse for Linux.

Download address:

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/oxygen/3a/eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz

4.3 Compile and execute

Run the program in the Eclipse is as same as running on Windows.

5 How to test

User Test Guide