实验二 电子传输系统安全-进展1

实验二 电子传输系统安全-进展1

上周任务

  • 找到上学期电子公文传输系统并重新调试通过
  • 学习加密相关知识,即gmssl
  • 部署安装gmssl
  • 使用gmssl测试证书
  • 调试运行加装gmssl后的系统

上周任务完成情况

学号姓名 任务 完成情况
宁心宇 找到上学期电子公文传输系统并重新调试通过 100%
周擎睿 部署安装gmssl 100%
李文婧 学习gmssl相关知识 100%
林道坤 使用gmssl测试证书 100%
张树杰 调试运行加装gmssl后的系统 100%

具体任务情况

调试并运行上学期公文系统


导入依赖库

<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15on</artifactId>
	<version>1.57</version>
</dependency>
<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-ext-jdk15on</artifactId>
	<version>1.57</version>
</dependency>

工具类

import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;

import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.Arrays;

/**
 * SM3 工具类
 */
public class Sm3Util {

    /**
     * 编码格式
     */
    private static final String ENCODING = "UTF-8";

    static{
        Security.addProvider(new BouncyCastleProvider());
    }

    /**
     *
     * @param paramStr 要sm3加密的内容
     * @return sm3加密后密文
     */
    public static String encrypt(String paramStr){
        String resultHexString = "";
        try {
            byte[] srcData = paramStr.getBytes(ENCODING);
            byte[] hash = hash(srcData);
            resultHexString = ByteUtils.toHexString(hash);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return resultHexString;
    }

    public static byte[] hash(byte[] srcData){
        SM3Digest sm3Digest = new SM3Digest();
        sm3Digest.update(srcData,0,srcData.length);
        byte[] bytes = new byte[sm3Digest.getDigestSize()];
        sm3Digest.doFinal(bytes,0);
        return bytes;
    }

    /**
     *
     * @param str 明文
     * @param hexString 密文
     * @return 明文密文对比结果
     */
    public static boolean verify(String str,String hexString){
        boolean flag = false;
        try {
            byte[] srcData = str.getBytes(ENCODING);
            byte[] sm3Hash = ByteUtils.fromHexString(hexString);
            byte[] hash = hash(srcData);
            if (Arrays.equals(hash,sm3Hash)){
                flag = true;
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return flag;
    }

}

GMSSL运用的算法以及其优点

GMSSL是一种基于国密算法和标准的安全传输协议,旨在满足中国政府和企业在安全通信方面的需求。它是在国际标准的基础上,结合了国家密码管理局发布的国密算法而设计的。GMSSL与传统的SSL/TLS协议在基本原理上相似,都是建立在非对称加密、对称加密和消息摘要等基础上,用于在客户端和服务器之间进行安全通信。
GMSSL使用不同的算法对不同算法进行加密。使用SM2作为非对称加密算法,它基于椭圆曲线离散对数问题,具有与RSA相当的安全性,但具有更高的计算效率和更小的密钥尺寸。 GMSSL采用SM4作为对称加密算法。SM4是一种分组密码算法,支持128位的密钥和128位的分组大小,具有较高的安全性和较好的性能。GMSSL使用SM3作为消息摘要算法。SM3是一种密码杂凑算法,用于生成消息摘要或哈希值,它具有固定的256位输出大小,能够将任意长度的消息映射为固定长度的哈希值,具有抗碰撞性和抗长度扩展攻击的特性。 在GMSSL中,证书的生成、签发和验证过程可能使用与传统SSL/TLS不同的算法和参数。通常情况下,需要使用SM2算法生成和验证证书,以确保其符合国家安全标准。在握手过程中,客户端和服务器之间会协商出一个对称加密的会话密钥,用于后续的通信加密和解密。这个过程可能涉及到SM2算法用于密钥协商,以及SM4算法用于会话加密。
GMSSL相较于传统SSL/TLS有以下优点。首先,GMSSL采用了国家密码管理局指定的国密算法来替代传统的算法,从而满足中国国内的法律法规和安全标准。其次,GMSSL使用国密算法,提供了与传统SSL/TLS相当甚至更高的安全性。国密算法经过严格的国家安全审查和认证,具有较强的抗攻击性和安全性。此外,GMSSL不仅可以用于Web应用程序的加密通信,还可以用于其他各种类型的网络通信,如电子邮件、即时通讯等。

下载gmssl证书和密码套件等

下载链接:GMSSL - 国密SSL实验室

在这里为了部署安装gmssl,我们选用了多种方式


编译github源代码过程中1、安装perl

2安装NASM

3安装cmake

操作环境要求

  • Tomcat9.0

  • JRE1.8

  • eclipse:2023

1.JRE的加密策略需要切换到unlimited模式

首先找到eclipse下jre的路径:

然后在jre/lib/security下找到java.security,用记事本打开,将crypto.policy=unlimited前的‘#’去掉,切换到unlimited模式
如此,便可以进行加密策略的切换了

gmssl测试



本周计划

推进登录口令密态存储和身份认证的工作
目前的文件虽然写了密级,但并没有加密,需要找一种算法去加密那些带密级的文件
学习访问控制相关的知识,设计一套方案,使用户只能按权限查看对应密级的文件

posted @ 2024-05-19 14:50  线性相关组  阅读(24)  评论(0编辑  收藏  举报