Proactive Secret SharingWith secret sharing we take a secret value and then share it with others. For example we might have a share for Bob, Alice, Carol and Dave and then for three of them to come together to bring their shares together. For an any 3-from-4, we can use a quadratic equation, such as \(f(x)=20 x^2 - 2 x + 10\), and where the value of 10 is the secret. Bob then gets the value of \(f(x)\) when \(x=1\). This can be defined as \(f(1)\). Carol gets \(f(2)\), Dave gets \(f(3)\) and Alice gets \(f(4)\). The secret value is thus \(f(0)\). They then each know a point on the quadratic equation, and three of them can bring then back to recover the secret. In this case we will generate a random polynomial of \(a x^2 + b x + secret\), and then distribute the shares to Bob, Alice, Carol and Dave. Finally we will recover the secret from three of these shares (Bob, Carol and Dave). With proactive secret shares, Bob, Carol and Dave can regenerate their shares in order to remove Alice from the sharing process. For this, Bob generates a new equation of \(g(x)\) and where \(g(0)=0\), Carol generates \(h(x)\) and where \(h(0)=0\) and Dave generates \(k(x)\) \(k(0)=0\). Bob then shares \(g(2)\) with Carol and \(g(3)\) with Dave, and each of them do the same with their new equations. Once the sharing is over they will have a new sharing equation of \(f'(x)=f(x)+g(x)+h(x)+k(x)\), and where \(f'(0)\) will generate the secret [article]. [Secret shares with CRT (Asmuth-Bloom threshold)][Secret shares with CRT (Mignotte threshold )][Secret shares with Blakley method][Shamir's Secret Sharing][Proactive Secret Sharing] OutlineWith secret sharing we take a secret value and then share it with others. For example we might have a share for Bob, Alice, Carol and Dave and then for three of them to come together to bring their shares together. For an any 3-from-4, we can use a quadratic equation, such as \(f(x)=20 x^2 - 2 x + 10\), and where the value of 10 is the secret. Bob then gets the value of \(f(x)\) when \(x=1\). This can be defined as \(f(1)\). Carol gets \(f(2)\), Dave gets \(f(3)\) and Alice gets \(f(4)\). The secret value is thus \(f(0)\). They then each know a point on the quadratic equation, and three of them can bring then back to recover the secret. In this case we will generate a random polynomial of \(a x^2 + b x + secret\), and then distribute the shares to Bob, Alice, Carol and Dave. Finally we will recover the secret from three of these shares (Bob, Carol and Dave). With proactive secret shares, Bob, Carol and Dave can regenerate their shares in order to remove Alice from the sharing process. For this, Bob generates a new equation of \(g(x)\) and where \(g(0)=0\), Carol generates \(h(x)\) and where \(h(0)=0\), and Dave generates \(k(x)\) and where \(k(0)=0\). Bob then shares \(g(2)\) with Carol and \(g(3)\) with Dave, and each of them do the same with their new equations. Thus Carol passes \(h(1)\) to Bob, and \(h(3)\) to Dave, and Dave passes \(k(1)\) to Bob and \(k(2)\) to Carol. Bob's new share value will be \(f(1)+g(1)+h(1)+k(1)\). Once the re-sharing is over they will have a new sharing equation of \(f'(x)=f(x)+g(x)+h(x)+k(x)\), and where \(f'(0)\) will generate the secret. CodeIn this case we use Numpy to generate the polynomial, and also recover it: import numpy as np import random import sys a = random.randint(-20,20) b = random.randint(-20,20) secret = 10 if (len(sys.argv)>1): secret=int(sys.argv[1]) seq = [a,b,secret] f = np.poly1d(seq) print ("Secret equation:\n",f) print ("\nSecret: ",f(0)) print ("Bob: ",f(1),end=' ') print ("Carol: ",f(2),end=' ') print ("Dave: ",f(3),end=' ') print ("Alice: ",f(4)) g_x = np.poly1d([random.randint(-20,20),random.randint(-20,20),0]) h_x = np.poly1d([random.randint(-20,20),random.randint(-20,20),0]) k_x = np.poly1d([random.randint(-20,20),random.randint(-20,20),0]) print ("\nBob's new secret equation:\n",g_x) print ("Carol's new secret equation:\n",h_x) print ("Dave's new secret equation:\n",k_x) carol_to_bob = h_x(1) dave_to_bob = k_x(1) print ("\nBob new value: ",f(1)+g_x(1)+carol_to_bob+dave_to_bob) bob_to_carol = g_x(2) dave_to_carol = k_x(2) print ("Carol new value: ",f(2)+h_x(2)+bob_to_carol+dave_to_carol) bob_to_dave = g_x(3) carol_to_dave = h_x(3) print ("Dave new value: ",f(3)+k_x(3)+bob_to_dave+carol_to_dave) f_ = f+g_x+h_x+k_x print ("New secret:\n",f_) print ("\nSecret: ",f_(0)) print ("Bob: ",f_(1),end=' ') print ("Carol: ",f_(2),end=' ') print ("Dave: ",f_(3),end=' ') x=[1,2,3] y=[f_(1),f_(2),f_(3)] res=np.polyfit(x,y,2) print ("\nSecret equation: ",res) print ("Secret: ",int(res[2])) A sample run with a secret of 10 and a secret equation of \(20x^2 +4x +10\) is: Secret equation: 2 20 x + 4 x + 10 Secret: 10 Bob: 34 Carol: 98 Dave: 202 Alice: 346 Bob's new secret equation: 2 10 x + 8 x Carol's new secret equation: 2 8 x - 17 x Dave's new secret equation: 2 -11 x - 11 x Bob new value: 21 Carol new value: 86 Dave new value: 205 New secret: 2 27 x - 16 x + 10 Secret: 10 Bob: 21 Carol: 86 Dave: 205 Secret equation: [ 27. -16. 10.] Secret: 10 Presentation |