Charm Crypto中的乘法逆

时间:2017-05-03 15:50:19

标签: python cryptography modular-arithmetic charm-crypto

在Charm Crypto中,我如何获得ZR的乘法逆?我大致有以下代码:

a = group.random(G)
e = group.random(ZR)
x = a ** e
somestuff()
y = x ** (1/e)

其中a没有故意存储。然而,虽然-e可以很好地得到加法逆,但似乎并不是获得乘法逆的正确方法。

1 个答案:

答案 0 :(得分:0)

不确定你的意思。 1/e是Charm Crypto中正确的模块化逆。这是一个完整的例子:

>>> from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
>>> group = PairingGroup('SS512')
>>> a = group.random(G1)
>>> a
[2580989876233721415297389560556166670922761116088625446257120303747454767083854114997254567159052287206977413471899062293779511058710074633103823400659019, 5996565379972917992663126989138580820515927146496218666993731728783513412956887506732385903379922348877197471677004946545491932261438787373567446770237791]
>>> e = group.random(ZR)
>>> x = a ** e
>>> x
[6891729780372399189041525470592995101919015470165150216677136432042436097937961533731911650601678002293909918119625724503886943879739773465990776556262311, 1548281541526614042816533932120191809063134798488215929407179466331621937371141709171095414449680510602430538669648224266688052566354236898986673964076468]
>>> y = x ** (1/e)
>>> y
[2580989876233721415297389560556166670922761116088625446257120303747454767083854114997254567159052287206977413471899062293779511058710074633103823400659019, 5996565379972917992663126989138580820515927146496218666993731728783513412956887506732385903379922348877197471677004946545491932261438787373567446770237791]
>>> y == a
True

或许somestuff()以某种方式更改xe,但它不起作用。