取 SHA3 哈希函数的指数

Taking the exponent of a SHA3 hash function

我正在尝试实现 python 中论文 Private Data Aggregation with Groups for Smart Grids in a Dynamic Setting using CRT 中描述的协议。

为此,我需要计算以下值:

我知道从 python 3.6 开始,您可以按如下方式计算 SHA3 值:

import hashlib
hash_object = hashlib.sha3_512(b'value_to_encode')
hash_value = hash_object.hexdigest()

我想知道你应该解决这个问题,因为据我所知,SHA-3 函数 returns 是一个字符串,因此不能在具有 n 次方的函数中计算。

我忽略了什么?

如果我们定义一个散列函数 $H: \{0, 1\}^* \rightarrow \{0, 1\}^n$,即产生 $n$ 位输出的散列函数,我们可以始终将其输出的二进制数据 $h$ 解释为整数。此摘要的整数值为 $\sum_{i=0}^n h_i 2^i$,换句话说摘要是整数的基数 2 表示。

在你的例子中,由于 python 有类型的概念,我们需要获取二进制字符串并将其转换为整数类型。内置的 int 函数可以为我们做到这一点:

int(x=0) -> integer

int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal.

>>> int('0b100', base=0)

4

hexdigest 调用将 return 一个以 16 为基数的十六进制字符串,所以你会想做类似 int_value = int(hash_value, 16).

的事情