美文网首页框架建设收集
密码学 —— 对称加密

密码学 —— 对称加密

作者: yumiao | 来源:发表于2019-10-15 10:12 被阅读0次

    概念

    同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

    对称加密方式:明文通过密钥加密得到密文,密文通过密钥解密得到明文。

    在对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK等。

    DES (Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合,现在用得比较少,因为强度不够。

    3DES (Triple DES):是基于 DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

    AES (Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256、512位密钥的加密。

    AES加密模式

    对称/分组密码一般分为流加密(如 OFBCFB 等)和块加密(如 ECBCBC 等)。对于流加密,需要将分组密码转化为流模式工作。对于块加密(或称分组加密),如果要加密超过块大小的数据,就需要涉及填充和链加密模式。

    • ECB (Electronic Code Book):电子密码本模型。每一块数据,独立加密。
      最基本的加密模式,也是通常理解的加密,相同的明文永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
    • CBC (Cipher Block Chaining):密码分组链接模式。使用一个密钥和一个初始向量[IV]对数据执行加密。
      明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的明文加密后会形成不同的密文。这是目前应用最广泛的模式。CBC 加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组全部作废(同步错误)。
      CBC 可以有效保证密文的完整性,如果一个数据块在传递中丢失或改变,后面的数据将无法正常解密。

    终端演示

    # AES(ECB) 加密 “Hello” 字符串
    $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
    # AES(CBC) 加密 “Hello” 字符串
    $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
    
    # AES(ECB) 解密
    $ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d
    # AES(CBC) 解密
    $ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt -d
    

    对称加密的两大不足

    • 密钥传输问题:由于对称加密的加密和解密使用的是同一个密钥,所以对称加密的安全性就不仅仅取决于加密算法本身的强度,更取决于密钥是否被安全的保管,因此加密者如何把密钥安全的传递到解密者手里,就成了对称加密面临的关键问题。(比如,我们客户端肯定不能直接存储对称加密的密钥,因为被反编译之后,密钥就泄露了,数据安全性就得不到保障,所以实际中我们一般都是客户端向服务端请求对称加密的密钥,而且密钥还得用非对称加密加密后再传输。)
    • 密钥管理问题:再者随着密钥数量的增多,密钥的管理问题会逐渐显现出来。比如我们在加密用户的信息时,不可能所有用户都用同一个密钥加密解密吧,这样的话,一旦密钥泄漏,就相当于泄露了所有用户的信息,因此需要为每一个用户单独的生成一个密钥并且管理,这样密钥管理的代价也会非常大。

    参考

    相关文章

      网友评论

        本文标题:密码学 —— 对称加密

        本文链接:https://www.haomeiwen.com/subject/vpgrmctx.html