密码学工具汇总
“工欲善其事,必先利其器.” 就像在程序设计中存在如数组,链表,二叉树等基本数据结构,在密码学协议当中也存在各种基本的原语(cryptographic primitives),就像一个个基础的构建来建成一座高楼大厦一样. 这些源于组成了密码学的工具箱,在设计密码学协议时可以直接使用或参考他们的思想.
- 加密(Encryption)其中包括对称加密(symmetric encryption)和非对称加密(asymmetric encryption). 两者区别就是前者解密和加密都是使用同一个密钥;而后者加密使用公钥(public key),解密需要使用私钥(private key). 前者加密解密速度可以比后者高出几个数量级,但是需要对密钥进行严格保密,不能直接适用于需要进行通信的场景中,实际中经常使用的方案是块加密(block cipher),其密钥是一个固定的大小,视情况而言可能需要对明文进行padding;而后者虽然速度较慢,但是由于分开进行密钥管理,能够很好的应用于交互式场景,例如Alice发布自己的公钥,Bob就可以使用其对自己要发送的信息进行加密,然后Alice使用自己的私钥进行解密从而实现Alice和Bob的秘密通信. 当然在实际中还会涉及到一个安全密钥交换的过程,具体方案可以参考Diffie-Hellman密钥交换协议.
- 秘密分享(Secret share),给定一个秘密s,秘密分享能够把s分布在n个用户当中,其中每个用户都不知道s. 只有当达到法定人数k时,这些用户才能够恢复相应的秘密s. 因此,秘密分享方案一般也被称为(k,n)-秘密分享,其中k代表恢复阈值,而n代表总的分享份数。其中一个经典的论文可以参照这里,一个实现可以参考这里.
- 函数加密(Functional Encryption). 函数加密一种公钥加密方法(public key encryption),它允许一个中央(authority)生成并且分发与函数相关联的函数性密钥(functional keys),利用这些函数性密钥,用户可以在给定密文的情况下获取的值。并且函数加密能够满足以下要求:在使用函数性密钥和密文进行求值的过程不会泄漏除的任何信息.
- 隐蔽传输(Oblivious transfer)是一种双方的传输协议。它包括一个传输者(sender)和一个接收者(receiver),其中传输者有两条信息,接收者有一个比特. 在隐蔽传输协议结束时,接收者能够收到信息并且不知道有关信息的任何信息;同时,传输者也不知道比特的任何信息.
- 属性加密(Attribute-based Encryption). 属性加密是一种公钥加密方法,它的基本要求是要求满足一定条件或者具有某些属性的用户才能够对密文进行解密. 按照加密和解密方式的不同,可以将属性加密分为两种:密钥属性加密(key-policy attribute-based encryption, KP-ABE)和密文属性加密(ciphertext-policy attribute-based encryption, CP-ABE).
- 密钥属性加密:在KP-ABE中,密文具有一定的属性,只有拥有相应访问结构的密钥才能够对其解密. 它可以用来构造广播加密(broadcast encryption). 于此同时,文中还要求具有访问权限可以衍生出一个新密钥,只要的访问权限是的一个子集.
- 密文属性加密:它要求加密者在加密时指定一个访问权限,这通常是一个布尔表达式,只有具有某种属性让其求值为真的密钥才能够用来对密文进行解密. 与此同时,密文拥有者只知道求解权限,它并不知道解密者到底满足哪一个具体权限. CP-ABE通常通过访问树来进行加密,叶子节点表示解密条件,非叶节点表示其所需要满足的属性. 相比于KP-ABE,CP-ABE能够让加密者控制谁具有加密权限,而不是该任务移交给密钥分发者.
- 零知识证明(Zero-Knowledge Proof)
- 保序加密(Order Preserving Encryption)
- 数字签名(Digital Signature)
- 群签名(Group Signature)
- 盲签名(Blind Signature)
- 阈值签名(Threshold Signature)
评论
发表评论