专栏首页Web技术研发工具系列 | 常用加密算法推荐清单

工具系列 | 常用加密算法推荐清单

1. 背景

文中所列出的推荐算法皆已经过全世界密码学家验证和各国际标准化组织认证, 并在市场中广泛应用, 有望在未来足够长的时间内保证安全性和实现性能。

2. 密码学家的工具箱

2.1 散列算法

散列算法是密码学算法中非常重要的一个分支, 通过对所有数据提取指纹信息以实现数据签名、 数据完整性校验等功能。用于消息唯一性和数据完整性验证的散列函数, 其安全性依赖于函数本身的属性和对抗碰撞的抵抗, 因此散列函数的选择至关重要。

  • MD 系列函数已宣告破解, 可被轻易伪造, 不能作为安全散列函数使用。
  • SHA 安全加密标准是至今世界上使用最广泛的散列算法之一。SHA1 已宣告破解。考虑性能消耗与安全性的平衡, SHA2 系列算法得到了广泛的认可及应用。SHA3 作为下一代安全加密标准, 将会在未来发挥重要的作用。
  • RIPEMD 是为了弥补 MD 系列算法的缺陷而由提出的算法, 比特币生成地址过程中使用了 RIPEMD160, 虽然 RIPEMD160 还未宣告破解, 但已被证明密码强度较弱, 不推荐使用
  • Tiger 算法号称最快的 Hash 算法, 专门针对 64 为机器做优化了。
  • Whirlpool 算法被列入 iso 标准。与 AES 加密标准使用了相同的转化技术, 极大提高了安全性, 被称为最安全的摘要算法。

2.2 消息认证算法

消息认证码可以确认自己受到的消息是否是发送者的本意, 是密码学的重要工具之一。

  • CMAC 是基于分组加密的消息认证码, 一般用作消息的签名。CMAC-AES128 常用于模块内部实现密钥的派生, 将一个 - AES 密钥经过 CMAC 产生多个输出, 这些输出可以用于不同用途的秘钥。
  • HMAC 是一种使用散列函数构造消息认证码的方法, 任何高强度的散列函数都可以用于 HMAC。
  • PBKDF2 是一种使用伪随机函数接受明文和 salt 作为输入, 输出的散列值作为输入重新进行散列, 循环该过程上千次, 最终生成一个难以破解的密文的算法。

2.3 对称加密算法

数据加解密技术是网络中最基本的安全技术, 主要是通过对网络中传输的信息进行数据加密来保障其安全性。对称加密算法中加密和解密使用相同的密钥。

  • SM 是国密算法, SM1 不公开, 以 IP 核形式存储在芯片中, SM4 用于无线局域网中。
  • RC4 算法由 RSA 公司提出, 是一种在电子信息领域的常用加密手段, 但已宣告破解。
  • DES 算法受美国安全局资助由 IBM 开发, 已宣告破解退出历史舞台, 尽管 3DES 目前还在被一些机构使用, 但其处理速度不高, 除了特别要求向下兼容, 很少被用于新的用途。
  • AES 由美国国家标准技术研究所组织竞选, 目的是取代 DES 成为新一代美国国家标准, 但参与竞选的算法都有一个条件:被选为 AES 的密码算法必须无条件地免费供全世界使用。因此 AES 也是一个世界性的标准。最终 Rijndael 被选为新一代高级加密标准, 但同期竞选亦不乏优异的算法, 一并推荐。
  • Camellia 是一种为许多组织所推崇的分组密码, 由三菱和日本电信电话(NTT) 在2000 年共同发明, 虽然受到专利保护, 但在 2001 年时 NTT 宣布 Camellia 为 Royalty-freelicense。

2.4 非对称加密算法

非对称加密技术中加密和解密使用不同的密钥, 已知密码算法和加密密钥, 求解密密钥在计算上是不可行的。

  • RSA 是最常见的非对称加密算法, 即能用于数据加密, 也能用于数字签名, 是目前最流行的公开密钥算法。随着分解大整数方法的进步及完善, 密钥长度的增加导致了其加解密的速度大为降低, 硬件实现也变得越来越难以忍受, 这对使用 - RSA 的应用带来了很重的负担, 因此需要一种新的算法来代替 RSA。
  • ECC 根据是有限域上的椭圆曲线上的点群中的离散对数问题 ECDLP。ECDLP 是比因子分解问题更难的问题, 它是指数级的难度。
  • SM2 是一种椭圆曲线公钥密码算法, SM2 算法相对 RSA 是一种更先进安全的算法, 在国家商用密码体系中被用来替换 RSA 算法。
  • ElGamal 加密算法是一个基于 Diffie-Hellman 密钥交换的非对称加密算法。 Rabin 算法是目前主流的基于概率的素数测试算法, 在构建密码安全体系中占有重要的地位。

2.5 数字签名算法

数字签名是一种以电子形式存在于数据信息之中的, 或作为其附件或逻辑上有联系的数据, 可用于辨别数据签署人的身份, 并表名签署人对数据信息中包含的信息的认可技术。在我国, 数字签名是具法律效力的, 正在被普遍使用。数字签名能够实现鉴权, 保证数据的完整性, 以及确保消息的发送方不可抵赖。

  • DSA 是美国国家标准技术研究所指定的数字签名标准算法, 但其生成签名的随机性较差, 存在被攻破的风险, 不推荐使用
  • RSA 签名算法是最常用的签名算法之一, 其被签名的消息、 密钥以及最终生成的签名都是以数字形式表示的, 因此在对文本进行签名时, 需要事先对文本编码成数字。
  • ECDSA 是使用椭圆曲线密码实现的数字签名算法。ECDSA 于 1999 年成为 ANSI 标准,并于 2000 年成为 IEEE 和 NIST 标准, 在资源消耗及安全强度上相对于 RSA 签名算法都更有优势。
  • ElGamal 签名算法是在密码协议中有着重要应用的一类公钥密码算法, 其安全性是基于有限域上离散对数学问题的难解性。它至今仍是一个安全性良好的公钥密码算法, DSA算法即是 ElGamal 算法的派生。
  • Rabin 签名算法是一种基于模平方和模平方根的签名算法, 难度近似于大素数分解,但在实际使用中相对较少, 不做推荐。

参考文献

[1] 国家密码管理局公告(第 7 号) 2006-01-19 [2] M.Bellare, New Proofs for NMAC and HMAC: Security Without CollisionResistance, Journal of Cryptology 28(4): 844-878 (2015).CRYPTREC Report 2007, 2008 年 3 月 [3] http://www.cryptrec.go.jp/report/c07_wat_final.pdf [4] https://en.bitcoin.it/wiki/Secp256k1 [5] Douglas R.Stinson. 密码学原理与实践(第三版) 电子工业出版社 2009 [6] https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm [7] Michael E.Whitman 信息安全原理(第五版) 清华大学出版社 [8] Secp256k1 https://en.bitcoin.it/wiki/Secp256k1 [9] Java ™ Cryptography Architecture Standard Algorithm Name Documentation https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Signature [10] RSA ECC 比较 https://blog.csdn.net/caodongfang126/article/details/83377888. [11] SM 系列国密算法 https://www.jianshu.com/p/ac68b13d087f

本文分享自微信公众号 - 万少波的播客(Tinywanblog),作者:Tinywan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Instagram个性化推荐工程中三个关键技术是什么?

    【导语】近期,Facebook 在博客上分享了第一篇详细介绍 Explore 系统关键技术,以及 Instagram 是如何为用户提供个性化内容的文章。本文就这...

    AI科技大本营
  • 详解工业级推荐系统从0到1的构建

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,其中,推荐系统、计算广告等领域彰显的尤为明显。由于推荐系统与提升用户量...

    黄博的机器学习圈子
  • 拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?

    近日,拥有 10 亿月活用户的 Instagram 分享了其内容推荐系统的关键内容,包括:Explore 基础构建模块的开发、元语言 IGQL工具、Explor...

    AI研习社
  • 大牛书单 | 腾讯技术大咖推荐你五一看这些书

    ? 导语:读书,伴随技术人的一生。技术人通过读书增长见闻、精进技术,提升人生境界。 2020年五一期间,我们特别邀请几位鹅厂技术大牛分别推荐曾经读过的好书...

    腾讯技术工程官方号
  • windows 应急流程及实战演练

    当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵...

    信安之路
  • Android开发在路上:少去踩坑,多走捷径

    最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需要...

    腾讯大讲堂
  • 你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件

    最近有一个朋友刚入手了 Mac,准备专门搞开发用,让我给他推荐几款软件,然后我就把我的 Launchpad 截图发给了他,他看到这密密麻麻的软件完全不知所措,如...

    崔庆才
  • 可视化图表样式使用大全

    Severino Ribecca 是一位平面设计师,也是数据可视化的爱好者,他在自己的网站上收录了 60 种可视化图表样式以及它们分别适用于什么样的场景,并且推...

    代码医生工作室
  • 系统的讲解 - PHP 接口签名验证

    工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这过程中肯定都离不开签名验证。

    新亮
  • 系统的讲解 - PHP 接口签名验证

    工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这过程中肯定都离不开签名验证。

    桶哥
  • Instagram的Explore智能推荐系统

    超过半数的 Instagram 用户每个月都会浏览 Instagram,寻找与他们兴趣相关的新照片、视频和故事。大规模实时推荐数十亿个选项中最相关的内容,会带来...

    石晓文
  • MySQL性能分析、及调优工具使用详解

    vmstat、sar(sysstat工具包)、mpstat、oprofile、nicstat、dstat、iotop、tsar、iostat 掌握几个即可,功能...

    二狗不要跑
  • 如何选择数据结构和算法(转)

    熟知每种数据结构和算法的功能、特点、时间空间复杂度,还是不够的。工程上的问题往往都比较开放,往往需要综合各种因素,比如编码难度、维护成本、数据特征、数据规模等,...

    Michael阿明
  • 优质数据科学课程推荐:总结篇

    原作者   David Venturi 编译 CDA 编译团队 本文为  CDA 数据分析师原创作品,转载需授权 一年以前,我还只是一个没有任何编程经验的技术宅...

    CDA数据分析师
  • Java工程师核心书单推荐

    书籍是获取知识的最好来源之一。技术书籍浩如烟海,市场上有不少《XXX入门到精通》,《XXX王者归来》,《21天学会XXX》这样的书,当然也有不少经典,个人的精力...

    三分恶
  • NodeJS模块研究 - crypto

    这次研究下 nodejs 的 crypto 模块,它提供了各种各样加密算法的 API。这篇文章记录了常用加密算法的种类、特点、用途和代码实现。其中涉及算法较多,...

    心谭博客
  • 如何快速学习Tableau Desktop

    这个要慌,问题有点大! 严格来说我只是Tableau众多粉丝中的一员,而且是一个不怎么会Excel的。三年前一次偶然的机会在领导推荐下接触了Tableau,开始...

    小莹莹
  • 【转】Android开发在路上:少去踩坑,多走捷径

    本文是我订阅“腾讯大讲堂”公众帐号时,他们推送的一篇文章,但在腾讯大讲堂官网上我并没有找到这篇文章,不过其它专门“爬”公众号文章的网站倒是有。我觉得写的很不错。...

    meteoric
  • 推荐算法设计综述

    http://www.tensorinfinity.com/paper_178.html

    SIGAI学习与实践平台

扫码关注云+社区

领取腾讯云代金券