Я читаю документ WOTS+, но у меня возникли проблемы с его обозначениями и особенно с задействованными единицами измерения. Например, в моей интерпретации параметры п=11
, ш=16
и м=256
привести к квантовому уровню безопасности около 81
биты, с 992 байта
длина подписи, но это выглядит неправильно.
Насколько мне известно, я сделал следующий скрипт для вывода длины открытого ключа и подписи, а также уровня безопасности как для WOTS+, так и для WOTS.
ВОТС+
импортировать математику
n = 16 # параметр безопасности, в байтах
w = 16 # параметр w
m = 256 # длина сообщения в битах
l1 = math.ceil(m / math.log2(w))
l2 = math.floor(math.log2(l1*(w-1))/math.log2(w))+1
л = л1 + л2
# формулы из бумаги
pub_len = (l + w - 1) * n + 8 # длина открытого ключа в байтах
sig_len = l * n # длина подписи в байтах
sec_lvl = n*8 - math.log2(w*w*l + w) # квантовый уровень безопасности в битах
распечатать("уотс+")
print("pub_len: " + ул(pub_len))
print("sig_len: " + ул(sig_len))
print("sec_lvl: " + ул(sec_lvl))
ВОТС
импортировать математику
n = 256 # параметр безопасности, в битах
w = 16 # бит на единицу подписи
m = 256 # длина сообщения в битах
l1 = н / ш
l2 = math.ceil((math.floor(math.log2(l1))+1+w)/w)
л = л1 + л2
# возможно неправильно
pub_len = m * l1 / 8 # длина открытого ключа в байтах
sig_len = m * l / 8 # длина подписи в байтах
sec_lvl = m / 3 # квантовый уровень безопасности в битах
распечатать("вот")
print("pub_len: " + ул(pub_len))
print("sig_len: " + ул(sig_len))
print("sec_lvl: " + ул(sec_lvl))
Верны ли мои расчеты?