Verilen n(oyuncu sayısı), t(eşik değeri) ve s(sır), Shamir'in Gizli Paylaşım algoritmasın tarafından üretilen sırları çıkarır .
Algoritma
Bu zorluğun amaçları için, hesaplamalar GF (251) (sonlu boyut alanı 251, aksi halde tamsayı mod 251 olarak bilinir ) içinde yapılacaktır. Normalde, alan, büyüklüğü çok daha büyük olacak şekilde seçilecektir n. Zorluğu basitleştirmek için alan boyutu sabit olacaktır. 2518 bit işaretsiz tamsayı ile temsil edilebilen en büyük asal olduğu için seçilmiştir.
t-1(Kapsayıcı) aralığında rastgele tamsayılar oluşturun[0, 250]. Bu etiket , bir 1 ile bir t-1 .- Sabit değer ve adım 1'den rastgele tamsayıları kullanarak güçlerin katsayıları olarak bir
t-1derece polinomu oluşturun : f (x) = s + x * a 1 + x 2 * a 2 + ... + x t- 1 * bir t-1 .sx - (Dahil) aralığındaki
(f(z) mod 251)her biri için çıktı .z[1, n]
Referans uygulaması
#!/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)
Doğrulama
Çıktıları doğrulamak için aşağıdaki Yığın Parçacığı kullanılabilir:
kurallar
sdaha az bir negatif olmayan bir tamsayı olacaktır251venvetdaha pozitif tamsayı daha az olacaktır251ve daha büyük1. Ayrıca, girişlerin geçerli olduğu garanti edilir (anlamt <= n).- Giriş ve çıkış makul, açık ve tutarlı bir formatta olabilir.
- Rastgele sayılar düzgün bir dağılımdan örneklenmelidir - olası her bir değerin eşit seçilme olasılığı olmalıdır.
zvef(z)? Birf(z)s sırasını sırayla yazdırırsam ,zdizin tarafından ima edilir.[[1, 5], [2, 2], [3, 9], [4, 14]]daha fazla bilgi içermiyor[5, 2, 9, 14].