Skip to content

Commit

Permalink
bls: update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
amirylm committed Nov 6, 2023
1 parent 7678244 commit f4f7d4b
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions examples/bls/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,39 @@

This package shows a high level integration with BLS based networks.

## Links

- [github.com/herumi/bls-eth-go-binary](https://github.com/herumi/bls-eth-go-binary) is the library used for BLS signatures.
- [BLS Multi-Signatures With Public-Key Aggregation](https://crypto.stanford.edu/~dabo/pubs/papers/BLSmultisig.html)
- [BLS Signatures Part 1 — Overview](https://alonmuroch-65570.medium.com/bls-signatures-part-1-overview-47d9eebf1c75)

## Overview

Every internal network is represented by a BLS key, which is splitted into shares and distributed among the nodes in that network.
Internal messages are signed with the shares of nodes, once a threshold of signatures is reached, the nodes of that network reconstruct the signature and broadcast it to the other networks. Nodes in other networks verifies the messages using the public key of the BLS key of the producing network.
### BLS Cryptography

BLS signatures allow aggregating multiple signatures into a single signature that can be verified with a single public key, reducing computational overhead in cases where the number of signers is large.

The idea is to aggregate many BLS signatures on a single message (offchain report), as well as using an aggregated public key to verify the message.
The original public keys are not needed for verifying the multi-signature. An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys (plain public-key model)

### Network Overview

The example in this package shows how to integrate BLS signatures in a network of networks. Each network is represented by a BLS key, where the nodes in that network are using shares of that key to sign messages, and the public key of that key can be used to verify messages by anyone that is familiar with the public key.

### Key Generation

For simplification, keys are generated in a central way and distributed across nodes in plain text. In a real world scenario, a proper DKG protocol should be used to generate the keys and distribute the shares.

### Signing

Offchain reports are generated in each round by a different node which is the leader of that round, and signed by all nodes in the network.
Once there is a quorum of valid signatures, the nodes reconstruct a single signature and broadcast to the other networks.

### Verification

Nodes in other networks verify the signature using the public key of the producing network. If the signature is valid, the report is accepted and the round is finalized.

NOTE: nodes also verifies that the report is valid by checking the sequence number against the last finalized round.

## Running the example

Expand Down

0 comments on commit f4f7d4b

Please sign in to comment.