GMSM —— 国密简介、概念(SM1-9)、ZUC祖冲之算法

国密算法介绍

国密算法是国家商用密码管理办公室指定的一系列的密码标准,即已经被国家密码局认定的国产密码算法,又称商用密码(是指能够实现商用密码算法的加密,解密和认证等功能的技术),保障在金融,医疗等领域的信息传输安全。

国密算法可分为对称算法和非对称算法,对称算法包括了SM1,SM4,SM7,祖冲之密码(zuc),非对称算法包括SM2,SM9。还有SM3是哈希算法,SM1和SM7对外是不公开的,想要调用的话,需要通过加密芯片的接口才可以。

SM1对称密码

SM1 算法是分组对称算法,分组长度为128位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与 AES 相当,算法不公开,仅以 IP 核的形式存在于芯片中。采用该算法已经研制了系列芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。

SM2椭圆曲线公钥密码算法

SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。它是一种先进安全的公钥密码算法,在我们国家商用密码体系中被用来替换RSA算法。SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。

SM3杂凑算法

SM3是一种哈希算法,其算法本质是给数据加一个固定的长度的指纹,这个固定指纹长度就是256bit,用于密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。可以在SM2,SM9标准中使用

SM4对称算法

SM4算法是一种分组密码算法,用于无限局域网产品,该算法的分组长度为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

SM7对称密码

SM7算法是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7适用于非接触式IC卡,应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等),其跟SM1一样,是不被公开的,想要使用,需要添加加密芯片才能调用。

SM9标识密码算法

为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家、RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Cryptography)的理念。标识密码将用户的标识(如邮件地址、手机号码、QQ号码等)作为公钥,省略了交换数字证书和公钥过程,使得安全系统变得易于部署和管理,非常适合端对端离线安全通讯、云端数据加密、基于属性加密、基于策略加密的各种场合。2008年标识密码算法正式获得国家密码管理局颁发的商密算法型号:SM9(商密九号算法),为我国标识密码技术的应用奠定了坚实的基础。

SM9算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。如基于云技术的密码服务、电子邮件安全、智能终端保护、物联网安全、云存储安全等等。这些安全应用可采用手机号码或邮件地址作为公钥,实现数据加密、身份认证、通话加密、通道加密等安全应用,并具有使用方便,易于部署的特点,从而开启了普及密码算法的大门。

与SM2类似,包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。在这些算法中使用了椭圆曲线上的对这一个工具,不同于传统意义上的SM2算法,可以实现基于身份的密码体质,也就是公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体质有许多优点,省去了证书管理等。

现在越来越多行业要求使用国密算法对数据做加解密保护,而国密算法也不像以前那般神秘,集成有国密算法的产品也越来越普遍。武汉瑞纳捷是国密定点生产单位,其国密安全芯片RJMU401,硬件集成国密算法SM1、SM2、SM3、SM4,也集成国际算法3DES、AES、RSA2048、SHA256,芯片具有18KB 的RAM和550KB的FLASH,支持ISO7816和SPI接口。RJMU401已获得国密密码局颁发的国密型号资质。

 ZUC祖冲之算法

祖冲之序列密码算法是中国自主研究的流密码算法,是运用于移动通信4G网络中的国际标准密码算法,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。目前已有对ZUC算法的优化实现,有专门针对128-EEA3和128-EIA3的硬件实现与优化。

密码算法作为国家战略资源,比历史上任何时候都显得更为关键。在大数据和云计算的时代,关键信息往往通过数据挖掘技术在海量数据中获得,所以每一个人的信息保护都非常重要。
 

 

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,要使用Go语言的sm3算法加密文件,你可以按照以下步骤进行操作: 1. 首先,你需要安装Go语言的加密库,可以使用以下命令安装: ``` go get github.com/tjfoc/gmsm/sm3 ``` 2. 在你的Go代码中导入所需的包: ```go import ( "crypto/rand" "encoding/hex" "fmt" "io" "os" "github.com/tjfoc/gmsm/sm3" ) ``` 3. 然后,你可以编写一个函数来读取文件并进行加密: ```go func encryptFile(filename string) (string, error) { file, err := os.Open(filename) if err != nil { return "", err } defer file.Close() hash := sm3.New() if _, err := io.Copy(hash, file); err != nil { return "", err } encryptedData := hash.Sum(nil) encryptedHex := hex.EncodeToString(encryptedData) return encryptedHex, nil } ``` 4. 最后,你可以调用这个函数来加密文件: ```go func main() { filename := "your_file_path" encryptedHex, err := encryptFile(filename) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Encrypted data:", encryptedHex) } ``` 注意,上述代码只是一个示例,你需要根据你的实际需求进行修改。确保你已经正确导入了所需的包,并将"your_file_path"替换为你要加密的文件的路径。 请注意,sm3算法是一种哈希算法,它生成的结果是固定长度的哈希值,而不是加密后的文件。如果你需要对文件进行加密而不是哈希,请考虑使用其他加密算法,如AES。 希望这可以帮助到你!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值