第一周进展

完成OpenSSL、GmSSL、mbedTLS的配置安装以及使用,了解国密算法相关知识,学习掌握openEuler的基本知识,熟悉openEuler的操作和环境。

国密算法了解

  • 1.1SM1对称密码SM1 算法是分组对称算法,分组长度为128位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与 AES 相当,
    算法不公开,仅以 IP 核的形式存在于芯片中。采用该算法已经研制了系列芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广
    泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
  • 1.2SM2椭圆曲线公钥密码算法SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC
    256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。它是一种先进安全的公钥密码算法,在我们国家商用
    密码体系中被用来替换RSA算法。SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为
    安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。
  • 1.3SM3杂凑算法SM3是一种哈希算法,其算法本质是给数据加一个固定的长度的指纹,这个固定指纹长度就是256bit,用于密码应用中的数字签名
    和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。可以在SM2,SM9标准中使用
  • 1.4SM4对称算法SM4算法是一种分组密码算法,用于无限局域网产品,该算法的分组长度为128bit,加密算法与密钥扩展算法都采用32轮非线性迭
    代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
  • 1.5SM7对称密码SM7算法是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7适用于非接触式IC卡,应用包括身份识别类应用
    (门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等),其跟SM1
    一样,是不被公开的,想要使用,需要添加加密芯片才能调用。
  • 1.6SM9标识密码算法为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家、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已获得国密密码局颁发
    的国密型号资质。
  • 1.6zucZUC祖冲之算法祖冲之序列密码算法是中国自主研究的流密码算法,是运用于移动通信4G网络中的国际标准密码算法,该算法包括祖冲之算
    法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。目前已有对ZUC算法的优化实现,有专门针对128-EEA3和128-EIA3的硬件实现
    与优化。​
  • 参考链接:https://www.zhihu.com/question/402353104/answer/2646461267

OpenSSL

OpenSSL调用与实践

  • openssl安装:https://www.cnblogs.com/jsjliyang/p/10606908.html
// sm4_str.c
#include <errno.h>
#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>

/**
 * @brief 加密或解密数据
 *
 * @param in 输入数据
 * @param inl 输入数据的长度
 * @param out 输出数据
 * @param do_encrypt 1-加密,0-解密
 * @return void 
 */
void do_crypt(const unsigned char* in, const unsigned int inlen,
             unsigned char* out, int do_encrypt, const unsigned char* key)
{
    EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
    EVP_CipherInit_ex(ctx, EVP_sm4_cbc(), NULL, key, NULL, do_encrypt);
    EVP_Cipher(ctx, out, in, inlen);
    EVP_CIPHER_CTX_free(ctx);
    return;
}

int main(int argc, char const* argv[])
{
    unsigned char key[] = {0, 1, 2,  3,  4,  5,  6,  7,
                           8, 9, 10, 11, 12, 13, 14, 15};
    const char* str     = "hello world";
    printf("origin data= %s\n", str);

    // encrypt
    unsigned char buf[BUFSIZ] = {0};
    do_crypt((const unsigned char*)str, strlen(str), buf, 1, key);
    printf("after encrypt str(hex)= ");
    for (int i = 0; i < 12; i++) {
        printf("%2X", buf[i]);
    }

    // decrypt
    unsigned char bufout[BUFSIZ] = {0};
    do_crypt(buf, strlen((const char*)buf), bufout, 0, key);
    printf("\nafter decrypt data= %s\n", bufout);
    return 0;
}

GmSSL

安装


参考链接1:https://www.cnblogs.com/freedreamnight/p/14688138.html
参考链接2:http://wjhsh.net/marshu-p-14201324.html

GmSSL调用与实践


posted on 2022-11-13 22:38  20201310寸头  阅读(49)  评论(0编辑  收藏  举报