Android系统安全 — 1-OpenSSL支持的常用加解密算法介绍

news2024/11/19 3:50:30

常用加解密算法介绍

1. 哈希算法

常见的函数包含MD系列、SHA-1、SHA-2家族、SHA-3家族、SM3等。

1.1 MD5(单向散列算法)

全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。
MD5功能: 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);不同的输入得到的不同的结果(唯一性);根据128位的输出结果不可能反推出输入的信息(不可逆);

# 语法
md5sum 文件名 > 保存校验和文件名
# 示例
md5sum test.txt > test.txt.md5

1.2 SHA-1/SHA-2/SHA-3

SHA全称Secure HASH Algorithm,由NIST开发;
SHA-1于1995年进行修订发布,要求输入最大长度2^64 -1位数据,输出固定160位消息摘要,处理过程按照512位数据块进行分组。
SHA1的IV设定方法为十六进制数(0-F),每两个数构成一个字节,其中A(32bit数)顺时针0-7,B顺时针8-F,C逆时针F-8,D逆时针7-0,E取C3\D2\E1\F0,因此固定为:

(0x67452301U), (0xEFCDAB89U), (0x98BADCFEU), (0x10325476U),(0xC3D2E1F0U)

SHA-2是一系列Hash函数的统称,其中包括SHA-224\256\384\512等,区别主要在于函数内部结果和生成的摘要值长度,SHA-512还有另外变体为SHA512_224、SHA512_256,主要是基于SHA512产生的摘要值进行截断,与SHA512区别在于IV和输出长度不一致。
其中,SHA-224\256分组大小为512位,SHA-384\512, SHA-512_224和SHA-512_256分组大小为1024bit。
SHA-224生成224位消息摘要,初始IV为:

(0xC1059ED8U),(0x367CD507U),(0x3070DD17U),(0xF70E5939U),
(0xFFC00B31U),(0x68581511U),(0x64F98FA7U),(0xBEFA4FA4U)

SHA-256生成256位消息摘要,初始IV(取自然界前8个素数平方根小数部分前32位)为:

(0x6A09E667U),(0xBB67AE85U),(0x3C6EF372U),(0xA54FF53AU),
(0x510E527FU),(0x9B05688CU),(0x1F83D9ABU),(0x5BE0CD19U)

SHA384生成384位消息摘要,初始IV为:

(0xCBBB9D5DC1059ED8),(0x629A292A367CD507),(0x9159015A3070DD17), (0x152FECD8F70E5939),
(0x67332667FFC00B31), (0x8EB44A8768581511),(0xDB0C2E0D64F98FA7), (0x47B5481DBEFA4FA4)

SHA-3对于SHA-2是一种补充或者备用方案而不是替代。
SHA-3算法的函数系列均基于KECCAK哈希算法,补充了FIPS 180-4规定的SHA-1和SHA-2哈希函数系列,SHA-3算法包括四个加密哈希函数SHA3-224,SHA3-256,SHA3-384,SHA3-512 和两个可扩展输出函数(XOF)SHAKE128和SHAKE256。
SHA3算法的原理参考:https://blog.csdn.net/weixin_41754258/article/details/119645704

1.3 SM3 加密算法

SM 3是中国国家密码管理局 2010 年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证。
SM3 是在 SHA-256 基础上改进实现的一种算法,其安全性和 SHA-256 相当。SM3 和 MD5 的迭代过程类似,也采用 MD(Merkle-Damgard)结构。消息分组长度为 512 位,摘要值长度为 256 位。
SM 3 算法的设计思想:SM 3 算法采用分组密码结构设计,采用置换、非线性函数和模运算来实现数据的混淆和扩散,以确保数据的安全性。
SM 3 算法的加密流程:包括消息填充、初始向量设定、消息分组、迭代加密等步骤,最终生成哈希值作为数据的加密结果。
SHA3算法的原理参考:
https://cloud.tencent.com/developer/article/2419203

2. 对称算法

常见的对称算法有:RC, GCM, DES, TDES, AES,
AES-GCM, AES-CCM, SM4

2.1 RC算法

RC算法包括RC2,RC4,RC5
RC2 是由著名密码学家 Ron Rivest 设计的一种传统对称分组加密算法,它可作为 DES 算法的建议替代算法。它的输入和输出都是64bit。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年)。

RC4 于1987年提出,和 DES 算法一样,是一种对称加密算法,但不同于 DES的是,RC4 不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。
RC4 算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048bit),在如今技术支持的前提下,当密钥长度为128bit时,如今也没有找到对于128bit密钥长度的 RC4 加密算法的有效攻击方法.

RC5 分组密码算法是1994由麻萨诸塞技术研究所的 Ronald L. Rivest 教授发明的,并由 RSA 实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。

2.2 DES/TDES算法

DES 加密算法出自 IBM 的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为 DES 使用56位密钥(密钥长度越长越安全),以现代计算能力24小时内即可被破解。
DES 算法的入口参数有三个:Key、Data、Mode。

  • Key 是 DES 算法的工作密钥。
  • Data 是要被加密或被解密的数据。
  • Mode 为 DES 的工作方式,有两种:加密或解密。

3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。3DES 的密钥长度为24个字节,而 DES 的密钥长度为8的倍数,比如8,16,24都可以。

2.3 AES算法

2.3.1 常用AES算法

AES 加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,我们通常采用需要初始向量 IV 的 CBC 模式,初始向量的长度也是128位16个字节。
AES 加密的五个关键词,分别是:分组密码体制、Padding、密钥、初始向量 IV 和四种加密模式。

  • 分组密码体制
    AES 采用分组密码体制,即 AES 加密会首先把明文切成一段一段的,而且每段数据的长度要求必须是128位16个字节,如果最后一段不够16个字节了,就需要用 Padding 来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。
  • Padding
    Padding 就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式 PKCS5、PKCS7 和NOPADDING。
    PKCS5 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的几,比如缺少5个字节,就在末尾填充5个字节的5。PKCS7 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的0,比如缺少7个字节,就在末尾填充7个字节的0。NoPadding 是指不需要填充,也就是说数据的发送方肯定会保证最后一段数据也正好是16个字节。
  • 初始向量IV
    初始向量 IV 的长度规定为128位16个字节,初始向量的来源为随机生成。至于为什么初始向量能使加密更安全可靠,会在下面的加密模式中提到。
  • 四种加密模式
    一共有四种加密模式,分别是 ECB(电子密码本模式,相对不安全)、CBC(密码分组链接模式)、CFB、OFB、CTR,我们通常采用需要初始向量 IV 的 CBC 模式。
    AES流程图:
    在这里插入图片描述

2.3.2 AES-GCM, AES-CCM算法

  • AES-GCM

AES-GCM加密算法指的是该对称加密采用Counter模式,并带有GMAC消息认证码。
GCM ( Galois/Counter Mode)中的G就是GMAC, C就是指CTR, 指的是该对称加密采用Counter模式,并带有GMAC消息认证码, GCM可以提供对消息的加密合完整性校检。
有些信息是我们不需要保密,但信息的接收者需要确认它的真实性的,例如源IP,源端口,目的IP,IV,等等。因此,我们可以将这一部分作为附加消息加入到MAC值的计算当中。
下图的Ek表示用对称秘钥k对输入做AES运算。最后,密文接收者会收到密文、IV(计数器CTR的初始值)、MAC值。
在这里插入图片描述

  • AES-CCM
    CCM(Counter with Cipher Block Chaining-Message Authentication Code)是CBC-MAC与CTR的组合,可同时进行数据加密及认证,它基于对称秘钥分组加密算法,分组大小 128bits,因此 CCM 可以用于 AES,但是不能用于DES、3DES(分组大小为64bits)。CCM模式可以认为是分组加密算法的一种模式。
    CCM是CTR加密模式和CMAC认证算法的混合使用,常用在需要同时加密和认证的领域,比如WiFi安全中的WPE协议,它使用了AES-CCM模式。
    CCM首先使用CBC-MAC(Cipher Block Chaining-Message Authentication Code)模式对传输帧进行认证,然后使用CTR模式进行数据的加密。

2.4 SM4算法

SM4 是中国国家密码管理局提出的一种分组密码算法,也称为 SMS4。它属于对称加密算法,分组长度为 128 比特,密钥长度也为 128 比特。SM4 算法采用了与 AES 类似的轮函数结构,但具体的 S 盒和线性变换与 AES 不同,因此具有独特的加密性能。
SM4算法主要包括加解密算法和密钥扩展算法,采用 32 3232 轮非线性迭代的数学结构,其中算法中每一次迭代运算为一轮非线性变换。主要操作包括异或、合成置换、非线性迭代、反序变换、循环移位以及S盒变换等。加密算法和解密算法的数学架构、运算法则、运算操作等都是完全相同的,解密运算只需要将加密算法中生成的轮密钥进行反序使用。

3. 消息认证码MAC算法

  • 基于Hash函数的MAC:HMAC
    HMAC在各种网络应用中都能找到,如安全传输层协议TLS、网络安全IPSec。并且,HMAC还是美国国家标准与技术研究院NIST所使用的标准。常见又HMAC-SHA1,HMAC-SHA256
    流程:
    在这里插入图片描述

  • 基于分组密码的MAC:DAA和CMAC
    数据认证算法DAA 使用广泛,它建立在DES之上,采用CBC密文分组链接模式。因为安全弱点和算法陈旧,容易产生伪造攻击,目前已经废止。
    DAA流程:
    在这里插入图片描述
    CMAC建立在AES之上,采用CBC密文分组链接模式,是DAA的进阶版。
    CMAC流程:
    在这里插入图片描述
    在这里插入图片描述

4. 非对称算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC ( "Elliptic Curve Cryptography)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。

  • RSA算法
    RSA 是目前主流的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。
    量子计算里的秀尔算法能使穷举的效率大大的提高。由于 RSA 算法是基于大数分解 (无法抵抗穷举攻击),因此在未来量子计算能对 RSA 算法构成较大的威胁。一个拥有 N 量子位的量子计算机,每次可进行2^N 次运算,理论上讲,密钥为1024位长的 RSA 算法,用一台512量子比特位的量子计算机在1秒内即可破解。

  • DAS算法
    ElGamal数字签名方案是基于离散对数求解的困难性,使用私钥进行加密,公钥进行解密。
    Schnorr数字签名方案是基于离散对数求解的困难性,将生成签名所需的消息计算量最小化。
    DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。
    简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。

  • ECC算法
    在了解ECC算法之前,需要了解常见的椭圆曲线密码学标准:
    NIST曲线:由美国国家标准技术研究院(NIST)定义,包括P-224、P-256、P-384、P-521等。
    Brainpool曲线:由Brainpool工作组定义,设计时考虑了更广泛的安全需求,包括抵抗量子计算机的攻击, 包括BrainpoolP160r1、BrainpoolP256r1等。
    SECG曲线:由Standards for Efficient Cryptography Group(SECG)发布,包括secp256k1等,是比特币等加密货币的默认曲线。
    ANSI曲线:由美国国家标准学会(ANSI)定义,包括prime192v1等,也是一些早期应用中的曲线选择。
    国密SM2曲线:由中国国家密码管理局发布,是一种国产的椭圆曲线密码标准,包括SM2P256等曲线,用于中国的加密和数字签名标准。

DH(Diffie-Hellman)、ECDH(Elliptic Curve Diffie-Hellman)、DHE(Diffie-Hellman Ephemeral)、ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)、ECDSA(Elliptic Curve Digital Signature Algorithm)和ECSSA(Elliptic Curve Schnorr Signature Algorithm)都是密码学中用于密钥交换和数字签名的算法。下面是它们之间的详细介绍:
DH 和 ECDH
DH:Diffie-Hellman算法是一种基于离散对数问题的密钥交换协议。它允许双方在公开通道上协商出一个共享密钥,而无需泄露任何关于密钥的信息。
ECDH:Elliptic Curve Diffie-Hellman算法是DH的一个变种,它使用椭圆曲线代替了原始DH算法中的素数域。由于椭圆曲线具有更高的安全性,因此ECDH通常比DH更安全,同时密钥长度也更短。
DHE 和 ECDHE
DHE:Diffie-Hellman Ephemeral(短暂Diffie-Hellman)是一种使用临时私钥进行密钥交换的协议。每次会话都会生成新的私钥和公钥对,从而提高了安全性。
ECDHE:Elliptic Curve Diffie-Hellman Ephemeral(椭圆曲线短暂Diffie-Hellman)是ECDH的一个变种,它同样使用临时私钥进行密钥交换。由于使用了椭圆曲线,ECDHE比DHE更安全且效率更高。
ECDSA 和 ECSSA
ECDSA:Elliptic Curve Digital Signature Algorithm(椭圆曲线数字签名算法)是一种基于椭圆曲线的数字签名算法。它使用椭圆曲线上的点来表示数字签名,从而实现了与RSA等传统数字签名算法相当的安全性,但密钥长度更短。
ECSSA:Elliptic Curve Schnorr Signature Algorithm(椭圆曲线Schnorr签名算法)是一种基于椭圆曲线的数字签名算法,它是Schnorr签名算法的椭圆曲线版本。与ECDSA相比,ECSSA在某些方面具有更好的性能和安全性特性,但目前尚未得到广泛采用。

6. 其他算法

  • E0/E21/E22/SAFER+
    (E0, E1, E21, E22, SAFER+)通常与无线通信标准中的加密和认证相关,特别是在GSM(全球移动通信系统)和UMTS(通用移动通信系统)等蜂窝网络中。
    E0 是 GSM 系统中使用的加密算法。它是一种流密码,用于保护空中接口(Air Interface)上传输的语音和数据。E0 算法基于 A5/1 密码算法,该算法在 GSM 标准中定义,并且已知存在一些安全漏洞。
    E21 和 E22 同样不是广泛认可的加密算法名称。在 GSM 和 UMTS 标准中,存在一种称为 A5/2 的加密算法,它是 A5/1 的一个简化版本,主要用于出口市场,因为它被认为比 A5/1 更容易破解。
    SAFER+(Secure And Fast Encryption Routine Plus)是一种块密码,由 James Massey 和 Xuejia Lai 开发。它是对原始 SAFER 算法的改进,旨在提供更高的安全性和效率。SAFER+ 算法在多种应用中使用,包括 GSM 系统中的加密。
  • PBKDF
    PBKDF(Password-Based Key Derivation Function,基于密码的密钥派生函数)是一种用于从用户密码派生出加密密钥的算法。它通常用于存储密码的哈希值,以及在需要时从密码重新生成密钥。
    PBKDF 算法的一个典型实现是 PBKDF2(Password-Based Key Derivation Function 2),它是 PKCS #5 标准的一部分。PBKDF2 使用 HMAC(Hash-based Message Authentication Code)作为伪随机函数,并支持多种哈希算法,如 SHA-1、SHA-256 和 SHA-512。
    PBKDF2 的工作原理如下:
    输入用户密码、盐值、迭代次数和所需密钥长度。
    使用 HMAC 和选定的哈希算法对密码和盐值进行迭代哈希运算。
    将迭代结果截取为所需长度,作为派生的密钥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线索精细化管理实践:线上推广渠道线索管理的8个要点

在如今线索获取成本越来越高的情况下,如何获取增量线索、经营好存量线索、实现精细化、高效率线索管理对于企业来说至关重要。获取线索是一切行动的开始,与其建立起稳定、持续的信任关系,达成合作甚至引导复购,是整个线索管理链路…

泛微eteams OA对接金蝶云星空写入数据

需求: 公司需要先在OA上对准备生产的订单进行一次量产评审,所有相关人员评审通过后才可以进行生产,导致下工单的人员每次需要把OA上的信息复制到ERP进行审批。 为什么不直接在ERP上审批呢? 首先该节点涉及到很多不用ERP的用户&am…

盘点八月份最好用的五款报表制作工具,涵盖各功能,你都听说过吗?

一、报表制作软件的重要性 在现代企业运营中,数据的处理和分析是至关重要的。如何将复杂的数据信息以直观、易懂的方式展现出来,是提升决策效率和准确性的关键。因此报表制作软件成为企业必备的工具之一,它们通过图表化的方式,帮…

加速网络体验,Squid缓存代理:让浏览如飞,畅享无限网络速度!

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言: squ…

低代码表单引擎的核心不仅仅是拖拉拽,深入解析表单的高级功能

作为一名专业的低代码产品经理,我们主要以 to B 的企业级系统为配置化对象,我深知在构建高效、用户友好的企业应用系统时,表单引擎扮演着核心基础的角色。当然拖拉拽快速创建页面是最简单直接的用户体验,然而,在享受拖…

Maven: 更新依赖索引清理maven仓库

文章目录 更新依赖索引清理maven仓库 更新依赖索引 有时候给 idea 配置完 maven 仓库信息后,在 idea 中依然搜索不到仓库中的 jar 包。这是因为仓库中的 jar 包索引尚未更新到 idea 中。这个时候我们就需要更新 idea 中 maven 的索引了,具体做法如下&am…

企业如何防止重要数据泄露?10个重要的小技巧!

在当今数字化时代,企业数据已成为其最宝贵的资产之一,但同时也面临着前所未有的泄露风险。数据泄露不仅可能导致财务损失,还可能损害企业声誉和客户信任。因此,采取有效措施防止重要数据泄露至关重要。以下是十个重要的小技巧&…

武威市旅游资源管理系统/旅游网站的设计与实现

摘要 经济快速发展带动下的旅游产业发展,在我国越来越被更多的人所追求。人们对获取旅游信息有很高的需求,在互联网发达的今天,制作一个旅游资源管理十分有必要。该设计根据基于jsp技术和MySQL数据库设计一个武威市旅游资源管理系统。系统的前…

自动化持续测试策略

目录 重新确定手动测试和自动化测试的关系 充分考虑自动化的可测性 尽量将自动化测试的粒度做细 策略实施的关键点 1.跨职能团队合作 2.持续学习 3.自动化测试的可测性 4.测试优化 在持续测试中,我们希望将每个测试分层上的测试都用自动化的方式来进行&…

C语言-内存管理

内存区间 在C语言中,内存被划分为以下几个区间: 栈(stack):用于存储局部变量和函数的参数。栈是由编译器自动分配和释放的,栈的大小通常是固定的。 堆(heap):用于存储动…

【Qt】输入类控件QComboBox

目录 输入类控件QComboBox 例子:使用下拉框模拟点餐 例子:从文件中加载下拉框的选项 输入类控件QComboBox QComboBox表示下拉框 核心属性 属性说明 currentText 当前选中的⽂本 currentIndex 当前选中的条⽬下标. 从 0 开始计算. 如果当前没有条…

秋招力扣Hot100刷题总结——栈和队列

1. 有效的括号 题目链接 题目要求:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。…

Linux安装并配置Hadoop

目录 一、安装并配置JDK二、安装并配置Hadoop三、安装过程中遇到的问题总结 一、安装并配置JDK Linux上一般会安装Open JDK,关于OpenJDK和JDK的区别:http://www.cnblogs.com/sxdcgaq8080/p/7487369.html 准备Open JDK 1.8 查询可安装的java版本 yum -y list jav…

Swin-Transformer论文阅读

在此前,transformer已经通过ViT等作品展现出了它在cv领域的无限可能性,但是,vit主要针对的是图像分类问题的讨论,而分类只是cv众多问题中最基础的问题之一。那么,怎么用transformer进行物体检测,语义分割这…

vscode中使用官方推荐的编程字体Cascadia Code字体

字体样式 > 和 有特殊效果 很多字体都支持使用连字,Cascadia Code 、Jetbrains Mono 、Fira Code 等 安装Cascadia Code 下载完成后解压安装 选中右键安装,static文件里也一样安装 VS Code 中配置设置字体和连字设置 Cascadia Code, Consolas, Couri…

基于协同过滤算法的私人诊所管理系统_6t4o8

TOC springboot571基于协同过滤算法的私人诊所管理系统_6t4o8--论文 绪 论 1.1研究背景 自改革开放以来,国内的基础网络设施的不断进步和终端电子设备的高度普及,互联网用户规模越来越大[1]。现在人们越来越离不开计算机网络、互联网所带来的好处了&…

Windows—TCP编程

服务端骨架&#xff1a; #include <iostream> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #include <windows.h>int main() {WORD wVersionRequested MAKEWORD(2, 2);WSADATA WSAData;WSAStartup(wVersionRequested, &WSADat…

调用第三方API,可能会遇到的问题?

在实际工作中&#xff0c;我们经常需要在项目中调用第三方API接口&#xff0c;获取数据&#xff0c;或者上报数据&#xff0c;进行数据交换和通信。 那么&#xff0c;调用第三方API接口会遇到哪些问题&#xff1f;如何解决这些问题呢&#xff1f; 这篇文章就跟大家一起聊聊第…

浅谈国产大模型的过去、现在以及未来

随着时间推移&#xff0c;AI与大模型正在肉眼可见的降温。 怎样去衡量一款AI产品是否成功&#xff1f; 这个问题如果放在两年前&#xff0c;很多人给出的答案会集中在AI的狭义领域&#xff0c;AlphaGo、Siri、Google Assistant&#xff0c;或是用于解锁手机的图像识别技术&am…

根据json字符串 自动生成 实体类 Model Entity .NET

①访问json2csharp的在线工具&#xff1a;http://json2csharp.com/ ②复制json字符串&#xff0c;粘贴到左边&#xff0c;按下面Convert按钮 ③右边就是 生成的 实体类 &#xff0c;直接复制到 .cs文件内就能使用 ④或者点击 Zip As File 按钮&#xff0c;直接生成 N个.cs文…