【问题标题】:PBC: get hash from an elementPBC:从元素中获取哈希
【发布时间】:2016-04-23 20:35:37
【问题描述】:

在 PBC 库中有一个从哈希中获取元素的函数:

void element_from_hash(element_t e, void *data, int len)

从存储在缓冲区数据中的 len 个字节确定性地生成一个元素 e。

PBC manuals: Converting elements

有没有办法反过来,即从元素中恢复相应的哈希? 或者,是否有一致的方法将字符串来回转换为元素? element_to_bytes / element_from_bytes 是否有效,或者这些字节是否以特定形式被解释为 PBC 元素(我强烈认为)?

我正在构建一个密码系统,显然我需要在解密后恢复明文;)。 为了更好地解释我的问题,我需要一种将字符串编码为元素并将元素解码为字符串的方法。

【问题讨论】:

  • 应该有两个函数可用(我没有仔细观察)从一些数据中获取散列元素并从元素中获取字节散列。通常,您只需要其中一个而不是两者都需要(因为它们是不可逆的)。请记住,混合加密或更确切地说是密钥封装方法只需要其中一种功能即可进行加密和解密,因此您应该认真考虑您的加密系统或在Cryptography 上提问。
  • @ArtjomB。不,我需要将消息转换为元素,就像在 RSA 中一样,您必须将消息编码为整数。
  • 您不必将消息编码为整数以进行 RSA 加密或解密。看看Key Encapsulation Method。这基本上就是使用椭圆曲线的 all 加密的工作原理。
  • @ArtjomB。我明白你的意思,我可以简单地生成一个随机元素作为“消息”并使用它来派生对称密钥,我知道这一点,实际上我的备份计划是使用 element_to_bytes 然后散列。我想知道是否有这样的功能既可用于测试目的,又因为它会是某种嵌入式 KDF(再次很高兴拥有用于测试)。

标签: c hash cryptography


【解决方案1】:

我研究了手册并查阅了一些理论。我不是密码学专家,我忘记了很多关于椭圆环和群的事情。

基于配对的密码学的基本目的是能够安全地交换或构造共享密钥,以用于进一步的加密或身份验证,因为知道有人可能正在窃听交换/构造中使用的通信。

散列手册和理论讨论了从消息中生成散列的方法。该哈希值将依次用于使用 PBC 库的函数从环中获取密钥的组成部分。

散列根据定义意味着从较大的事物映射到较小的事物。例如,从 1024 个字符的消息生成 16 位整数散列。因此,根据定义,不可能从散列中获取原始消息 - 有无限数量的消息符合条件,因为它们都生成相同的散列。

但是,使用从交换获得的密钥并使用库的函数可以解密消息。

【讨论】:

  • 您可能误解了我的问题,我不必散列,而是将字符串转换为元素,反之亦然。我提到哈希是因为有一个函数 element_from_hash 可以让我像我想要的那样对字符串进行编码,而不是因为我正在使用哈希。
  • 据我了解,element_from_hash 中的元素比消息小得多。该函数不加密但识别可用于加密/解密的 [a] 密钥的组成部分。所以方案是:1)获取密钥; 2) 用密钥加密消息; 3) 发送消息; 4) 识别消息的密钥; 5)解密。 element_from_hash 用于第 4 步(如果我正确理解了理论)
  • 我不是用函数加密而是编码,那我继续加密。即每个人都应该能够编码和解码,这只是将消息转换为我将用来加密的代数结构的一种手段。此外请记住,有很多加密方案的工作方式非常不同,而且 PBC 是一个“通用”库,而不是特定于方案。我可能承认element_from_hash 似乎是为数字签名算法而设计的,但没有人说它可能会被用于其他方面。
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2013-10-28
  • 2013-12-16
  • 2010-12-19
  • 1970-01-01
  • 2012-06-21
  • 2016-07-22
相关资源
最近更新 更多