密码学基础(二)对称密码体制和非对称密码体制

对称密码体制与非对称密码体制

  • 对称密码体制
    • 对称加密算法
    • 对称加密算法的优点
    • 对称加密算法的缺点
    • 常用对称加密算法
      • DES算法
      • 3DES算法
      • AES算法
      • 国际数据加密算法(IDEA)
      • Blowfish算法
      • RC5加密算法
      • 5.8.RC6
  • 非对称加密体制
    • 非对称加密算法
    • 非对称加密算法的优点
    • 非对称加密算法的缺点
    • 常用的非对称加密算法
      • RSA算法
      • DSA算法
      • ECC算法
      • DH算法
      • SM1、SM2、SM4算法
    • 非对称加密算法应用场景
    • 非对称加密算法和对称加密算法区别
      • 散列算法比较
      • 对称加密算法比较
      • 非对称加密算法比较
  • 常见的签名加密算法
    • 数字签名
    • MD5算法
    • SHA1算法
    • HMAC算法

对称密码体制

对称加密算法

  • 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
  • 需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
  • 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
  • 因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

密码学基础(二)对称密码体制和非对称密码体制_第1张图片
对称加密工作流程图
密码学基础(二)对称密码体制和非对称密码体制_第2张图片

对称加密算法的优点

  • 速度快,处理量大,适用于对应用数据的直接加密。
  • 加密密钥长度相对较短
  • 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

对称加密算法的缺点

  • 对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

常用对称加密算法

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

DES算法

  1. DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
  2. DES 加密算法是一种分组密码,以 64 位为分组对数据加密,它的密钥长度是56 位,加密解密用同一算法。
  3. DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是搜索密钥的编码。对于 56 位长度的密钥来说,如果用穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。

DES算法中的密钥key为8个字节64位,其中每8位为校验位不参与运算,所以有效密钥只有56位。
DES采用16轮运算,没轮运算产生一个轮密钥参与到运算中。
密钥与明文运算时采用的是按位异或的方法。

3DES算法

  1. DES密钥 太短,被破解的概率非常大,3DES算法替代了DES算法。
  2. 3DES即三重数据加密算法,是基于 DES 的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。
  3. 3DES的密钥大小为112和168位,相较于DES增加了密钥长度。

3DES采用了48轮运算,它对于差分密码分析有很强的抵御能力。
3DES完成加密和解密的时间要比DES长3倍。
3DES可以在不同模式下运行:

  1. DES-EEE3:使用三个不同的密钥进行加密,数据被加密、加密、再加密;
  2. DES-EDE3:使用3个不同的密钥进行加密,数据被加密、解密、再加密;
  3. DES-EEE2:与DES-EEE3相同,只使用两个密钥,第一个第三个加密过程使用相同的密钥;
  4. DES- EDE2:与DES-EDE3相同,只使用两个密钥,第一个和第三个加密过程使用相同的密钥。
    当数据使用一个对称密钥加密,使用不同的对称密钥解密时,它会变的更加混乱无序。EDE模式第二部其实并没有解密,而是使用了一个不同的密钥进行了一次加密。

AES算法

  1. AES:密码学中的高级加密标准,又称Rijndael加密法,是美国联邦政府采用的一种区块加密技术。
  2. AES密码与分组密码Rijndael基本上完全一致。
  3. Rijndael分组大小和密钥可以是128、192、256位。AES标准只要求分组大小为128位。(只有分组长度128位的Rijndael才成为AES算法。)
  4. AES 本身就是为了取代 DES的,AES具有更好的安全性、效率和灵活性。
  5. AES总共有3种不同类型的层,除了第一轮外,其它每轮都是由三层组成。
密钥长度 轮数
128位 10轮
192位 12轮
256位 14轮

国际数据加密算法(IDEA)

  • 国际数据加密算法是一种分组密码,它处理64位数据分组。64位大小的数据分组划分为16个更小的分组,每个小分组都执行8轮数学函数运算。
  • IDEA的密钥长度128位。
  • IDEA算法提供了与DES类似的模式,但由于密钥更长它比DES更难破解。
  • 软件实现中IDEA比DES更快。

Blowfish算法

  • Blowfish算法是一种分组密码,它处理64位数据分组。
  • Blowfish的密钥长度32~448位。
  • Blowfish数据分组要经过16轮加密函数运算得到密文。
  • Blowfish的设计目的是替代过时的DES。

RC5加密算法

  • RC5算法是一种分组密码,其参数(分组大小、密钥长度、运行轮数)都是可变的。
  • RC5算法分组大小通常为32、64、128位,密钥长度可达2048位,加密和解密的轮数最高可达255轮。

5.8.RC6

  • RC6是在RC5基础上构建的分组密码,它的所有属性与RC5相同。
  • rc5-w/r/b或者RC5-32/12/16:w=字长,单位(位),长度位16、32、64位;r=轮数,r值介于0~255之间;b=位数(字节数)

非对称加密体制

非对称加密算法

  • 非对称加密算法是一种密钥的保密方法。
  • 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。如果用私钥对数据进行加密,只有对应的公钥才能进行解密。
  • 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 也叫公开密钥加密算法。
  • 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
  • 另一方面,甲方可以使用自己的私钥对机密信息进行签名后再发送给乙方;乙方再用甲方的公钥对甲方发送回来的数据进行验签。(这就是数字签名的过程,用来验证用户的不可否认性。)
  • 甲方只能用其私钥解密由其公钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。

密码学基础(二)对称密码体制和非对称密码体制_第3张图片

非对称加密算法的优点

  • 非对称加密体系不要求通信双方事先传递密钥或有任何约定就能完成保密通信,并且密钥管理方便,可实现防止假冒和抵赖,因此,更适合网络通信中的保密通信要求。

非对称加密算法的缺点

  • 非对称加密的加解密速度比对称加密低100~1000倍。

常用的非对称加密算法

  • RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
  • 使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。

RSA算法

简介:
RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
运算速度:
由于进行的都是大数计算,使得 RSA 最快的情况也比 DES 慢上好几倍,无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。RSA 的速度是对应同样安全级别的对称密码算法的1/1000左右。
比起 DES 和其它对称算法来说,RSA 要慢得多。实际上一般使用一种对称算法来加密信息,然后用 RSA 来加密比较短的公钥,然后将用 RSA 加密的公钥和用对称算法加密的消息发送给接收方。
这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,否则的话可以越过 RSA 来直接攻击对称密码。
攻击面:

  1. 针对 RSA 最流行的攻击一般是基于大数因数分解。1999年,RSA-155 (512 bits) 被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央内存的 Cray C916计算机上完成。
  2. 量子计算里的秀尔算法能使穷举的效率大大的提高。由于 RSA 算法是基于大数分解 (无法抵抗穷举攻击),因此在未来量子计算能对 RSA 算法构成较大的威胁。一个拥有 N 量子位的量子计算机,每次可进行2^N 次运算,理论上讲,密钥为1024位长的 RSA 算法,用一台512量子比特位的量子计算机在1秒内即可破解。

DSA算法

简介:
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。
简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。
数字签名原理:
密码学基础(二)对称密码体制和非对称密码体制_第4张图片

ECC算法

简介:
椭圆加密算法(ECC)是一种公钥加密算法,最初由 Koblitz 和 Miller 两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成 Abel 加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。
主要优势:
安全性高:在某些情况下它比其他的方法使用更小的密钥 (比如 RSA),提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于 Weil 对或是 Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。
ECC 被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。
处理速度快,在私钥的加密解密速度上,ECC 算法比 RSA、DSA 速度更快,存储空间占用小,带宽要求低。

一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。

DH算法

DH,全称为"Diffie-Hellman",它是一种确保共享 KEY 安全穿越不安全网络的方法,也就是常说的密钥一致协议。由公开密钥密码体制的奠基人 Diffie 和 Hellman 所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。也就是由甲方产出一对密钥 (公钥、私钥),乙方依照甲方公钥产生乙方密钥对 (公钥、私钥)。
以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥 (SecretKey) 对数据加密。这样,在互通了本地密钥 (SecretKey) 算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯。

比特币钱包公钥的生成使用了椭圆曲线算法,通过椭圆曲线乘法可以从私钥计算得到公钥, 这是不可逆转的过程。

SM1、SM2、SM4算法

  • SM1、SM4是国内主流的国密算法。
  • SM1的算法并未被公开,仅知道其密钥长度为128位,加密强度与AES相当,调用该算法时,需要通过加密芯片的接口进行调用。
  • SM1加密与硬件相关,密钥随机数从硬件计算得来。常用来做小额支付、门禁等随身小件的加密。
  • SM2算法结构基于椭圆曲线算法,在国内用于替代RSA和ECC加密算法。
  • SM2算法常用于国内金融体系中的签名和验证。
  • SM4算法的算法结构是基本轮结构加迭代、含非线性迭代
  • SM4分组长度和密钥长度都为128位,计算轮数位32轮。

非对称加密算法应用场景

  1. 信息加密 收信者是唯一能够解开加密信息的人,因此收信者手里的必须是私钥。发信者手里的是公钥,其它人知道公钥没有关系,因为其它人发来的信息对收信者没有意义。
  2. 登录认证 客户端需要将认证标识传送给服务器,此认证标识 (可能是一个随机数) 其它客户端可以知道,因此需要用私钥加密,客户端保存的是私钥。服务器端保存的是公钥,其它服务器知道公钥没有关系,因为客户端不需要登录其它服务器。
  3. 数字签名 数字签名是为了表明信息没有受到伪造,确实是信息拥有者发出来的,附在信息原文的后面。就像手写的签名一样,具有不可抵赖性和简洁性。
  • 简洁性:对信息原文做哈希运算,得到消息摘要,信息越短加密的耗时越少。
  • 不可抵赖性:信息拥有者要保证签名的唯一性,必须是唯一能够加密消息摘要的人,因此必须用私钥加密 (就像字迹他人无法学会一样),得到签名。如果用公钥,那每个人都可以伪造签名了。
  1. 数字证书 问题起源:对1和3,发信者怎么知道从网上获取的公钥就是真的?没有遭受中间人攻击? 这样就需要第三方机构来保证公钥的合法性,这个第三方机构就是 CA (Certificate Authority),证书中心。 CA
    用自己的私钥对信息原文所有者发布的公钥和相关信息进行加密,得出的内容就是数字证书。
    信息原文的所有者以后发布信息时,除了带上自己的签名,还带上数字证书,就可以保证信息不被篡改了。信息的接收者先用
    CA给的公钥解出信息所有者的公钥,这样可以保证信息所有者的公钥是真正的公钥,然后就能通过该公钥证明数字签名是否真实了。

非对称加密算法和对称加密算法区别

  • 首先,用于消息解密的密钥值与用于消息加密的密钥值不同;
  • 其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。
  1. 对称算法
    密钥管理:比较难,不适合互联网,一般用于内部系统
    安全性:中
    加密速度:快好 几个数量级 (软件加解密速度至少快 100 倍,每秒可以加解密数 M 比特 数据),适合大数据量的加解密处理
  2. 非对称算法
    密钥管理:密钥容易管理
    安全性:高
    加密速度:比较慢,适合 小数据量 加解密或数据签名

散列算法比较

名称 安全性 速度
SHA-1
MD5

对称加密算法比较

名称 密钥名称 运行速度 安全性 资源消耗
DES 56位 较快
3DES 112位或168位
AES 128位、192位、256位

非对称加密算法比较

名称 成熟度 安全性 运算速度 资源消耗
RSA
ECC

常见的签名加密算法

数字签名

  1. 数字签名相当于现实世界中的盖章、签字的功能,使用数字签名可以识别篡改和伪装,还可以防止否认。
  2. 数字签名可以解决发送者的认证问题,而且,数字签名还具有不可抵赖性。数字签名的原理也非常简单,其实就是将非对称加密反过来用。我们知道,非对称加密是用公钥加密,然后用私钥解密。而数字签名则是用私钥加密,生成的密文就是数字签名,再用公钥解密。用私钥进行加密这一行为只能由持有私钥的人完成,正是基于这一事实,才可以将用私钥加密的密文作为签名来对待。而由于公钥是对外公开的,因此任何人都可以用公钥进行解密,即任何人都能够对签名进行验证。
  3. 非对称加密本身加密和解密是非常慢的,消息越长,性能越慢,因此,一般不用来加密和解密长消息。同样的,一般也不会直接对长消息签名,通常的做法是对消息的散列值进行签名,因为散列值比较短,所以加密签名相对就会快很多。因此,你会看到数字签名有类似 MD5withRSA、SHA1withRSA 这样的实现。
  4. MD5withRSA 和 SHA1withRSA 这样的数字签名实现可以校验消息完整性、对发送者进行认证、还可防止抵赖,但却不能解决机密性的问题,不要妄想用一种密码技术就能解决所有问题。
  5. 数字签名其实不太适合直接用在客户端上。因为客户端要对消息签名,那么客户端就需要保存私钥,那依然有私钥的安全配送和存储问题。数字签名使用最广泛的应该就是用在数字证书上了,这还涉及到 SSL/TLS 和 CA 等,后面的文章再聊这个话题。

MD5算法

MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。

SHA1算法

SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。

HMAC算法

HMAC 是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用哈希算法 (MD5、SHA1 等),以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
HMAC 发送方和接收方都有的 key 进行计算,而没有这把 key 的第三方,则是无法计算出正确的散列值的,这样就可以防止数据被篡改。
HMAC 算法实例在多线程环境下是不安全的。但是需要在多线程访问时,进行同步的辅助类,使用 ThreadLocal 为每个线程缓存一个实例可以避免进行锁操作。

你可能感兴趣的:(密码学,安全)