← XEdDSA & VXEdDSA/
XEdDSA & VXEdDSA · Bölüm 04 cryptography / xeddsa

4. VXEdDSA

VXEdDSA imzalama algoritması, XEdDSA ile aynı girdileri alır. Çıktı iki değerden oluşur. Birincisi, bir imzadır (V || h || s); bu, V bir noktayı, h ve s ise q modülünde tamsayıları kodlayacak biçimde 3b bit uzunluğunda bir bayt dizisidir. İkincisi, V çıktısının cofactor c ile çarpılmasıyla elde edilen ve uzunluğu b bite eşit olan bir VRF çıktı bayt dizisi v'dir.

VXEdDSA doğrulama algoritması, XEdDSA ile aynı girdileri alır; ancak XEdDSA imzası yerine bir VXEdDSA imzası kullanılır. VXEdDSA doğrulaması başarılı olursa, uzunluğu b bite eşit olan bir VRF çıktı bayt dizisi v döndürür; aksi takdirde yanlış döndürür.

Aşağıda vxeddsa_sign ve vxeddsa_verify işlevleri için sözde kod verilmiştir.

vxeddsa_sign(k, M, Z):
    A, a = calculate_key_pair(k)
    B_v = hash_to_point(A || M)
    V = aB_v
    r = hash_3(a || V || Z) (mod q)
    R = rB
    R_v = rB_v
    h = hash_4(A || V || R || R_v || M) (mod q)
    s = r + ha (mod q)
    v = hash_5(cV) (mod 2^b)
    return (V || h || s), v
vxeddsa_verify(u, M, (V || h || s)):
    if u >= p or V.y >= 2^|p| or h >= 2^|q| or s >= 2^|q|:
        return false
    A = convert_mont(u)
    B_v = hash_to_point(A || M)
    if not on_curve(A) or not on_curve(V):
        return false
    if cA == I or cV == I or B_v == I:
        return false
    R = sB - hA
    R_v = sB_v - hV
    h_check = hash_4(A || V || R || R_v || M) (mod q)
    if bytes_equal(h, h_check):
        v = hash_5(cV) (mod 2^b)
        return v
    return false