密码学与安全技术
Hash算法与数字摘要
Hash算法
hash算法:将任意长度的二进制明文串映射为较短的(固定长度)二进制串(hash值)。
常见hash算法包括MD5和SHA系列算法。
MD4,输出为128位,已被证明不够安全。
MD5。输出为128位,已被证明不具备“强抗碰撞性”。
SHA-1,输出为160位,已被证明不具备“强抗碰撞性”。
目前MD5和SHA-1已被破解,一般推荐至少使用SHA-2-256或更安全的算法。
注:弱抗碰撞是指在给定字符串和散列值的前提下找到另一个有相同散列值的字符串,难度极高。
强抗碰撞性实质找到散列值相同的两个字符串,散列值是什么没有限制,难度很低,sha1只需263次即可尝试出来。
数字摘要
数字摘要:对数字内容进行hash运算,获取唯一的摘要值来指代原始完整的数字内容。
加解密算法
加解密算法类型
算法类型 | 特点 | 优势 | 缺陷 | 代表算法 |
---|---|---|---|---|
对称加密 | 加解密的密钥相同 | 计算效率高,加密强度高 | 需提前共享密钥,易泄露 | DES、3DES、AES、IDEA |
非对称加密 | 加解密的密钥不相关 | 无需提前共享密钥 | 计算效率低,仍存在中间人攻击的可能 | RSA、EIGamal、椭圆曲线系列算法 |
- 对称加密
DES:密钥长度64位,易被暴力破解。
3DES:处理过程和加密强度优于DES,但仍不够安全。
AES:处理速度快,整个过程可用数学描述,目前尚未有效的破解手段。
IDES:密钥长度128位,加密强度高。
- 非对称加密
RSA:算法利用了对大数进行质因子分解困难的特性。
Difie-Hellman密钥交换:基于离散对数无法快速求解,可在不安全通道上,双方协商一个公共密钥。
EIGamal:利用了模运算下求离散对数困难的特性。
椭圆曲线算法(ECC):基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。
SM2:国密算法,基于椭圆曲线算法,加密强度优于RSA系列算法。
消息认证码与数字签名
消息认证码全称是“基于Hash的消息认证码”,基于对称加密,用于保护消息完整性。
数字签名基于非对称加密,既可以用于认证某数字内容额完整性,又同时可以确认来源。
数字签名算法:DSA、ECSDA
特殊签名技术:盲签名、多重签名、群签名、环签名
- 盲签名
签名者需要在无法看到原始内容的前提下对信息进行签名。
优点:
实现对所签名内容的保护,防止签名者看到原始内容;实现防止追踪,签名者无法将签名内容和签名结果进行对应。
典型算法:RSA盲签名算法。
-
多重签名
多重签名即n个签名者中,收集到至少m个(n>=m>=1)的签名,即认为合法。其中,n是提供的公钥个数,m是需要匹配公钥的最少的签名个数。
适用于多人投票共同决策的场景。 -
群签名
群签名即某个群组内一个成员可以代表群组进行匿名签名。签名可以验证来自该群组,却无法准确追踪到签名的是哪个成员。但是群签名需要一个群管理员添加群成员,因此群管理员可能追踪到签名的具体成员。 -
环签名
环签名是一种简化的群签名。
首先选定一个临时的签名者集合,集合中包含签名者自身。然后签名者利用自身的私钥和签名集合中其他人的公钥就可以独立地产生签名,而无需他人帮助。签名者集合中的其他成员可能并不知道自己被包含在最终的签名中。
一般来说,一个数字证书内容可能包含基本数据结构(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名等。
merkle树又叫哈希树,是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。
特点:
最下面的叶节点包含存储数据或其哈希值。
非叶子节点(包含中间节点和根节点)都是它的两个孩子节点内容的哈希值。
应用场景:
- 快速比较大量数据
- 快速定位修改
- 零知识证明
布隆过滤器(bloom filter),一种基于hash的高效查找结构,能够快速(常数时间内)回答”某个元素是否在一个集合内“的问题。常用于信息检索、垃圾邮件规则、注册管理等。
同态加密
同态加密是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果。即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。从抽象代数的角度来讲,保持了同态性。
同态加密可以保证实现处理者无法访问到数据自身的信息。
如果定义一个运算符∆,对加密算法E和解密算法D,满足:
E(X∆Y) = E(X)∆E(Y)
则意味着对于该运算满足同态性。
同态性来自代数领域,一般包括四种类型:加法同态、乘法同态、减法同态和除法同态。同时满足加法同态和乘法同态,则意味着是代数同态,成为全同态。同时满足四种,称为算法同态。
仅满足加法同态的算法包括Paillier和Benalh算法;仅满足乘法同态的算法包括RSA和EIGamal算法。
同态加密提高隐私安全性。
同态加密保护的是数据本身,函数加密保护的是处理函数本身,即让第三方看不到处理过程的前提下,对数据进行处理。
零知识证明,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。一般认为至少满足三个条件:
- 完整性:真实的证明可以让验证者成功验证;
- 可靠性:虚假的证明无法让验证者保证通过验证,但允许存在小概率例外;
- 零知识:如果得到证明,无法从证明过程中获知处理所证明信息之外的任何信息。