グループは静的に定義されるため、グループの順序を任意に制限することはできません。順序だけを変更すると、間違った計算になります。実際のカーブ/グループの定義については、pairingcurves.pyを参照してください。
Charm はランダムにグループを生成する API を提供しません。他の手段を使用する必要があります。さまざまなタイプのペア ( A、A1、D、E、F、G)に対して独自の双一次グループを定義し、ファイル パスを介してロードできます。
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 は主にプロトタイピング フレームワークであるため、これはある程度許容されます。
複合順序のペアリングが必要な場合は、タイプ A1 のペアリングを使用する必要があります (PBC 用語で)。以下は、ランダムに生成された、512 ビットの 3 つの素数の複合順序ペアです。
タイプa1
p 1670989300461616676020115835196624302572015979741737622588414172392006868526486484884570321557721963197638289051694226860029659217040445686227725866093025893199423787713616626672757609704165197428442342008003828808450677009862027725351326816526944993760066091035498153554504093779461048411316013603195971067672308536313762529018467620342707812387949408799890849708954393542918305728285021157211449323969172048055050509532384121122664412498844071023691473088832866379
n 609850109657524334313910888757892081230662766329101322112559916931389368075360030979770190349533563210816893814486944109499875626657096965776542286895264924525337148800590009734583069235096787382643190513870010514033093799219718147938440443987936129109513171910765749472446749554547827887341610804086120827617630852669256397451995481876900661455455988613098850258742479395225659024921540568325346468601887608779215514427877416468125697992278858037843603317092287
n0 8505241857674726137023630400543607424307642763093227742803963199629609197431754602210402024133058838940680654387728383432014899362154746576168888879287087
n1 6728838950500080306008250663471535622833113558890962570274290389468902237095474435002792009761303551917673603722453122814539738669387524716830981925740419
n2 10656051345714616867334012480608522414320097962876120231224626211497062700168731928194215198773439101914013339645791513272716800476458903122389271111043579
l 2740
これは、jPBC を介して次のコードで生成されました。
TypeA1CurveGenerator a1 = new TypeA1CurveGenerator(3, 512);
System.out.println(a1.generate().toString());
自己責任で使用してください。