密码学与安全技术

参考:区块链技术指南

  • Hash算法与数字摘要
  • 加解密算法
    • 对称加密
      • 分组密码
      • 序列密码
    • 非对称加密
  • 消息认证码与数字签名
  • 数字证书
    • X.509证书规范
  • PKI体系
    • PKI基本组件
    • 签发证书的两种方式
    • 证书的销毁
  • Merkl树
  • 布隆过滤器
  • 同态加密
  • 零知识证明
  • 量子密码学

密码学相关的安全技术在整个信息技术领域的重要地位无需多言。如果没有现代密码学和信息安全的研究成果,人类社会根本无法进入信息时代。区块链技术大量依赖了密码学和安全技术的研究成果。

Hash算法与数字摘要

哈希算法将明文映射成二进制串,哈希值常被称为指纹或摘要。

echo "I love you!" | shasum -a 256

生成的二进制串为:84d103c9dd9d52935a638b850066cd2812c937d4ee8578417de82bcfe8b67e9c...

目前常见的Hash算法包括MD5和SHA系列算法。

  • MD4:128位,已被证明不够安全。
  • MD5:128位,计算更复杂一些,也更安全一些.
  • SHA:是一个Hash函数族:SHA-1、SHA-224、SHA-256、SHA-384、
  • SHA-512、SHA-3

目前MD5和SHA-1已被破解。

数字摘要就是对数字内容进行Hash运算,得到哈希值指代原始内容。

加解密算法

算法的实现过程公开,秘钥保密

算法类型 特点 优势 缺陷 代表算法
对称加密 加解密的密钥相同 计算效率高,加密强度高 需提前共享秘钥,易泄露 DES、3DES、AES、IDEA
非对称加密 加解密的秘钥不相关 无需提前共享密钥 计算效率低,仍存在中间人攻击的可能 RSA、EIGamal、ECC

对称加密

从实现原理上分为分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。

分组密码

  • DES(Data Encryption Standard):将64位明文加密为64位的密文,现在已经很容易被暴力破解。
  • 3DES:3重DES,现在也认为不够安全。
  • AES(Advanced Encryption Standard):分组长度有128、192、256三种,处理速度快,目前没有有效破解手段。
  • IDEA(International Data Encryption Algorithm):类似3DES,密钥长度128位。

序列密码

又称流密码。

通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。

非对称加密

公钥公开,私钥保密。

处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加解密算法慢2~3 个数量级;同时加密强度也往往不如对称加密。

  • RSA:基于大整数分解的困难性。
  • Diffile-Hellman密钥交换:基于求解离散对数难题。
  • EIGamal:基于模运算下求离散对数的困难性。
  • ECC:基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。
  • SM2:基于椭圆曲线算法,加密强度优于RSA系列算法。

目前 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证书规范

包含信息域:

  • 版本号(Version Number)
  • 序列号(Serial Number)
  • 签名算法(Signature Algorithm)
  • 颁发者(Issuer)
  • 有效期(Validity)
  • 主体(Subject)
  • 主体的公钥信息(Subject Public Key Info)
  • 颁发者唯一号(Issuer Unique Identifier,可选)
  • 主体唯一号(Subject Unique Identifier,可选)
  • 扩展(Extensions,可选)

证书颁发者用自己的私钥对证书签名。

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体系

如何安全地管理和分发证书可以遵循 PKI(Public Key Infrastructure)体系来完成

PKI基本组件

  • CA(Certification Authority):负责证书的颁发和吊销(Revoke),接收来自RA的请求,是最核心的部分;
  • RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA;
  • 证书数据库:存放证书,多采用X.500系列标准格式。可以配合LDAP目录服务管理用户信息。

签发证书的两种方式

  • CA生成证书(含公钥)和私钥
  • 用户自己生成私钥和证书申请文件(含公钥和个人信息),CA为申请文件签名。

用户可以使用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)

Merkl树

一个树状结构,父亲节点的内容是所有孩子节点内容的哈希值。

  • 快速比较大量数据
  • 快速定位修改
  • 零知识证明

感兴趣的可以去看原文

布隆过滤器

布隆过滤器是一种基于Hash的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。

知道哈希的同学很容易就理解这个了。

大概就是有多个哈希函数,每个哈希函数计算出一个地址,将位串的这些地址置位1。

查找的时候进行同样的计算,如果对应的位置全为1,说明很大概率存在。

布隆过滤器也存在冲突,不过只会误报(就是本来不存在的数据判断为存在),不存在漏报。

同态加密

  • 函数加密

零知识证明

零知识证明(Zero Knowledge Proof),是这样的一个过程,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。

量子密码学

可以参考《计算机网络》P598—P602内容

你可能感兴趣的:(区块链)