Score:2

How can I use additive secret sharing to share the secret key of BFV scheme among $N$ participants?

uz flag

I want to share the secret key of the BFV scheme among N users using the additive secret-sharing protocol (n-out-of-n threshold secret-sharing). Can anyone please help me to adapt the two algorithms correctly?

Note that the secret key of BFV is generated as a random ternary polynomial from R 2 ( R 2 is the key distribution used to sample polynomials with integer coefficients in $\{-1,0,1\}$)

secret key generation algorithm (python code)

import numpy as np

def gen_binary_poly(size):
    """ Generates a polynomial with coeffecients in [0, 1]
    Args:
        size: number of coeffcients, size-1 being the degree of the polynomial.
    Returns:
        array of coefficients with the coeff[i] being the coeff of x ^ i.
    """
    return np.random.randint(0, 2, size, dtype=np.int64)


if __name__ == "__main__":
    
#polynomial modulus degree
size= 2**4  
secret_key = gen_binary_poly(size) 

additive secret sharing algorithm (code python)

import random

def getAdditiveShares(secret, N, fieldSize):
    '''Generate N additive shares from 'secret' in finite field of size 'fieldSize'.'''

    # Generate n-1 shares randomly
    shares = [random.randrange(fieldSize) for i in range(N-1)]

    # Append final share by subtracting all shares from secret
    # Modulo is done with fieldSize to ensure share is within finite field
    shares.append((secret - sum(shares)) % fieldSize )
    return shares

def reconstructSecret(shares, fieldSize):
    '''Regenerate secret from additive shares'''
    return sum(shares) % fieldSize

if __name__ == "__main__":

        N=5 # 5 users
    # Generating the shares
    shares = getAdditiveShares(secret, N, fieldSize)
    print('Shares are:', shares)
    
    # Reconstructing the secret from shares
    print('Reconstructed secret:', reconstructSecret(shares, fieldSize))
Mark avatar
ng flag
What is your goal with combining these? There are somewhat-related technologies (Threshold Fully Homomorphic Encryption and Multi-key Fully Homomorphic Encryption) that may do what you're looking for. They are also somewhat subtle to get right, so if they capture your use case you should really just refer to a paper on them.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.