在选择加密算法,面对一大长串的选项时,大家都有这样的疑问,究竟哪种加密方式是最好的呢?

对于加密方式、算法来说,一般安全性与性能呈负相关,越是安全的,对性能要求则更高。

现在主流的加密协议的安全性均能达到标准,因此这里主要讨论的最好便是加密性能的优良。

对于 OpenSSL 而言,有三种常见的加密方式:RC4、AES、ChaCha。

单看这三种加密方式,都是非常具有代表性,可以说每种都有优缺点。

AEAD

在传统的对称加密协议中,最大的缺陷就是没有对数据包完整性进行校验,再加上流加密的特点,导致了攻击者可以通过穷举的方式修改密文进行基于服务器行为的主动探测。

在通常的密码学应用中,Confidentiality(保密)用加密实现,消息认证用 MAC(Message Authentication Code,消息验证码)实现。这两种算法的配合方式,引发了很多安全漏洞,过去曾经有 3 种方法:

  1. Encrypt-and-MAC (E&M)
  2. MAC-then-Encrypt (MtE) <- 即 OTA 的做法
  3. Encrypt-then-MAC (EtM) <- 新协议的做法

然而后来人们发现,E&M 和 MtE 都是有安全问题的,所以 2008 年起, 逐渐提出了「用一个算法在内部同时实现加密和认证」的反法,称为 AEAD (Authenticated Encryption with Associated Data)。在 AEAD 这种概念里,cipher + MAC 的模式被一个 AEAD 算法替换。

使用了 AEAD 算法的新协议本质上就是更完善的 stream cipher + authentication,虽然它依然使用的是流加密(StreamCipher),但是通过更完善的数据包完整性验证机制杜绝了上面所述的可被篡改密文的可能性。

目前以下加密方式支持 AEAD 算法:

  • AES-128-GCM
  • AES-192-GCM
  • AES-256-GCM
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305

但如果是用在路由器上,因为很多路由器 CPU 速度都在 500MHz 以下,并且不支持 AES 硬解,因为在路由器等计算能力弱的设备上使用 AES 加密方式会造成性能影响,所以,之前使用在路由器上的加密方式一般都选 ChaCha20 算法或 RC4-MD5 (特别是 MIPS 架构的处理器)。

性能

支持 AES 指令集情况下:

  • 更快(Fast)
  • RC4-MD5
  • AES-256-CFB
  • AES-256-GCM
  • ChaCha20
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305
  • 更慢(Slow)

不支持 AES 指令集情况下:

  • 更快(Fast)
  • RC4-MD5
  • ChaCha20
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305
  • AES-256-CFB
  • AES-256-GCM
  • 更慢(Slow)

在各类处理器的测试数据:

Chip AES-128-GCM 速度 ChaCha20-Poly1305 速度
OMAP 4460 24.1 MB/s 75.3 MB/s
Snapdragon S4 Pro 41.5 MB/s 130.9 MB/s
Sandy Bridge Xeon (AES-NI) 900 MB/s 500 MB/s

RC4 加密

速度最快,加密简单易破解,适合内网、低性能设备,推荐使用 RC4-MD5。

  • RC4-MD5:使用 RC4 加密 MD5 校验。

AES 加密

块加密算法,兼顾效率和安全,适合在拥有 AES 指令集的 CPU 上,推荐使用 AES-256-GCM 。

区别 AES-XXX-CFB AES-XXX-CTR AES-XXX-GCM
区别 仅加密 仅加密 加密+消息完整性校验
优点 加密可并行 加密解密均可并行计算 加密解密均可并行计算
缺点 解密串行
  • AES-256-CFB:密码反馈模式(Cipher FeedBack Mode),仅加密无完整性校验。

  • AES-256-CTR:计算器模式(Counter Mode),仅加密无完整性校验。

  • AES-256-GCM:伽罗瓦 / 计数器模式(Galois / Counter Mode)支持 AEAD 认证加密,同时完成加密和完整性校验。

ChaCha 加密

新型的流加密算法,兼顾效率和安全,适合在没有 AES 指令集的 CPU 上,效率比 AES 高,推荐使用 XChaCha20-IETF-Poly1305 。

  • ChaCha20:Salsa20 算法的改良,仅加密无完整性校验。

  • ChaCha20-IETF-Poly1305:支持 AEAD 认证加密,同时完成加密和完整性校验。

  • XChaCha20-IETF-Poly1305:是前者的升级版,拥有更大的随机数以防碰撞攻击,支持 AEAD 认证加密,同时完成加密和完整性校验。

总结

  • 在具备 AES 加速的 CPU(例如桌面、服务器)上,建议使用 AES-256-GCM 系列。

  • 在移动设备(例如手机、路由器等非 x86 架构的 CPU)上则建议使用 ChaCha20-IETF-Poly1305 系列。

  • 如果你是在内网(LAN 或 IPLC 线路)使用,则不必过多担心安全性问题,RC4-MD5 加密协议将是非常节省性能的选择。

OpenSSL 常见对称加密算法特性分析的更多相关文章

  1. openssl 对称加密算法enc命令详解

    1.对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用. openss ...

  2. 第七章 对称加密算法--DES

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 7.1.对称加密算法 特点: 加密与解密使用同一个密钥 是使用最广的算法 常见对称加密 ...

  3. .NET Core加解密实战系列之——对称加密算法

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...

  4. Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

    Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...

  5. openssl ans.1编码规则分析及证书密钥编码方式

    1 数据编码格式 openssl的数据编码规则是基于ans.1的,ans.1是什么 ? 先上高大上的解释 ASN.1(Abstract Syntax Notation One), 是一种结构化的描述语 ...

  6. java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

    概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encrypti ...

  7. openssl enc(对称加密)

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 对称加密工具.了解对称加密的原理后就很简单了,原理部分见下文. openss ...

  8. (9) openssl enc(对称加密)

    对称加密工具,了解对称加密的原理后就很简单了,原理部分见下文. openssl   enc  -ciphername   [-in filename]   [-out filename]   [-pa ...

  9. 使用java库中的对称加密算法

    对称加密算法是说加密方和解密方使用相同的密钥.常见的对称加密算法包括4个,DES,DESede(3DES),AES,PBE. 本文讨论的内容是加密算法,不是Message Digest,不是编码.下面 ...

随机推荐

  1. python初学者-使用for循环用四位数组成不同的数

    digits = (1,2,3,4) for i in digits: for j in digits: if j==i: continuefor k in digits: if k==i or k= ...

  2. x264编码demo定制修改介绍

    x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264.c,另外一个是简洁版的example.c. 其中,前者demo,可以配置很多编码参数,但太冗长繁杂,对初学者不太友好.  后者 ...

  3. Weblogic命令执行漏洞(CVE-2018-2628)复现

    一.漏洞环境搭建 CVE-2018-2628影响的软件版本为: Weblogic 10.3.6.0 Weblogic 12.1.3.0 Weblogic 12.2.1.2 Weblogic 12.2. ...

  4. svn怎么上传文件

    首先去网站下载TortoiseSVN,并安装   安装完后随便打开一个文件夹,如图,笔者在 E:\svn\ 文件下创建了一个simbo文件夹,选中并右键,出现了TortoiseSVN应用的选项,我们点 ...

  5. 浅入kubernetes(1):Kubernetes 入门基础

    目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...

  6. 高性能、低成本的高防 IP 产品能现实吗?

    DDoS 攻击是网络攻击最常用的方式之一,也是企业发展道路上的阻碍.作为业务发展的巨大隐形"地雷",企业想要自建 DDoS 防御的技术门槛很高,且建设周期不可控.这给予了安全厂商海 ...

  7. 5. Longest Palindromic Substring最大回文子串

    int sta = 0; int max = 1; public String longestPalindrome(String s) { /* 判断回文有两种: 1.最大回文子序列求长度: 用动态规 ...

  8. Buffer的重要属性 position/limit/capacity

    1 package nio; 2 3 import java.nio.IntBuffer; 4 5 /** 6 * Buffer的重要属性 position/limit/capacity 7 * po ...

  9. 谈谈 Vue 模板和 JSX

    工具链 从学习曲线角度来讲,结合我个人体会,React 学习路线是比 Vue 陡峭的,这个和 JSX.Template 有关吗?当然有.在 React 中使用 JSX,众所周知, JSX 需要经过 T ...

  10. LAMP架构之PHP-FPM 服务器 转

    安装PHP 解决依赖关系 # 请配置好yum源(系统安装源及epel源)后执行如下命令: yum -y groupinstall "Desktop Platform Development& ...