Zcash中的hash函数
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函数相关推荐
- HashMap中的hash函数
在写一个HashSet时候有个需求,是判断HashSet中是否已经存在对象,存在则取出,不存在则add添加.HashSet也是通过HashMap实现,只用了HashMap的key,value都存储一个 ...
- 全网把Map中的hash()分析的最透彻的文章,别无二家。
你知道HashMap中hash方法的具体实现吗?你知道HashTable.ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8 ...
- Hash函数及其应用
本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数 ...
- bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...
原文地址:https://mp.weixin.qq.com/s/qCHkzs4JPOipB-ZzqrfbeQ 作者: Hollis 你知道HashMap中hash方法的具体实现吗? 你知道HashTa ...
- PHP中各种Hash算法性能比较
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- hash函数的简单介绍
HASH函数 应用Hash函数 作者:冲处宇宙 时间:2007.1.25 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的 ...
- 常见的hash函数算法
散列表,它是基于快速存取的角度设计的,也是一种典型的"空间换时间"的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Has ...
- 计算机hash函数开题报告,自组网位置服务中基于哈希函数的位置分配和检索方法【开题报告+文献综述+毕业论文】...
自组网位置服务中基于哈希函数的位置分配和检索方法[开题报告+文献综述+毕业论文] (36页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.90 积分 ...
- Zcash中的signatures
1. 引言 在 Zcash Protocol Specification 中,约定对signature是"validate",对zk-SNARK proof是"verif ...
最新文章
- 在linux系统下实现音视频即时通讯的部分代码
- HTML - embed 与 object 之争
- JAVA SE学习day_05: IO与流操作
- Oracle分区表详解 .
- Noip2012同余方程
- SNF开发平台WinForm之五-高级查询使用说明-SNF快速开发平台3.3-Spring.Net.Framework
- Redis笔记4-持久化方案
- C++ 作用域与生命周期
- 计算机软件知识pdf,[计算机软件及应用]PDF基础知识.doc
- rpc无法启动计算机,RPC服务器不可用,无法进入系统,怎么处理?
- U盘格式化了怎样恢复还原(必学技能)
- C++ 酒店管理系统
- HOJ 4585 Shaolin(map, 迭代器)
- 网络模块打线步骤及技巧解读
- excel基础操作-数据有效性和条件格式
- 作为数据分析师,这6款数据分析热门工具,你不能错过~
- 实验吧 天网管理系统
- Red Team之Empire渗透工具介绍和使用
- lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片
- 用selenium验证唯品会登录