建议和反馈

请填写你的反馈内容

区块链中的数学 - 哈希承诺

2021-02-04 ·1773次阅读 ·读完需要10分钟

作者:blocksight


本文介绍密码学承诺的含义及性质,并对哈希承诺做了说明,关于hash函数的内在机制实际是比较复杂的,我们以黑盒的角度来学习了解它的性质,在区块链&密码学中,哈希函数占据了基础且重要的位置。 比如区块链中常用的sha256,keccak等哈希算法。

写在前面

上一篇介绍了不经意传输协议,原本打算本文写 paillier 加密及其同态,但是想想还是后面再说比较好,按循序渐进顺序,先介绍密码学承诺更自然些,

好了,进入正题 --- 密码学中的承诺!

密码学中的承诺

密码学中的承诺不同于日常生活中承诺的含义。日常生活中,通常的承诺一般是保证在 XXX 日期实现某个既定目标或行为,可以是完成某项作业,取得什么进展等等,有点类似合同的性质,到达一特定时间点兑现预先诺言。比如年底前完成销售额 1 亿的目标,就是一个承诺。

密码学中的承诺与此不同,它是对一个既有的确定性的事实(敏感数据)进行陈诉,保证未来的某个时间有验证方可以验证承诺的真假,也就是说承诺的标的是当前时间的,未来不会发生变化。

密码学承诺包含承诺方和验证方角色,两个使用阶段。

承诺生成(Commit)阶段
承诺方选择一个暂不公开的敏感数据 v,计算出对应的承诺 c 并公开。

承诺披露(Reveal)阶段
也称之为承诺打开-验证(Open-Verify)阶段,承诺方公布敏感数据 v 的明文和其他的必要参数,验证方重复承诺生成的计算过程,比较新生成的承诺与之前接收到的承诺 c 是否一致,一致则表示验证成功,否则失败。

密码学承诺具备两个特性:

隐匿性(hiding)
做出的承诺是密文形式,在打开承诺之前,验证方不知道承诺方的敏感数据。
绑定性(binding)
一旦承诺生成并公开承诺,承诺方不能将已承诺的敏感数据换成(或解释成)另一个不同的数据。

本文之后提到的承诺,不再加以说明,默认均指密码学承诺。接下来介绍一些常用的承诺。

哈希承诺

哈希承诺,用户可以通过以下公式计算关于敏感数据 v 的承诺,其中 H 是一个密码学安全的单向哈希算法。

关于哈希(摘要)算法,之前文章中提到并使用多次,虽然我们没有单独对其进行阐述,但是很容易理解,并且能够查到的公开资料非常多,所以没有赘述。

简而言之,哈希算法是一个单向不可逆且对输入敏感的算法。以此为例,对于不同的输入 v,得到的哈希结果 c 也是不同,准确的说,随机输入一个 v,得到的唯一的 c 是均匀分布的,且无法预测即抗碰撞性。

基于单向哈希的单向性,难以通过哈希值 H(v)反推出敏感数据 v,提供了一定的隐匿性;基于单向哈希的抗碰撞性,难以找到不同的敏感数据 v'产生相同的哈希值 H(v),以此提供了一定的绑定性。

举例说明,我有一篇文章将其哈希后结果作为该篇文章的承诺公开,之后任何人要求验证我的承诺,OK,我把原始文章拿出来,对方做一次哈希得到结果等于之前承诺,证明承诺为真。如果我没有那篇文章或者说用别的文章代替,那么哈希结果会发生变化,这样的作弊行为就无法通过验证。这种形式可以作为版权证明的一种方式。

哈希承诺的构造简单、使用方便,满足密码学承诺基本的特性,适用于对隐私数据机密性要求不高的应用场景。

对隐私数据秘密性要求高的场合,哈希承诺提供的隐匿性比较有限,不具备随机性。对于同一个敏感数据 v,H(v)值总是固定的,因此理论上可以通过暴力穷举,列举所有可能的 v 值,来反推出 H(v)中实际承诺的 v(注:安全性高的哈希函数目前算力破解还很难)。

另外,哈希承诺不具有在密文形式对其处理的附加功能,例如,多个相关的承诺值之间密文运算和交叉验证,对于构造复杂密码学协议和安全多方计算方案的作用比较有限。

小结

本文介绍密码学承诺的含义及性质,并对哈希承诺做了说明,关于 hash 函数的内在机制实际是比较复杂的,我们以黑盒的角度来学习了解它的性质,在区块链&密码学中,哈希函数占据了基础且重要的位置。 比如区块链中常用的 sha256,keccak 等哈希算法。

下一节继续介绍安全性和实用性更强的 Pedersen 承诺。

欢迎关注公众号:blocksight

相关阅读:

区块链中的数学 - 不经意传输 不经意传输协议

区块链中的数学- BLS 基石(双线性函数)和配对 双线性映射(配对)

区块链中的数学 - BLS 门限签名 BLS m of n 门限签名

区块链中的数学 - BLS 密钥聚合 BLS 密钥聚合

区块链中的数学 - BLS 数字签名 BLS 签名及验证

区块链中的数学 - 参与者 < 门限值 t 的密钥更新 Amir Herzberg 方案 Amir Herzberg 改进方案

区块链中的数学 - Feldman 的可验证的密钥分享 Feldman 可验证密钥分享方案

区块链中的数学 - Ed25519 签名 Ed25519 签名

区块链中的数学-ElGamal 算法 ElGamal 算法签名及验证&实例演练

区块链中的数学-VRF 基于 ECC 公钥体制的证明验证过程 基于椭圆曲线的 VRF 证明验证过程

Schorr 签名与椭圆曲线 Schorr 签名与椭圆曲线

区块链中的数学-Uniwap 自动化做市商核心算法解析 Uniwap 核心算法解析(中)


声明:作为区块链技术信息平台,本站所提供的资讯信息不代表任何投资暗示,本站所发布文章仅代表个人观点,与链客社区官方立场无关。
评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

区块链中的数学 - 不经意传输

不经意传输(Oblivious transfer)或者译为茫然传输是密码学中的一类协议,缩写为OT,实现了发送方将潜在的许多信息中的一个传递给接收方,但对接收方所接收信息保持未知状态。写在前面上一篇讲......
云志 · 2021-02-04
1579阅读 · 0赞赏 · 0问答

区块链中的数学 - Pedersen承诺

作者:blocksightPedersen承诺产生方式,有些类似加密,签名之类的算法。但是,作为密码学承诺重在“承诺”,并不提供解密算法,即如果只有r,无法有效地计算出隐私数据v。写在前面上一篇介绍了......
云志 · 2021-02-04
1423阅读 · 0赞赏 · 0问答

Schnorr 多签

Schnorr 最大的特性是可以进行公钥和签名聚合(aggregate)。可以把多个签名聚合成一个签名,因此大大节省了多重签名的字节空间。这种聚合不但是同一个input,不同singer之间的签名聚合......
分析师 · 2021-01-21
1540阅读 · 0赞赏 · 0问答

证明MiMC哈希的GKR + Groth16与Groth16的正确时间比较

来源:ethresear.ch在这里遵循我们的建议 32我们介绍了针对MiMC7实施GKR + Groth16的结果。这篇文章使用两种方法比较了2 ^ 23(〜8M)个MiMC哈希的验证时间......
胖shy · 2021-01-11
1420阅读 · 0赞赏 · 0问答

区块链中的数学- BLS密钥聚合

作者:blocksight改进的密钥聚合的算法是如何防止伪签名的呢?本质上增加了公钥的可验证性写在前面上一节简要概述了 BLS 签名机制,具体实现起来有很多细节,如哈希消息到曲线上的点。本文......
YYF · 2020-12-21
1825阅读 · 0赞赏 · 0问答

云志

3424.0

LK币

3

粉丝

45

笔记

感谢"云志"

这篇精彩的笔记,目前已经帮助

  • 0
  • 1
  • 7
  • 7
  • 3
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!