0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

算法科普:非对称算法

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-09-05 21:07 次阅读

通过本文的阅读,你可以了解到以下知识:

什么是非对称加密算法

对称加密算法和非对称加密算法最本质的区别是什么?

常见的非对称算法哪些以及它们的特性和区别是什么?

非对称加密算法的应用场景有哪些?


非对称加密算法


世界万物都是平衡的,正如计算机的世界一样,有0的地方就一定有1;同样的,在算法理论上,既然有【对称加密算法】,那肯定就会有【非对称加密算法】。

非对称算法,顾名思义:算法的执行过程是不对称的,也就是说加解密双方的密钥是不对称的。在非对称算法的理论上,密钥有公钥和私钥之分:其中私钥是代表自己唯一身份的一组密钥标识,不同的非对称加密算法,采用不同的数学理论来标识这个“唯一性”,比如RSA算法,使用的是“很大的素数”这种方法来标识;通常来说,私钥是不对外公开的,就好比藏在自己心里的秘密一样,不能被外人知晓,否则,数据的加密就变得不可靠,存在密钥泄露的风险。与私钥对应的密钥叫公钥,公钥与私钥正好相反,它是允许对外公开的,也就是任何人都可以持有加密方的公钥信息。看到这里,很多童鞋开始疑问:既然密钥(公钥)都公开了,那加密还有什么用,谈何安全性可言?有这样疑问的童鞋,大概思路还停留在【对称加密算法】的基础上,等我详细讲解完【非对称加密算法】的加密和解密,你就一定明白到底是怎么一回事了。

非对称算法的加密和解密的特点是:一段数据明文经私钥加密后,则需要使用该私钥对应的公钥做解密;反之,一段数据明文经公钥加密后,则需要使用该公钥对应的私钥做解密;即【公钥加密对应私钥解密,私钥加密对应公钥解密】。使用公式表达如下:其他E表示加密,D表示解密,PriKey表示私钥,PubKey表示公钥,A、B分别表示通讯双方,P表示数据明文,C表示数据密文。

通讯方A 通讯方B

E(P) by PriKey[A] = C 对应 D(C) by PubKey[A] = P

E(P) by PubKey[B] = C 对应 D(C) by PriKey[B] = P

通过如上公式,我们可以很清晰的看到,通讯AB双方需要使用非对称算法加密通讯报文,必须想方设法获取到对方的公钥,这样整个加密的通道才能完全打通。而前面我们也说到了,自己的公钥一般都是公开的,允许任何人持有,只要保证自己的私钥是保密的即可,这就是SSL通讯的理论基础。在SSL通讯之前,通常会有通讯握手动作,这个握手动作就是为了取得对方可信任的公钥,至于如何保证自己取得的公钥就是对方的真实公钥,而不是非法监听报文的“中间人”的假公钥,这就是SSL双向认证要解决的核心问题。该部分的内容,后续会有更为详细的文章做更近一步的介绍。


对称加密算法与非对称加密算法的本质区别


通过上面对非对称算法的介绍,大家可以了解到非对称算法核心的部分就是:密钥分为公钥和私钥,私钥保密公钥公开,私钥加密的密文需要使用公钥解密,公钥加密的密文需要私钥解密。具体的非对称算法和对称算法的区别如下表所列:

算法 密钥类型 加密解密的特点
对称加密算法 通讯双方有且只有一个共同的密钥K 加密方使用密钥K加密,解密方使用密钥K解密
非对称加密算法 密钥有分私钥和公钥; 通讯双方分别持有自己的私钥和对方的公钥; 加密方使用自己的私钥加密数据,解密方使用对方的公钥解密数据; 加密方使用对方的公钥加密数据,解密方使用自己的私钥解密数据;

非对称加密算法的分类和对比


常见的非对称加密算法有RSA算法、SM2算法;前者是国际通用的算法,后者是国密算法的一种。

RSA算法

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。【摘自: 百度百科 RSA算法 】

RSA加密算法的密钥长度不像我们所认知的对称加密算法 ,它的密钥长度是可变的,一般用位来表示,常见的有1024位和2048位,甚至4096位。密钥的位数越长,理论上来说,解密的难度越大,加密的强度就越大。综合加密级别和使用的便利性,【RSA2048】是我们最常见的。当RSA的密钥位数确定了,那它的【模长】也就确定了,模长的值为密钥位数对应的字节数;计算公式如下,其实M为模长,B为密钥的长度:

M = (B + 7) / 8 当M等于1024位时,对应的模长为128字节;当M等于2048位时,对应的模长为256字节。

了解【模长】的概念之后,我们需要知道RSA算法执行加密解密操作时,基本的数据块长度。在RSA算法中,执行加密和解密操作,输入的数据块长度都必须等于模长,否则算法内部无法处理;即RSA密钥的长度不同,对应输入数据块的长度也是不同的,这一点与DES、AES等对称加密算法是完全不一样的。

假设我们有4个RSA接口

RSA_prikey_encrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);

RSA_prikey_decrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);

RSA_pubkey_encrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);

RSA_pubkey_decrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);

有趣的是,当我们有一段固定的数据in,分别输入RSA_pubkey_encrypt和RSA_pubkey_decrypt接口,得出的out居然是一样的!同样的在类似的私钥接口,也有类似的现象。经过这个实验,我么可以得出结论:根本没有所谓的公钥加密和公钥解密之分,公钥加密就是公钥解密,私钥加密也就是私钥解密;所以我们应该对公钥私钥、加密解密做个统一叫法,应该就是私钥运算和公钥运算。所以以上的接口应改为:

RSA_prikey_operation(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);

RSA_pubkey_operation(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);

SM2算法

SM2算法是国产的非对称算法,它的诞生就是为了取代RSA算法。SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小。SM2算法和RSA算法比较如下:

SM2 RSA
算法结构 基本椭圆曲线(ECC) 基于特殊的可逆模幂运算
计算复杂度 完全指数级 亚指数级
存储空间 192-256bit 2048-4096bit
秘钥生成速度 较RSA算法快百倍以上
解密加密速度 较快 一般

SM2算法与RSA算法类型,它也有公钥和私钥之分,它的密钥特点是私钥固定长度32字节,而公钥有x和y两个分量,每个分量都是32字节,总共是64字节。

在执行加密运算时,输入数据块的长度是变长的,而加密后的密文长度等于输入长度+96字节。

在执行签名运算时,输入数据块的长度也是变长的,但签名后的数据长度则固定为64字节。

限于篇幅原因,后续再写专门的文章来介绍SM2算法。


非对称加密算法的应用场景


值得注意的是,数据加解密的过程中,虽然公钥和私钥都可以用于加密,也都可以用于解密,并没有严格的限制;但是,在实际的应用中,通常有:

私钥加密,公钥解密:通常应用有签名、验签,即产生签名的一方使用自己的私钥对数据进行签名操作,而验签签名数据是否合法的一方使用签名方的公钥对签名数据进行验签;所以这里可以简单地认为,签名就是私钥加密,验签就是公钥解密。

公钥解密,私钥解密:通常应用在对数据的加密传输,即加密方使用解密方的公钥做加密动作,这样就意味着这段加密数据只有解密方一人能解开,因为解密方的私钥是不公开的,只有它自己知道,这样就可以很好地保证的加密数据的安全性。


此次关于非对称加密算法的介绍,就到此结束,如果需要学习更多有关非对称加密算法的知识,可以自行深入学习RSA算法和SM2算法的更多算法细节,相信你一定有更多的收获。后续会有详细介绍非对称算法在实际应用场景的文章,敬请关注,谢谢。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4976

    文章

    18239

    浏览量

    287892
  • 算法
    +关注

    关注

    23

    文章

    4448

    浏览量

    90718
  • 加密算法
    +关注

    关注

    0

    文章

    205

    浏览量

    25407
  • 非对称算法
    +关注

    关注

    0

    文章

    1

    浏览量

    930
收藏 人收藏

    评论

    相关推荐

    单相降压转换器双非对称BG评估板数据手册

    电子发烧友网站提供《单相降压转换器双非对称BG评估板数据手册.rar》资料免费下载
    发表于 04-14 17:10 0次下载
    单相降压转换器双<b class='flag-5'>非对称</b>BG评估板数据手册

    单相降压转换器双非对称AG评估板数据手册

    电子发烧友网站提供《单相降压转换器双非对称AG评估板数据手册.rar》资料免费下载
    发表于 04-14 17:02 0次下载
    单相降压转换器双<b class='flag-5'>非对称</b>AG评估板数据手册

    G473使用TIM1非对称模式做移相,用TIM8Combined PWM模式做对角的移相与门输出,为什么时序不对?

    G473使用TIM1非对称模式做移相,用TIM8Combined PWM模式做对角的移相与门输出,为啥占空比对了时序不对?
    发表于 03-14 07:49

    为什么三相短路是对称故障?单相短路是非对称故障呢?

    为什么三相短路是对称故障?单相短路是非对称故障呢? 三相短路是对称故障,而单相短路是非对称故障,其根本原因在于电网中的相量关系和电压分布。 首先,
    的头像 发表于 02-18 11:41 634次阅读

    php加密方式有哪些

    的管理和传递困难。 非对称加密 非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密,私钥用于解密。常见的非对称加密算法有RSA、DSA、
    的头像 发表于 12-04 15:32 274次阅读

    “国产双系统”出炉,RK3568J非对称AMP:Linux+RTOS/裸机

    本帖最后由 Tronlong创龙科技 于 2023-12-1 09:36 编辑 “非对称AMP”双系统是什么 AMP(Asymmetric Multi-Processing),即非对称
    发表于 12-01 09:35

    c语言算法大全

    1 适合算法竞赛或兴趣了解 2 本套算法均是已实现算法 3 算法均有本人查阅和自己写 4 未经允许不得做为商业用途
    发表于 09-27 06:51

    “国产双系统”出炉,RK3568J非对称AMP:Linux+RTOS/裸机

    非对称AMP”双系统是什么AMP(AsymmetricMulti-Processing),即非对称多处理架构。“非对称AMP”双系统是指多个核心相对独立运行不同的操作系统或裸机应用程序
    的头像 发表于 09-13 08:07 806次阅读
    “国产双系统”出炉,RK3568J<b class='flag-5'>非对称</b>AMP:Linux+RTOS/裸机

    STM32密码学基本原理

    1 对称加解密技术 2 非对称加解密技术 3 二者的结合:共享密钥的产生 4 常用算法
    发表于 09-08 06:46

    现代密码学如何确保交易安全的关键

    现代密码学依赖于两种基本算法——非对称密钥和对称密钥。非对称密钥算法使用私钥和公钥的组合,而对称
    的头像 发表于 06-28 10:22 513次阅读
    现代密码学如何确保交易安全的关键

    加密:最常见的算法

    数据加密标准 (DES) 是由 IBM 开发并于 1977 年标准化的对称加密算法。尽管它已被AES取代(我们将在下面进行研究),但DES的设计选择为关键空间问题提供了一个极好的真实示例。虽然对这些
    的头像 发表于 06-27 15:47 414次阅读
    加密:最常见的<b class='flag-5'>算法</b>

    基2FFT的算法推导及python仿真

    FFT的算法推导主要用到旋转因子的周期性、对称性和可约性。
    的头像 发表于 06-02 12:38 1142次阅读
    基2FFT的<b class='flag-5'>算法</b>推导及python仿真

    非对称非均匀的3dB定向耦合器

    实现了一种基于非均匀非对称定向耦合器的新型宽带波长平坦3dB光耦合器。在1300-1600nm波长范围内,实现了3 dB± 0.3 dB的分束比。
    的头像 发表于 05-30 17:04 1061次阅读
    <b class='flag-5'>非对称</b>非均匀的3dB定向耦合器

    求分享使用Crypto模块导入非对称密钥的示例

    我想知道 NXP 是否提供了使用加密模块实现非对称密钥导入(RSA 或 ECC)的示例? RTD 中的示例仅实现对称密钥导入 (AES)。
    发表于 04-28 06:54

    使用反相器产生的非对称式多谐振荡器

    接下来几篇将做一个流水灯电路,本文是流水灯电路的第一节,介绍用反相器产生非对称式多谐振荡器。
    的头像 发表于 04-26 14:51 1527次阅读
    使用反相器产生的<b class='flag-5'>非对称</b>式多谐振荡器