参考:区块链技术指南
密码学相关的安全技术在整个信息技术领域的重要地位无需多言。如果没有现代密码学和信息安全的研究成果,人类社会根本无法进入信息时代。区块链技术大量依赖了密码学和安全技术的研究成果。
哈希算法将明文映射成二进制串,哈希值常被称为指纹或摘要。
echo "I love you!" | shasum -a 256
生成的二进制串为:84d103c9dd9d52935a638b850066cd2812c937d4ee8578417de82bcfe8b67e9c...
目前常见的Hash算法包括MD5和SHA系列算法。
目前MD5和SHA-1已被破解。
数字摘要就是对数字内容进行Hash运算,得到哈希值指代原始内容。
算法的实现过程公开,秘钥保密
算法类型 | 特点 | 优势 | 缺陷 | 代表算法 |
---|---|---|---|---|
对称加密 | 加解密的密钥相同 | 计算效率高,加密强度高 | 需提前共享秘钥,易泄露 | DES、3DES、AES、IDEA |
非对称加密 | 加解密的秘钥不相关 | 无需提前共享密钥 | 计算效率低,仍存在中间人攻击的可能 | RSA、EIGamal、ECC |
从实现原理上分为分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
又称流密码。
通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。
公钥公开,私钥保密。
处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加解密算法慢2~3 个数量级;同时加密强度也往往不如对称加密。
目前 RSA 类算法被认为可能在不远的将来被破解,一般推荐可采用安全强度更高的椭圆曲线系列算法。
消息认证码,全称是Hash-based Message AuthenticationCode(HMAC),即“基于Hash的消息认证码”,基于对称加密。
数字签名:对文件的摘要用自己的私钥加密,然后将文件和加密后的摘要一起发给对方。对方用公钥解密摘要,并计算文件的摘要,二者应相同。保证文件完整性且不可抵赖。
知名的数字签名算法包括DSA(Digital Signature Algorithm)和安全强度更高的 ECSDA(Elliptic Curve Digital Signature Algorithm)等。
除普通的数字签名应用场景外,针对一些特定的安全需求,产生了一些特殊数字签名技术,
包括盲签名、多重签名、群签名、环签名等。
一般情况下,证书需要由证书认证机构(Certification Authority,CA)来进行签发和背书。权
威的证书认证机构包括 DigiCert、GlobalSign、VeriSign 等。用户也可以自行搭建本地 CA 系
统,在私有网络中进行使用。
包含信息域:
证书颁发者用自己的私钥对证书签名。
X.509 规范中一般推荐使用PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。证书文件的文件名后缀一般为.crt或.cer,对应私钥文件的文件名后缀一般为.key,证
书请求文件的文件名后缀为.csr。有时候也统一用.pem作为文件名后缀。DER(Distinguished Encoding Rules)格式,是采用二进制对证书进行保存,可以与PEM格式互相转换。
可以用openssl查看证书内容。
openssl x509 -in ca.example.com-cert.pem -noout -text
那么我们怎么确定证书颁发者的公钥没有被篡改呢?
可以用上一级颁发的数字证书,形成了证书信任链,那么会出现无限递归问题…
解决方法:主流操作系统和浏览器里面,往往会提前预置一些权威CA的证书(通过自身的私钥签名,系统承认这些是合法的证书)
如何安全地管理和分发证书可以遵循 PKI(Public Key Infrastructure)体系来完成
- CA(Certification Authority):负责证书的颁发和吊销(Revoke),接收来自RA的请求,是最核心的部分;
- RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA;
- 证书数据库:存放证书,多采用X.500系列标准格式。可以配合LDAP目录服务管理用户信息。
用户可以使用openssl生成证书生成文件和对应的私钥。
openssl req -new -keyout private.key -out for_request.csr
查看.csr文件:
openssl req -in for_request.csr -noout -text
CA维护一个证书撤销列表(Certificate Revocation List,CRL)
一个树状结构,父亲节点的内容是所有孩子节点内容的哈希值。
感兴趣的可以去看原文
布隆过滤器是一种基于Hash的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。
知道哈希的同学很容易就理解这个了。
大概就是有多个哈希函数,每个哈希函数计算出一个地址,将位串的这些地址置位1。
查找的时候进行同样的计算,如果对应的位置全为1,说明很大概率存在。
布隆过滤器也存在冲突,不过只会误报(就是本来不存在的数据判断为存在),不存在漏报。
零知识证明(Zero Knowledge Proof),是这样的一个过程,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。
可以参考《计算机网络》P598—P602内容