প্রদত্ত n
(খেলোয়াড়ের সংখ্যা), t
(প্রান্তিক মান) এবং s
(গোপনীয়তা) শামির সিক্রেট শেয়ারিং অ্যালগরিদমn
দ্বারা উত্পন্ন গোপনগুলি আউটপুট দেয় ।
অ্যালগরিদম
এই চ্যালেঞ্জের উদ্দেশ্যে, গণনাগুলি জিএফ (251) (আকারের সীমাবদ্ধ ক্ষেত্র 251
, অন্যথায় পূর্ণসংখ্যা 251 হিসাবে পরিচিত ) এ করা হবে। সাধারণত, ক্ষেত্রটি এমনটি বেছে নেওয়া হবে যে এর আকারটি তার চেয়ে অনেক বেশি বড় n
। চ্যালেঞ্জকে সহজ করার জন্য, ফিল্ডের আকারটি স্থির থাকবে। 251
এটি বেছে নেওয়া হয়েছে কারণ এটি 8-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার দ্বারা সবচেয়ে বড় প্রধান প্রতিনিধিত্বযোগ্য।
t-1
(অন্তর্ভুক্ত) ব্যাপ্তিতে এলোমেলো পূর্ণসংখ্যা তৈরি করুন[0, 250]
। এই লেবেল একটি 1 মাধ্যমে একটি টি-1 ।- একটি নির্মানের
t-1
ম ডিগ্রী বহুপদী ব্যবহারs
ধ্রুবক মান হিসাবে এবং ক্ষমতা কোফিসিয়েন্টস হিসাবে ধাপ 1 থেকে র্যান্ডম পূর্ণসংখ্যারx
: চ (x) = গুলি + X * একটি 1 + X 2 * একটি 2 ... + X T- 1 * একটি টি -1 । - (অন্তর্ভুক্ত) ব্যাপ্তির
(f(z) mod 251)
প্রত্যেকটির আউটপুট ।z
[1, n]
রেফারেন্স বাস্তবায়ন
#!/usr/bin/env python
from __future__ import print_function
import random
import sys
# Shamir's Secret Sharing algorithm
# Input is taken on the command line, in the format "python shamir.py n t s"
n, t, s = [int(x) for x in sys.argv[1:4]]
if t > n:
print("Error: t must be less than or equal to n")
exit()
if n not in range(2, 251):
print("Error: n must be a positive integer less than 251")
exit()
if t not in range(2, 251):
print("Error: t must be a positive integer less than 251")
exit()
if s not in range(251):
print("Error: s must be a non-negative integer less than 251")
exit()
p = 251
a = [random.randrange(0, 251) for x in range(t-1)]
def f(x):
return s + sum(c*x**(i+1) for i,c in enumerate(a))
# Outputting the polynomial is for explanatory purposes only, and should not be included
# in the output for the challenge
print("f(x) = {0} + {1}".format(s, ' + '.join('{0}*x^{1}'.format(c, i+1) for i,c in enumerate(a))))
for z in range(1, n+1):
print(f(z) % p)
প্রতিপাদন
নিম্নলিখিত স্ট্যাক স্নিপেট আউটপুট যাচাই করতে ব্যবহার করা যেতে পারে:
বিধি
s
একটি অ-নেতিবাচক পূর্ণসংখ্যা চেয়ে কম হবে251
, এবংn
এবংt
তুলনায় ধনাত্মক পূর্ণসংখ্যা কম হবে251
এবং তার চেয়ে অনেক বেশী1
। তদ্ব্যতীত, আপনি গ্যারান্টিযুক্ত যে ইনপুটগুলি বৈধ (অর্থt <= n
)।- ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত, দ্ব্যর্থহীন এবং সামঞ্জস্যপূর্ণ ফর্ম্যাটে হতে পারে।
- অবিচ্ছিন্ন বিতরণ থেকে এলোমেলো সংখ্যাগুলি নমুনা করতে হয় - প্রতিটি সম্ভাব্য মানটি বেছে নেওয়ার সমান সম্ভাবনা থাকা উচিত।
z
এবংf(z)
? যদি আমিf(z)
ক্রমানুসারে একটি অ্যারে মুদ্রণ করি তবেz
সূচক দ্বারা প্রেরণ করা হয়।[[1, 5], [2, 2], [3, 9], [4, 14]]
এর চেয়ে বেশি তথ্য ধারণ করে না[5, 2, 9, 14]
।