对称加密、非对称加密、数字签名和摘要算法

对称加密

对称加密又叫传统密码算法,就是加密和解密使用同一个密钥。潜伏里面孙红雷通过电台收听到一堆数字,然后拿出一本书(密码本)比对,找到数字对应的汉字,就明白上级传达的是什么指令了。而军统的监听台没有密码本,只看到一堆没有意义的数字。

用数学公示表示就是:

▲加密:Ek(P) = C
▲解密: Dk(C) = P
  • E 表示加密算法
  • D 表示解密算法
  • P表示明文
  • C表示密文。

留意以后会经常看到。常见的对称加密方法有DES3DESBlowfishRC2AES以及国密的SM4

什么是国密啊?其实它的全称叫“国家商用密码”,是为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准。

非对称加密

对称加密又快又方便,但是有个很大的坑 —— 密码本容易被偷或被破解。从红军到二战,胜利的最大贡献其实就是破解密码。红军在数十倍的包围圈里面自由跳来跳去,那两台大功率电台功劳莫大。

怎么能够防止这种情况呢?1977年三位数学家Rivest、Shamir 和 Adleman 设计了一种算法(所以叫RSA),把密钥分成两个,一个自己持有叫私钥(Private Key),另一个发给对方,还可以公开,叫公钥(Public Key),实现用公钥加密的数据只能用私钥解开:

▲加密: E公钥(P) = C
▲解密: D私钥(C) = P

这下就不用再头痛如何把密码本给对方或被破解了,私钥由自己保管,敌方拦截到密文也没有办法。

除了RSA之外,常见的非对称算法还有Elgamal背包算法RabinD-HECC(椭圆曲线加密算法)以及国家商用密码SM2算法。

非对称算法核心原理其实就是设计一个数学难题,用公钥和明文推导密文很容易,但是很难根据公钥、明文和密文推导私钥。

RSA是基于大整数因式分解难度,也就是两个质数相乘很容易,但是找一个大数的质因子非常困难,理论上破解RSA-2048(2048-bit)的密钥可能需要耗费10亿年的时间。

这儿说点题外话:强烈不建议使用RSA,原因如下:

  • 容易被破解:RSA-768可以在3个小时内破解,1024在理论上100小时内也可以破解。所以使用RSA,长度起步要2048。但是数学家彼得·舒尔研究了一个针对整数分解问题的量子算法 (舒尔算法),理论上破解2048的RSA在100秒之内(好在量子机还未投入使用)。

  • 慢:密钥长度加到2048可以提升安全,但是计算过慢。

数字签名

有了非对称加密,数字签名就很容易理解了。

乙方收到甲方传过来的一串信息,怎么能够确定确实是甲方而不是有人伪造呢?

我们把非对称加密反过来做就可以了,因为只有甲方自己才持有一份秘密的私钥,他拿这个私钥对数据进行加密得到密文 C = EA私(M),乙方持有甲方的公钥,解密明文P = DA公(C),如果能够解密成功就证明信息确实是甲方所发。

不过通常不需要对发送信息的整个内容都加密,那样太慢。只需要计算一个信息的唯一信息摘要并对信息摘要加密解密即可,下面就会讲到数据摘要算法(俗称HASH算法),这也是数字签名的算法名称,很多时候是摘要算法+非对称算法,例如SHA1RSA, SHA256RSA等。

摘要算法

俗称HASH算法,学名杂凑算法,也就是从明文P生成较短的固定长度的杂凑值,保证不同的输入产生的输出是唯一的(重复几率非常非常小)。这样就可以广泛用于完整性检查、数字签名等场景。

常见的摘要算法有MD5RIPEMDSHA国密的SM3。【MD5不建议使用,已经被爆】。






发表于: 4月前   最后更新时间: 4月前   游览量:397
上一条: maven使用maven-shade-plugin打包java为可执行文件
下一条: 区块链加密算法介绍

评论…


  • 评论…
    • in this conversation