1. 背景

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

2. 密码学家的工具箱

2.1 散列算法

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

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

其他更多的HASH算法参见:https://blog.csdn.net/tianshan2010/article/details/115775292

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

程序开发中常用的密码学家的算法推荐清单相关推荐

  1. 程序开发中常用的第三方API接口汇总,包含各种类别的介绍

    下面列举了100多个国内外常用API接口,非常简单,略懂技术的菜鸟也能直接对接,包含快递单号查询.天气查询.生活常用.文体娱乐.企业金融.通讯服务.出行.技术开发等类别.API接口是获取网络服务最便捷 ...

  2. 鸵鸟算法在程序开发中的应用

    鸵鸟算法在程序开发中的应用 什么是鸵鸟算法呢? 在计算机科学中,鸵鸟算法是一个忽略潜在问题的一种算法策略,这种策略对计算机程序可能出现的问题采取无视态度(类似于鸵鸟在遇到危险时将头埋在地里,装作看不见 ...

  3. 开发中常用的只允许一个程序运行的办法createmutex

    //开发中常用的只允许一个程序运行的办法//程序以单例模式运行 常用办法,创建一个互斥量 //由于互斥量只允许一个进程或者线程占用 会创建失败,利用这个特性可以做到单例运行改程序 #include & ...

  4. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  5. JAVA 开发中常用的工具有哪些?

    Java开发中常用的工具有以下几种: Eclipse:一款非常流行的开发工具,提供了很多方便的功能,如代码自动补全.调试.版本控制等. IntelliJ IDEA:一款功能强大的Java集成开发环境, ...

  6. java开发常用jar包_Java开发中常用jar包整理及使用

    本文整理了我自己在Java开发中常用的jar包以及常用的API记录. 一.common-lang3 简介:一个现在最为常用的jar包,封装了许多常用的工具包 依赖: org.apache.common ...

  7. php页面开发,PHP网站开发中常用的8个小技巧

    这篇文章主要介绍了PHP网站开发中常用的8个小技巧,本文讲解了命名.使用.PHP判断Form表单是否提交.PHP 获取字符串长度.PHP超全局对象等内容,需要的朋友可以参考下 PHP是一种用于创建动态 ...

  8. 在手机开发中常用的数据库是什么?

    在手机开发中常用的数据库是 (A) A:SQLiteB:OracleC:Sql ServerD:Db23 SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的 ...

  9. 前端开发中常用设计模式-总结篇

    本文是向大家介绍前端开发中常用的设计模式,它使我们编写的代码更容易被复用,也更容易被人理解,并且保证代码的稳定可靠性. 1.什么是设计模式 通俗来讲,就是日常使用设计的一种惯性思维. 因为对应的这种思 ...

  10. 微信小程序页面栈_微信小程序开发中的页面栈及页面路由原理

    摘要:小程序的开发方兴未艾,本文以图解的形式详细剖析了小程序开发中的页面栈及页面路由原理,对于该原理的深入理解有助于开发者更好地理解小程序的开发框架,更好地开发出功能强大的小程序. 微信小程序(以下简 ...

最新文章

  1. rich-text 图片控制_武汉煤制工业级乙二醇图片
  2. python怎么用拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?
  3. java configuration_关于JAVA 中的Configuration类
  4. LeetCode 1246. 删除回文子数组(区间DP)
  5. php中对象传值方式,php实现对象传值方式的具体案例
  6. 新技术将让硬盘密度再提五倍
  7. c语言编译程序的软件下载,c语言编译器(wintc)
  8. 时间序列分析工具箱—— h2o + timetk
  9. java----数据结构与算法----JavaAPI:java.util.Collection接口
  10. 在eclipse中配置Tomcat时,出现“Cannot create a server using the selected type”的错误。...
  11. CSS3知识点总结---transitionend
  12. SQL Server 2008下载及安装
  13. 【非标自动化】2017年的最NB的非标自动化内容都在这了
  14. 国美金融APP如何提前结清所有贷款
  15. Cannot forward after response has been committe
  16. VUE 拦截浏览器后退弹窗,弹窗一闪立刻消失问题
  17. 适配7.0手机拍照、相册、裁剪图片
  18. 《Laravel-汉字转拼音》
  19. 轮播图、焦点图代码案例
  20. 海南行,阳光,沙滩,椰树[2007.2.1~2007.2.5]

热门文章

  1. 51. Element replaceChild() 方法
  2. 1. Browser 对象 - Window 对象
  3. linux 按时间查找文件,linux 文件三种时间 和 find 按时间查找
  4. jquery在选择元素的时候,可以写成var div=$(div)
  5. Struts中提示Invalid result location value/parameter
  6. 08flask中get和post请求。
  7. SpringBoot实现JWT保护前后端分离RESTful API
  8. MySQ随笔2(连接表、分组)
  9. Android 高仿微信支付密码输入控件
  10. 软工课设第一周周四报告