加密技术解析(现代加密技术简介)


加密技术解析(现代加密技术简介)(1)


对称加密算法 :

顾名思义,加密和解密过程的密钥是相同的。 该类算法优点是加解密效率(速度快,空间占用小)和加密强度都很高。 缺点是参与方需要提前持有密钥,一旦有人泄露则系统安全性被破坏; 另外如何在不安全通 道中提前分发密钥也是个问题,需要借助额外的 Diffie–Hellman 协商协议或非对称加密算法 来实现。 对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域(如数字媒介的加密)。 对称加密算法适用于大量数据的加解密过程;不能用于签名场景;并且需要提前安 全地分发密钥。


非对称加密算法 :

非对称加密是现代密码学的伟大发明,它有效解决了对称加密需要安全分发密钥的问题。 顾名思义,非对称加密中,加密密钥和解密密钥是不同的,分别被称为公钥(Public Key)和 私钥(Private Key)。私钥一般通过随机数算法生成,公钥可以根据私钥生成。 其中,公钥一般是公开的,他人可获取的;私钥则是个人持有并且要严密保护,不能被他人 获取。 非对称加密算法优点是公私钥分开,无需安全通道来分发密钥。缺点是处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加解密算法慢 2~3 个数量级; 同时加密强度也往往不如对称加密。 非对称加密算法的安全性往往基于数学问题,包括大数质因子分解、离散对数、椭圆曲线等 经典数学难题。 非对称加密中公钥是公开的,因此任何人都可以利用它加密给定明文,获取对应的密文,这就带来选择明文攻击的风险。 为了规避这种风险,现代的非对称加密算法(如 RSA、ECC)都引入了一定的保护机制:对 同样的明文使用同样密钥进行多次加密,得到的结果完全不同,这就避免了选择明文攻击的 破坏。 在实现上可以有多种思路。一种是对明文先进行变形,添加随机的字符串或标记,再对添加 后结果进行处理。另外一种是先用随机生成的临时密钥对明文进行对称加密,然后再将对称 密钥进行加密,即利用多层加密机制。

混合加密机制 :

混合加密机制同时结合了对称加密和非对称加密的优点。 该机制的主要过程为: 先用非对称加密(计算复杂度较高)协商出一个临时的对称加密密钥 (或称会话密钥),然后双方再通过对称加密算法(计算复杂度较低)对所传递的大量数据进行快速的加密处理。 典型的应用案例是网站中使用越来越普遍的通信协议 -- 安全超文本传输协议(Hyper Text Transfer Protocol Secure,HTTPS)。 与以明文方式传输数据的 HTTP 协议不同,HTTPS 在传统的 HTTP 层和 TCP 层之间引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现安全传输。 采用 HTTPS 建立安全连接(TLS 握手协商过程)的基本步骤如下:

  • 客户端浏览器发送握手信息到服务器,包括随机数R1、支持的加密算法套件(Cipher Suite)类型、协议版本、压缩算法等。注意该过程传输为明文。
  • 服务端返回信息,包括随机数R2、选定加密算法套件、协议版本,以及服务器证书。注意该过程为明文。
  • 浏览器检查带有该网站公钥的证书。该证书需要由第三方CA来签发,浏览器和操作系统会预置权威CA的根证书。如果证书被篡改作假(中间人攻击),很容易通过CA的证书验证出来。
  • 如果证书没问题,则客户端用服务端证书中公钥加密随机数 R3(又叫 Pre-MasterSecret),发送给服务器。此时,只有客户端和服务器都拥有 R1、R2 和 R3 信息,基于随机数R1、R2 和 R3,双方通过伪随机数函数来生成共同的对称会话密钥 MasterSecret。
  • 后续客户端和服务端的通信都通过协商后的对称加密(如AES)进行保护。

为了保障前向安全性(Perfect Forward Secrecy),TLS对每个会话连接都可以生成不同的密钥,避免某个会话密钥泄露后对其它会话连接产生安全威胁。需要注意,选用合适的加密算法套件对于TLS的安全性十分重要。要合理选择安全强度高的算法组合,如 ECDHE-RSA 和 ECDHE- ECDSA 等,而不要使用安全性较差的 DES/3DES 等。


加密算法套件包括一组算法,包括交换、认证、加密、校验等:

  • 密钥交换算法: 负责协商对称密钥,常见类型包括RSA、DH、ECDH、ECDHE等;
  • 证书签名算法: 负责验证身份,常见类型包括SA、DSA、ECDSA等;
  • 加密数据算法: 对建立连接的通信内容进行对称加密,常见类型包括AES等;
  • 消息认证信息码(MAC)算法: 创建报文摘要,验证消息的完整性,常见类型包括SHA等。


Diffie–Hellman 密钥交换协议

  • A 和 B 两个人协商密钥,先公开商定 p,g;
  • A 自行选取私密的整数 x,计算 X=g^x mod p,发送 X 给 B;
  • B 自行选取私密的整数 y,计算 Y=g^y mod p,发送 Y 给 A;
  • A 根据 x 和 Y,求解共同密钥 Z_A=Y^x mod p;
  • B 根据 X 和 y,求解共同密钥 Z_B=X^y mod p。

Z = Z_A = A_B,因为在 mod p 的前提下,Y^x =(g^y)^x =g^(xy) = (g^x)^y=X^y。而信道监听者在已知 p,g,X,Y 的前提下,无法求得 Z。


消息认证码(Hash-based Message Authentication Code,HMAC)

利用对称加密算法的认证机制,典型的 HMAC生成算法包括 K,H,M三个参数。K 为提前共享的对称密钥,H为提前商定的 Hash 算法(如 SHA-256),M为要传输的消息内容。三个参数缺失了任何一个,都无法得到正确的 HMAC 值。


数字签名(Digital Signature)

  • A先对要发送内容正文执行哈希运算得到消息摘要;
  • 然后A用自己的私钥对消息摘要加密,生成数字签名;
  • 对要发送的内容正文使用B的公钥进行加密,并把数字签名加在要发送的内容正文后面,一起发送给B;
  • B收到后用A的公钥对数字签名解密,成功则代表收到的内容确实来自A;
  • B对收到的内容正文通过自己的私钥解密后,执行哈希运算得到摘要;
  • B会对比数字签名的Hash值和自己运算得到的Hash值,一致则说明内容未被篡改。


消息摘要(Message Digest):

消息摘要可以通过Hash算法将消息映射到一个固定长度的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文。常用的消息摘要算法有MD5、SHA1、SHA256、SHA512等。


数字证书

数字证书可以分为加密数字证书(Encryption Certificate)和签名验 证数字证书(Signature Certificate)。前者往往用于保护用于加密用途的公钥; 后者则保护用于签名用途的公钥。两种类型的公钥也可以同时放在同一证书中。 一般情况下,证书需要由证书认证机构(Certification Authority,CA)来进行签发和背书。权 威的商业证书认证机构包括 DigiCert、GlobalSign、VeriSign 等。用户也可以自行搭建本地 CA 系统,在私有网络中进行使用。


PKI(Public Key Infrastructure)体系

解决证书生命周期相关的认证和管理问题。 一般情况下,PKI 至少包括如下核心组件:

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


证书的签发

CA 对用户签发证书实际上是对某个用户公钥,使用 CA 的私钥对其进行签名。 用户证书的签发可以有两种方式。可以由用户自己生成公钥和私钥,然后 CA 来对公钥内容进 行签名(只有用户持有私钥);也可以由 CA 直接来生成证书(内含公钥)和对应的私钥发给 用户(用户和 CA 均持有私钥)。 前者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即 csr 文件),该文件中包括了用户对应的公钥和一些基本信息,CA 只需要对证书请求文件进行签名。例如用openssl 来生成csr文件和对应的私钥文件:openssl req -new -keyout private.key -out for_request.csr , 查看csr文件内容:$ openssl req -in for_request.csr -noout -text


默克尔树(又叫哈希树)

是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成,最下面的叶节点包含存储数据或其哈希值,非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。它具有:证明某个集合中存在或不存在某个元素 ,快速比较大量数据 ,快速定位修改 ,零知识证明等特点。


布隆过滤器(Bloom Filter)

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


同态加密

具有同态性质的加密函数是指两个明文a、b满足Dec(En(a)⊙En(b))=a⊕b的加密函数,其中En是加密运算,Dec是解密运算,⊙、⊕分别对应明文和密文域上的运算。当⊕代表加法时,称该加密为加同态加密:当⊕代表乘法时,称该加密为乘同态加密。全同态加密是指同时满足加同态和乘同态性质,可以进行任意多次加和乘运算的加密函数。用数学公式来表达,即Dec(f(En(m1),En(m2),…,En(mk)))=f(m1,m2,…,mk),或写成:f(En(m1),En(m2),…,En(mk))=En(f(m1,m2,…,mk)),如果f是任意函数,称为全同态加密。


函数加密

同态加密保护的是数据本身,而函数加密顾名思义保护的是处理函数本身,即让第三方看不 到处理过程的前提下,对数据进行处理。 该问题已被证明不存在对多个通用函数的任意多密钥的方案,目前仅能做到对某个特定函数 的一个密钥的方案。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页