sha256算法go语言 sha1算法代码( 四 )


NIST于2007年正式宣布在全球范围内征集新的下一代密码Hash算法,举行SHA-3竞赛 。新的Hash算法将被称为SHA-3,并且作为新的安全Hash标准,增强现有的FIPS 180-2标准 。算法提交已于2008年10月结束,NIST 分别于2009年和2010年举行2轮会议 , 通过2轮的筛选选出进入最终轮的算法 , 最后将在2012年公布获胜算法 。公开竞赛的整个进程仿照高级加密标准AES 的征集过程 。2012年10月2日,Keccak被选为NIST竞赛的胜利者,成为SHA-3 。
Keccak算法是SHA-3的候选人在2008年10月提交 。Keccak采用了创新的的“海绵引擎”散列消息文本 。它设计简单,方便硬件实现 。Keccak已可以抵御最小的复杂度为2n的攻击,其中N为散列的大小 。它具有广泛的安全边际 。目前为止,第三方密码分析已经显示出Keccak没有严重的弱点 。
KangarooTwelve算法是最近提出的Keccak变种,其计算轮次已经减少到了12,但与原算法比起来,其功能没有调整 。
零知识证明
在密码学中零知识证明(zero-knowledge proof, ZKP)是一种一方用于向另一方证明自己知晓某个消息x,而不透露其他任何和x有关的内容的策略,其中前者称为证明者(Prover) , 后者称为验证者(Verifier) 。设想一种场景 ,  在一个系统中 ,  所有用户都拥有各自全部文件的备份,并利用各自的私钥进行加密后在系统内公开 。假设在某个时刻,用户Alice希望提供给用户Bob她的一部分文件,这时候出现的问题是Alice如何让Bob相信她确实发送了正确的文件 。一个简单地处理办法是Alice将自己的私钥发给Bob,而这正是 Alice不希望选择的策略,因为这样 Bob可以轻易地获取到Alice的全部文件内容 。零知识证明便是可以用于解决上述问题的一种方案 。零知识证明主要基于复杂度理论,并且在密码学中有广泛的理论延伸 。在复杂度理论中,我们主要讨论哪些语言可以进行零知识证明应用,而在密码学中,我们主要讨论如何构造各种类型的零知识证明方案,并使得其足够优秀和高效 。
环签名群签名
1、群签名
在一个群签名方案中 , 一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名 。与其他数字签名一样,群签名是可以公开验证的,且可以只用单个群公钥来验证 。群签名一般流程:
(1)初始化,群管理者建立群资源,生成对应的群公钥(Group Public Key)和群私钥(Group Private Key)群公钥对整个系统中的所有用户公开,比如群成员、验证者等 。
(2)成员加入,在用户加入群的时候,群管理者颁发群证书(Group Certificate)给群成员 。
(3)签名,群成员利用获得的群证书签署文件,生成群签名 。
(4)验证,同时验证者利用群公钥仅可以验证所得群签名的正确性,但不能确定群中的正式签署者 。
(5)公开,群管理者利用群私钥可以对群用户生成的群签名进行追踪,并暴露签署者身份 。
2、环签名
2001年,Rivest, shamir和Tauman三位密码学家首次提出了环签名 。是一种简化的群签名,只有环成员没有管理者,不需要环成员间的合作 。环签名方案中签名者首先选定一个临时的签名者集合,集合中包括签名者 。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助 。签名者集合中的成员可能并不知道自己被包含在其中 。
环签名方案由以下几部分构成:
(1)密钥生成 。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi) 。
(2)签名 。签名者用自己的私钥和任意n个环成员(包括自己)的公钥为消息m生成签名a 。

推荐阅读