【问题标题】:How to set order of pairing groups in Charm crypto如何在 Charm 加密中设置配对组的顺序
【发布时间】:2015-10-10 10:33:57
【问题描述】:

我正在尝试使用魅力加密框架实施方案。为此,我需要限制配对组的顺序。文档中提到所有配对组都是素数 p。有没有办法设置和检索组的顺序?

这里是一些初始化代码:

from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
group = PairingGroup('SS512') # Way to limit order of this Group.
g= group.random(G1) 

【问题讨论】:

    标签: python cryptography charm-crypto


    【解决方案1】:

    您不能任意限制组的顺序,因为它是静态定义的。仅更改顺序会导致错误的数学运算。有关实际曲线/组定义,请参阅pairingcurves.py

    Charm 不提供用于随机生成组的 API。您必须使用其他方法。您可以为不同类型的配对(A, A1、D、E、F、G)定义自己的双线性组,并通过file path 加载它:

    group = PairingGroup('path/to/your.curve', param_file=True)
    

    找到一个好的曲线是很棘手的,所以这个任务不应该掉以轻心。或者您可以使用适合您需要的现有曲线,但您需要将其定义适合 PBC 框架语法。或者,您可以尝试使用 MIRACL 或 RELIC 组。

    称为 SS512 的双线性组具有 159 位的顺序,因此您可以使用 jPBC 轻松生成类似大小的组,如下所示:

    TypeACurveGenerator acg = new TypeACurveGenerator(159, 512);
    System.out.println(acg.generate().toString());
    

    如果这个问题是关于在 Charm 中使用复合配对,那么这当然是可能的,但是大多数(全部?)使用复合配对的方案都可以在不改变素数配对组的情况下工作。由于 Charm 主要是一个原型设计框架,因此这是可以接受的。

    如果您想要复合订单配对,那么您需要使用类型 A1 配对(以 PBC 术语)。这是一个随机生成的 512 位的 3 素数复合阶配对:

    a1 型 p 1670989300461616676020115835196624302572015979741737622588414172392006868526486484884570321557721963197638289051694226860029659217040445686227725866093025893199423787713616626672757609704165197428442342008003828808450677009862027725351326816526944993760066091035498153554504093779461048411316013603195971067672308536313762529018467620342707812387949408799890849708954393542918305728285021157211449323969172048055050509532384121122664412498844071023691473088832866379 ñ609850109657524334313910888757892081230662766329101322112559916931389368075360030979770190349533563210816893814486944109499875626657096965776542286895264924525337148800590009734583069235096787382643190513870010514033093799219718147938440443987936129109513171910765749472446749554547827887341610804086120827617630852669256397451995481876900661455455988613098850258742479395225659024921540568325346468601887608779215514427877416468125697992278858037843603317092287 N0 8505241857674726137023630400543607424307642763093227742803963199629609197431754602210402024133058838940680654387728383432014899362154746576168888879287087 N1 6728838950500080306008250663471535622833113558890962570274290389468902237095474435002792009761303551917673603722453122814539738669387524716830981925740419 N2 10656051345714616867334012480608522414320097962876120231224626211497062700168731928194215198773439101914013339645791513272716800476458903122389271111043579 l 2740

    这是通过 jPBC 使用以下代码生成的:

    TypeA1CurveGenerator a1 = new TypeA1CurveGenerator(3, 512);
    System.out.println(a1.generate().toString());
    

    使用后果自负。

    【讨论】:

    • 这是我要编写的语句: 随机选择一个素数阶 p 的双线性群 G,其中 2^λ ≤ p ≤ 2^(λ+1) ,生成器 g ∈ G 和 α ∈ R Z p。如果您能指导我搜索符合上述标准的现有曲线,那就太好了。 (或)实现这一目标的详细过程。感谢您的及时回复。
    • 我不知道你的方案(你没有提供任何参考),但 λ 可能是安全参数。只需使用任何现有曲线。使用与其他人相同的双线性组没有(明显的)安全问题。如果您没有找到符合您预期安全参数的组,请使用可用工具 (PBC/jPBC) 生成它。 Charm 似乎没有提供一种使用底层配对库随机生成组的方法。
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 2019-11-06
    • 2012-11-05
    • 2021-12-04
    • 2022-10-07
    • 2011-11-03
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多