প্রদত্ত 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]।