title | tags | ||||||
---|---|---|---|---|---|---|---|
38. Tate 配对 |
|
这一讲,我们介绍 Tate 配对和它的变种 Ate 配对,它们改进了 Weil 配对,增加了计算效率。
Tate 配对是一种定义在有限域上的椭圆曲线
定义:
其中
Tate 配对具有以下性质:
性质1. 双线性: Tate 配对满足
性质2. 非退化性: 若对于非零的点
性质3. 计算高效: Weil 配对需要我们计算
Ate 配对是 Tate 配对的一个变种,优化了计算过程。Ate 配对使用了 Frobenius 映射和一个较小的循环长度来减少计算中的迭代次数,从而加速配对的计算。以太坊上的配对都是基于 Ate 配对实现的,详见 EIP-197。
下面我们使用以太坊的 py_ecc 库写一个配对示例。在这个示例中,我们取了椭圆曲线上的两个生成元
然后,我们取了三个数
因为
from py_ecc.bn128 import G1, G2, pairing, add, multiply, eq
print(G1)
print(G2)
print("\n")
a = 69
b = 420
c = a * b
A = multiply(G2, a)
B = multiply(G1, b)
pair_A_B = pairing(A, B)
print("Pairing of points A and B: ",pair_A_B)
print("\n")
C = multiply(G2, c)
pair_G2_C = pairing(C, G1)
print("Pairing of points G2 and C: ",pair_G2_C)
print("\n")
print("Is pair_A_B == pair_G2_C? ", pair_A_B == pair_G2_C)
# 输出
# (1, 2)
# ((10857046999023057135944570762232829481370756359578518086990519993285655852781, 11559732032986387107991004021392285783925812861821192530917403151452391805634), (8495653923123431417604973247489272438418190587263600148770280649306958101930, 4082367875863433681332203403145435568316851327593401208105741076214120093531))
# Pairing of points A and B: (19735667940922659777402175920395455799125563888708961631093487249968872129612, 1976543863057094994989237517814173599120655827589866703826517845909315612857, 19686523416572620016989349096902944934819162198495809257491045534399198954254, 5826646852844954420149583478015267673527445979905768896060072350584178989060, 2064185964405234542610947637037132798744921024553195185441592358018988389207, 8341934863294343910133492936755210611939463215146220944606211376003151106114, 12807669762027938768857302676393862225355612177677457846751491105239425227277, 5741126950795831539169012545403256931813076395529913201048083937620822856065, 11074901068523180915867722424807487877141140784438044188857570704539589417315, 19327019285776193278582429402961044775129507055467003359023290900912857119476, 17306986078986604236447922180440988200852103029519452658980599808670992125088, 13188937242065601189938233945175869194113210620973903647453917247887073581439)
# Pairing of points G2 and C: (19735667940922659777402175920395455799125563888708961631093487249968872129612, 1976543863057094994989237517814173599120655827589866703826517845909315612857, 19686523416572620016989349096902944934819162198495809257491045534399198954254, 5826646852844954420149583478015267673527445979905768896060072350584178989060, 2064185964405234542610947637037132798744921024553195185441592358018988389207, 8341934863294343910133492936755210611939463215146220944606211376003151106114, 12807669762027938768857302676393862225355612177677457846751491105239425227277, 5741126950795831539169012545403256931813076395529913201048083937620822856065, 11074901068523180915867722424807487877141140784438044188857570704539589417315, 19327019285776193278582429402961044775129507055467003359023290900912857119476, 17306986078986604236447922180440988200852103029519452658980599808670992125088, 13188937242065601189938233945175869194113210620973903647453917247887073581439)
# Is pair_A_B == pair_G2_C? True
这一讲,我们介绍了 Tate 配对和它的变种 Ate 配对,它们在计算上都比 Weil 要高效。其中,Ate 配对被以太坊采纳并用于计算配对。