1. 引言

Zcash中的hash函数主要有:

  • BLAKE2 Hash Function
  • Group Hash into Jubjub
  • Pedersen Hash Function
  • Mixing Pedersen Hash Function
  • Merkle Tree Hash Function
  • CRHivkCRH^{ivk}CRHivk Hash Function
  • DiversifyHashSaplingDiversifyHash^{Sapling}DiversifyHashSapling Hash Function

2. BLAKE2 Hash Function

BLAKE2 定义在 [ANWW2013-BLAKE2: simpler, smaller, fast as MD5] 中。BLAKE2比MD5、SHA-1、SHA-2和SHA-3的速度都快, 但是其安全性与当前最新的standard SHA-3安全性相当。
BLAKE2 主要有2个分支:

  • BLAKE2b (或直接简称为BLAKE2) :针对64-bit平台(含NEON-enabled ARM平台)进行了优化,输出的digest长度为1byte 到 64bytes。
  • BLAKE2s:针对8-bit或32-bit 平台进行了优化,输出的digest长度为1byte 到32 bytest。


Zcash使用了 BLAKE2b 和 BLAKE2s 的变种:

  • BLAKE2b−l(p,x)BLAKE2b-l(p,x)BLAKE2b−l(p,x):为unkeyed BLAKE2b−l:BY[16]×BY[N]→BY[l/8]BLAKE2b-l: \mathbb{B}^{\mathbb{Y}^{[16]}}\times \mathbb{B}^{\mathbb{Y}^{[\mathbb{N}]}}\rightarrow \mathbb{B}^{\mathbb{Y}^{[l/8]}}BLAKE2b−l:BY[16]×BY[N]→BY[l/8] in sequential mode,其中ppp为16-byte personalization string,xxx为input,输出的digest length为l/8l/8l/8 bytes。
    BLAKE2b已用于 iSigCRH,EquihahsGen,PRFexpand,PRFockSapling,KDFSaplingiSigCRH, EquihahsGen,PRF^{expand},PRF^{ockSapling}, KDF^{Sapling}iSigCRH,EquihahsGen,PRFexpand,PRFockSapling,KDFSapling 以及 RedJubjub signature scheme中的SpendAuthSigSaplingSpendAuthSig^{Sapling}SpendAuthSigSapling 和 BindingSigSaplingBindingSig^{Sapling}BindingSigSapling。
  • BLAKE2s−l(p,x)BLAKE2s-l(p,x)BLAKE2s−l(p,x):为unkeyed BLAKE2s−l:BY[8]×BY[N]→BY[l/8]BLAKE2s-l: \mathbb{B}^{\mathbb{Y}^{[8]}}\times \mathbb{B}^{\mathbb{Y}^{[\mathbb{N}]}}\rightarrow \mathbb{B}^{\mathbb{Y}^{[l/8]}}BLAKE2s−l:BY[8]×BY[N]→BY[l/8] in sequential mode,其中ppp为8-byte personalization string,xxx为input,输出的digest length为l/8l/8l/8 bytes。
    BLAKE2s已用于 PRFnfSapling,CRHivk,GroupHashJ(r)∗PRF^{nfSapling},CRH^{ivk}, GroupHash^{\mathbb{J}^{(r)*}}PRFnfSapling,CRHivk,GroupHashJ(r)∗ 。

3. Group Hash into Jubjub

  • URSURSURS:为MPC randomness beacon。
  • GroupHashJ(r)∗.Input=BY[8]×BY[N]GroupHash^{\mathbb{J}^{(r)*}}.Input=\mathbb{B}^{\mathbb{Y}^{[8]}}\times \mathbb{B}^{\mathbb{Y}^{[\mathbb{N}]}}GroupHashJ(r)∗.Input=BY[8]×BY[N],其中的BY[8]\mathbb{B}^{\mathbb{Y}^{[8]}}BY[8]是“personalization”参数,用于区分不同用途的group hash。
  • D:BY[8]D:\mathbb{B}^{\mathbb{Y}^{[8]}}D:BY[8]:为8-byte domain separator。
  • M:BY[N]M:\mathbb{B}^{\mathbb{Y}^{[\mathbb{N}]}}M:BY[N]:为 hash input。

GropHashURSJ(r)∗(D,M):J(r)∗GropHash_{URS}^{\mathbb{J}^{(r)*}}(D,M):\mathbb{J}^{(r)*}GropHashURSJ(r)∗​(D,M):J(r)∗ hash运算过程为:
1)H=BLAKE2s−256(D,URS∣∣M)H=BLAKE2s-256(D,URS||M)H=BLAKE2s−256(D,URS∣∣M)。
2)P=abstJ(LEOS2BSP256(H))P=abst_{\mathbb{J}}(LEOS2BSP_{256}(H))P=abstJ​(LEOS2BSP256​(H)),若P=⊥P=\perpP=⊥,则返回⊥\perp⊥。
3)Q=[hJ]PQ=[h_{\mathbb{J}}]PQ=[hJ​]P,若Q=OJQ=\mathcal{O}_{\mathbb{J}}Q=OJ​,则返回⊥\perp⊥,否则返回QQQ。

FindGroupHashJ(r)∗(D,M)FindGroupHash^{\mathbb{J}^{(r)*}}(D,M)FindGroupHashJ(r)∗(D,M) 通过 引入byte iii,使得返回的为有效的prime group point:

4. Pedersen Hash Function

PedersenHashPedersenHashPedersenHash 基于的安全假设为:
the hardness of the Discrete Logarithm Problem on the Jubjub curve。

PedersenHashPedersenHashPedersenHash 具有collision resistance (for fixed input length)。【注意对于variable-length inputs不具有collision-resistant。】

PedersenHashPedersenHashPedersenHash 已用于:

  • Pedersen commitment —— Windowed Pedersen commitment。
  • Pedersen hash for the Sapling incremental Merkle tree —— MerkleCRHSaplingMerkleCRH^{Sapling}MerkleCRHSapling Hash Function。

5. Mixing Pedersen Hash Function

Mixing Pedersen hash 用于 根据cmcmcm和pospospos 计算ρ\rhoρ。

6. Merkle Tree Hash Function

Merkle Tree Hash Function MerkleCRHSaplingMerkleCRH^{Sapling}MerkleCRHSapling 用于对note commitment tree进行hash,其中:

  • prefix lll 用于区分inputs所在的layer。
  • MerkleDepthSapling=32MerkleDepth^{Sapling}=32MerkleDepthSapling=32
  • lMerkleSapling=255l_{Merkle}^{Sapling}=255lMerkleSapling​=255

7. CRHivkCRH^{ivk}CRHivk Hash Function

CRHivkCRH^{ivk}CRHivk 用于派生 incoming viewing key ivkivkivk for a Sapling shielded payment address。
其中:

  • livkSapling=251l_{ivk}^{Sapling}=251livkSapling​=251

8. DiversifyHashSaplingDiversifyHash^{Sapling}DiversifyHashSapling Hash Function

DiversifyHashSaplingDiversifyHash^{Sapling}DiversifyHashSapling 用于根据diversifier ddd 派生a diversified base gdg_dgd​,基于该gdg_dgd​构建shielded payment address中的transmission key pkd=ivk⋅gdpk_d=ivk\cdot g_dpkd​=ivk⋅gd​,应满足unlinkable属性,即已知两个来自不同主题的shielded payment address,无法区分新来的shielded payment address与其中的哪个主体是一样的。

参考资料

[1] Zcash Protocol Specification
[2] BLAKE2 hash函数

Zcash中的hash函数相关推荐

  1. HashMap中的hash函数

    在写一个HashSet时候有个需求,是判断HashSet中是否已经存在对象,存在则取出,不存在则add添加.HashSet也是通过HashMap实现,只用了HashMap的key,value都存储一个 ...

  2. 全网把Map中的hash()分析的最透彻的文章,别无二家。

    你知道HashMap中hash方法的具体实现吗?你知道HashTable.ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8 ...

  3. Hash函数及其应用

    本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数 ...

  4. bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...

    原文地址:https://mp.weixin.qq.com/s/qCHkzs4JPOipB-ZzqrfbeQ 作者: Hollis 你知道HashMap中hash方法的具体实现吗? 你知道HashTa ...

  5. PHP中各种Hash算法性能比较

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. hash函数的简单介绍

    HASH函数 应用Hash函数 作者:冲处宇宙 时间:2007.1.25 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的 ...

  7. 常见的hash函数算法

    散列表,它是基于快速存取的角度设计的,也是一种典型的"空间换时间"的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Has ...

  8. 计算机hash函数开题报告,自组网位置服务中基于哈希函数的位置分配和检索方法【开题报告+文献综述+毕业论文】...

    自组网位置服务中基于哈希函数的位置分配和检索方法[开题报告+文献综述+毕业论文] (36页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.90 积分 ...

  9. Zcash中的signatures

    1. 引言 在 Zcash Protocol Specification 中,约定对signature是"validate",对zk-SNARK proof是"verif ...

最新文章

  1. 在linux系统下实现音视频即时通讯的部分代码
  2. HTML - embed 与 object 之争
  3. JAVA SE学习day_05: IO与流操作
  4. Oracle分区表详解 .
  5. Noip2012同余方程
  6. SNF开发平台WinForm之五-高级查询使用说明-SNF快速开发平台3.3-Spring.Net.Framework
  7. Redis笔记4-持久化方案
  8. C++ 作用域与生命周期
  9. 计算机软件知识pdf,[计算机软件及应用]PDF基础知识.doc
  10. rpc无法启动计算机,RPC服务器不可用,无法进入系统,怎么处理?
  11. U盘格式化了怎样恢复还原(必学技能)
  12. C++ 酒店管理系统
  13. HOJ 4585 Shaolin(map, 迭代器)
  14. 网络模块打线步骤及技巧解读
  15. excel基础操作-数据有效性和条件格式
  16. 作为数据分析师,这6款数据分析热门工具,你不能错过~
  17. 实验吧 天网管理系统
  18. Red Team之Empire渗透工具介绍和使用
  19. lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片
  20. 用selenium验证唯品会登录

热门文章

  1. 北美电话号码的合法性验证和格式化
  2. linux系统或者是在服务器上安装anoconda环境和虚拟环境配置
  3. 游戏建模基本流程(讲解建模经验)
  4. 微信小程序使用mqtt mpvue mosquito
  5. 存储器块清零c语言版,存储器块清零实验
  6. PE文件格式详解(3)
  7. PHP“垂死挣扎”的十年!
  8. spring xsd 加载问题
  9. 《融智学进阶文集》01:间接计算模型和间接形式化方法
  10. 数组元素查找中的线性查找和折半查找