sm3杂凑算法
① sm3可以确保数据保密性吗
sm3可以确保数据保密性。
SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布,相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。2016年,成为中国国家密码标准(GB/T 32905-2016)。
“SM” 是“商密”的拼音首字母组合,表示它是仅用于商用加密场合等不涉及国家机密的密码加密标准。而本文主角SM3 则是商密算法中的单向散列哈希算法(HASH), 用以替代国际上的MD5/SHA 等哈希算法。
SM3输入长度不限,输出的杂凑值(hash value)长度为256 比特。与SHA256输出的杂凑值长度相同,并且可以认为能够提高相似的安全性(Reference: https://tools.ietf.org/id/draft-sca-cfrg-sm3-01.html)。高于MD5和SHA1的安全性。
② 如何使用SM3算法给视频加密
第一步运营方根据需求获得点量视频加密软件,对视频进行加密。
第二步用户向运营方合法获得加密后的文件。
第三步用户在移动端APP或者PC端播放器访问视频时,属于运营方提供的独有激活码和秘钥,然后解密播放。
SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
③ SM3 杂凑算法轻量化 Fortran 接口库:SM3-Fortran
在学习哈希算法的探索中,我偶然接触到了国标杂凑算法SM3。为了深入了解,我尝试用Fortran实现其接口库。开始时,我查看了国家密码管理局提供的算法实现,尽管我并非数学专家,但试图理解背后的数学理论。理论表明,SM3算法主要过程是将输入的二进制数据转换为512比特的整数倍,不足部分进行特殊处理并补足。数据被分组,每512比特一组,通过初始值进行有损迭代压缩,使用大量位运算,最终结果为256比特的杂凑值。
在实践阶段,我发现Fortran中具备完整的位运算函数,于是兴冲冲地开始了代码编写。然而,在实现算法的中间部分,我遇到了无法得到预期结果的问题。经过一番搜索,我意识到Fortran使用有符号整型作为容器,无法达到与无符号整型相同的效果,无论我尝试何种类型重塑。这让我意识到,对于某些对内存存储要求严格的杂凑算法,Fortran不支持无符号整型,因此,用算法和C语言实现几乎无法在Fortran中复现。
尽管遇到了挑战,这次经历也带来了收获。我加深了对transfer函数的理解,并在类型重塑方面提高了熟练度。Fortran缺少无符号整型,但C binding却提供了解决方案。我借助广受好评的GmSSL库中的C语言代码,仅引入了SM3算法,创建了Fortran接口库SM3-Fortran。库虽然只包含一个SM3杂凑接口,但前后投入了整个周末的时间,提供了一个不错的示例。
在库的README中,我详细记录了引入GmSSL代码的原因。基于兴趣学习杂凑算法后,我发现Fortran在实现哈希算法时存在局限,特别是与无符号整型相关的部分。尽管如此,GmSSL以其较高的代码质量受到欢迎,因此选择引入其代码作为依赖。引入SM3-Fortran库具有以下意义:SM3作为国家标准的杂凑算法,GmSSL为国人主导的项目,体现了国人情怀;其安全性与SHA-256相当;SM3-Fortran作为轻量化接口包,相较于Fortran-Stdlib/Hash,体积更小;仅引入SM3算法,为其他算法的Fortran绑定提供了实践参考。
使用GmSSL已有实现大大节省了工作量(在此对GmSSL表示感谢!)。库支持fpm包分发和构建,但我认为这可能仅是“上灰”处理。Fortran缺少无符号整型确实限制了在图像处理和杂凑算法方面的应用,但这可以通过增加无符号整型的C接口规范的复杂度来解决。即使没有,现有的C接口规范也足以应对。如今,fpm较好地支持了C、Fortran的编译,这为我提供了便利。
④ 安全哈希算法sha1和sm3算法的区别
sha1是一种杂凑算法,通俗的说即对数据使用sha1算法进行计算,得到的结果就是sha1值(校验值),可用于数字签名、验签。
sm3是国密算法,2010年国家密码管理局发布,也是一种杂凑算法,功能和sha1算法相似,但算法实现不一样,破解难度比sha1更大,能达到sha256的水平(sha256是比特币的加密方式),也可用于数字签名、验签。