ฉันกำลังอ่านกระดาษ WOTS+ แต่ฉันมีปัญหากับสัญลักษณ์และโดยเฉพาะหน่วยที่เกี่ยวข้อง ตัวอย่างเช่น ภายใต้การตีความของฉัน พารามิเตอร์ n=11
, ว=16
และ ม=256
ส่งผลให้ระดับความปลอดภัยควอนตัมอยู่ที่ประมาณ 81
บิตด้วย a 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) # ระดับความปลอดภัยควอนตัมเป็นบิต
พิมพ์ ("ว็อต +")
พิมพ์ ("pub_len: " + str (pub_len))
พิมพ์ ("sig_len: " + str (sig_len))
พิมพ์ ("sec_lvl: " + str (sec_lvl))
วทส
นำเข้าคณิตศาสตร์
n = 256 # พารามิเตอร์ความปลอดภัยเป็นบิต
w = 16 # บิตต่อหน่วยการลงนาม
m = 256 # ความยาวข้อความ หน่วยเป็นบิต
ล.1 = n / w
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 # ระดับความปลอดภัยควอนตัมเป็นบิต
พิมพ์ ("ว็อต")
พิมพ์ ("pub_len: " + str (pub_len))
พิมพ์ ("sig_len: " + str (sig_len))
พิมพ์ ("sec_lvl: " + str (sec_lvl))
การคำนวณของฉันถูกต้องหรือไม่?