代码之家  ›  专栏  ›  技术社区  ›  user4653789

如何计算charm crypto中组元素的位大小?

  •  1
  • user4653789  · 技术社区  · 8 年前

    我想用这个方案 “Hess - Efficient identity based signature schemes based on pairings.” Charm-Crypto .

    据我所知 this related question ,序列化元素会得到一个Base64编码的字符串。从那以后 this other question about Base64

    signature = {'S1' : S1, 'S2' : S2}
    S2_serial = group.serialize(signature['S2'])
    
    sigLenInBase64 = len(S2_serial)
    sigLenInByte = (sigLenInBase64 *3)/4
    sigLenInBit = sigLenInByte * 8
    

    由于S2是G1的一个组元素,我希望其大小与基础曲线的大小相同(“SS512”的大小为512Bit,“MNT224”的大小为224Bit,等等)。然而,“SS512”和“MNT224”的大小相差28位(分别为540位和252位),而“MNT159”的大小相差21位。为什么?对于给定的曲线,我如何预测它会偏离多少?

    我目前的猜测是,我没有考虑一些额外的信息(比如符号的字节)。

    更新: 使用公认的答案,我现在可以正确计算如下大小:

    def compute_bitsize(base64_input):
        b_padded = base64_input.split(str.encode(":"))[1]
        pad_size = b_padded.count(str.encode("="))
        b_len_without_pad = len(b_padded)-4
        byte_len = (b_len_without_pad *3)/4 +(3-pad_size)-1
        bit_len = byte_len * 8
        return bit_len
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   erth    8 年前

    以“SS512”的序列化为例 question you link to . 序列化字符串为:

    1: Nri028S0SySkDoN0JH1Lu6HQo/JKHQ7DCZHI1MURHOUIGCONN14GZMHWOPYQOXNJOYSCLHYNONSVCLJVDLGGE=

    查看线路:

    PyObject*result=PyBytes\u FromFormat(“%d:%s”,element->element\u type,(const char*)base64\u data\u buf);

    从…起 the source code for charm 我们看到你感兴趣的字符串部分是

    Nri028S0SySkDoN0JH1Lu6HQo/JKHQ7DCZHI1MURHOUIGCONN14GZMHWOPYQOXNJOYSCLHYNONSVCLJVDLGGE=

    按照中的说明对此进行解码 Wikipedia under 'Decoding Base64 with padding' 给出了65个字节,其中一个字节是根据 您链接到的问题 .