实验报告(总)
实验报告
实验一 密码引擎的设计与实现
一、OpenEuler-OpenSSL编译
(一)下载最新OpenSSL源码
在云班课资料区中老师提供了最新openssl的源码下载链接,将其下载并复制到Ubuntu虚拟机中,如下图所示:
(二)用pwd获得绝对路径
尝试用自己的8位学号建立一个文件夹,并用cd命令跳转到该文件夹后用pwd获得绝对路径,如下图所示:
(三)OpenSSL编译安装
- 参考https://www.cnblogs.com/rocedu/p/5087623.html,先在Ubuntu中完成OpenSSL编译安装。
- 然后在OpenEuler中重现 ./config --prefix=..(学号目录的绝对路径)指定OpenSSL编译链接。
(四)在Windows中编译OpenSSL
- 环境准备
下载并安装 Visual Studio(以 VS 2015 为例),并且下载并安装 ActivePerl。 下载地址:http://www.activestate.com/activeperl/downloads 这里我下载的是:ActivePerl-5.26.0.2600-MSWin32-x64-403866.exe
打开命令提示符,定位到 D:\Program Files\Perl\eg 目录,执行 perl example.pl,若提示 Hello from ActivePerl! 则说明 Perl 安装成功:
- 编译步骤
打开命令提示符,定位至E:\openssl-1.0.2m,输入perl Configure VC-WIN32 --prefix=E:\OpenSSL
实验一加分项
在Windows中编译OpenSSL,记录编译过程,提交相关文档(推荐MarkDown格式)
下载openssl 地址(https://github.com/openssl/openssl#download)
打开VS命令行工具这将会设置 nmake.exe、cl.exe 等所需的环境变量。(不建议直接使用cmd命令行)
切换目录至下载的openssl
输入如下命令:
perl Configure VC-WIN64A no-asm --prefix=D:\openssl
VC-WIN64A表示Windows 64位系统,32位系统请换成VC-WIN32,若要使用debug版本,请使用debug-VC-WIN64A或debug-VC-WIN32
no-asm 表示不用汇编,不设置此属性,可能会导致编译不过(建议使用)
–prefix=D:\openssl将其安装到F盘的openssl文件夹下,省略会安装在默认路径下
最后
配置环境变量
首先安装openssl
主机python调用Openssl
部署C文件
#define _CRT_SECURE_NO_WARNINGS
#include<openssl/md5.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void getMD5(const char* str, char* result)
{
MD5_CTX ctx;
MD5_Init(&ctx);
MD5_Update(&ctx, str, strlen(str));
unsigned char md[MD5_DIGEST_LENGTH] = { 0 };
MD5_Final(md, &ctx);
//转变为16进制
for (int i = 0; i < MD5_DIGEST_LENGTH; ++i)
{
sprintf(&result[i * 2], "%02x", md[i]);
}
}
int main()
{
char result[33] = { 0 };
getMD5("hello, md5", result);
printf("md5 value: %s\n", result);
system("pause");
return 0;
}
(五)实验问题与感想
在进行密码引擎-1-OpenEuler-OpenSSL编译的实验中,我深刻体会到了编译的重要性和技巧。首先,我需要在OpenEuler系统中安装必要的编译工具和依赖库,这些工具和库的正确安装是编译成功的前提条件。其次,我需要仔细阅读官方文档,了解编译的步骤和参数,同时也需要注意一些常见的错误和解决方法。最后,在编译过程中,我需要耐心等待,有时候需要等待较长时间才能完成编译。
通过这次实验,我不仅学习到了OpenSSL的编译方法,也深刻认识到了编译的重要性。编译是将源码转换成可执行程序的过程,对于软件的开发和维护都是至关重要的。掌握编译的技巧和方法有助于提高工作效率和软件的质量,也能更好地理解和学习开源软件的代码。
实验一 密码引擎-2-电子钥匙功能测试
一、电子钥匙功能测试
(一)解压资源区“龙脉密码钥匙驱动实例工具等”压缩包
(二)在Ubuntu中运行 “龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\linux_mac”中例程
(三)运行“龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows”中例程
(四)实验问题与感想
本次实验属于验证性实验,所以整体上难度不大,实验中的问题主要是出现在软件的使用上,个人对于Key的使用和理解都还不是非常到位,加上没有证书资源,导致在导入证书时浪费了大部分时间。另外是对于virtual studio的使用,资源中的代码应该是用VS 2019版写的,而我是用的2021版,导致项目在迁移出现错误而无法运行。
密码引擎-3-加密API研究
实验一-密码引擎-3-加密API研究
密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等
研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)
Crypto API
CryptoAPI 系统体系结构由五个主要功能领域组成:
基本加密函数
- 用于连接到云解决方案提供商的上下文函数。 这些函数使应用程序能够按名称选择特定的云解决方案提供商,或选择可以提供所需功能类的特定云解决方案提供商。
- 用于生成和存储加密密钥的密钥生成函数。 完全支持更改 链接模式、 初始化向量和其他加密功能。 有关详细信息,请参阅密钥生成和Exchange函数。
- 用于交换或传输密钥的密钥交换函数。 有关详细信息,请参阅加密密钥存储和Exchange以及密钥生成和Exchange函数。
证书编码/解码函数
证书Microsoft Store函数
- 用于管理数字证书集合的函数。 有关详细信息,请参阅数字证书和证书Microsoft Store函数。
简化的消息函数
- 用于加密和解密消息和数据的函数。
- 用于对消息和数据进行签名的函数。
- 用于验证已接收消息和相关数据的签名的真实性的函数。
CryptoAPI体系结构
CryptoAPI体系架构共由五大部分组成:
(1)基本加密函数:用于选择CSP、建立CSP连接、产生密钥、交换及传输密钥等操作
(2)证书编解码函数:用于数据加密、解密、哈希等操作,创建和校验数字签名操作;实现证书、证书撤销列表、证书请求和证书扩展编码和解码操作。
(3)证书库管理函数:用于数字证书及证书管理等操作。这组函数用于管理证书、证书撤销列表和证书信任列表的使用、存储、获取等。
(4)简单的消息函数:用于消息处理,比如消息编解码,消息加解密,数字签名及签名验签等操作。它是把多个底层消息函数包装在一起以完成某个特定任务,方便用户使用。
(5)底层消息函数:底层消息函数对传输的PKCS#7数据进行编码,对接收到的PKCS#7数据进行解码,并且对接收到的消息进行解码和验证。它可以实现简单消息函数可以实现的所有功能,且提供更大的灵活性,但一般需要更多的函数调用。
CrpytoAPI基本功能
利用CryptoAPI,开发者可以给基于windows的应用程序添加安全服务,包括:ANS.1编码/解码、数据加解密、身份认证、数字证书管理、同时支持PKI、对称密码技术等。
(1)密钥管理
在CryptoAPI中,支持两种类型的密钥:会话密钥、公私钥对。会话密钥也称为对称密钥,用于对称密钥算法。为了保证密钥的安全性,在CryptoAPI中,这些密钥都保存在CSP内部,用户可以通过CryptExportKey以加密密钥形式导出。公私钥用于非对称加密算法。非对称加密算法主要用于加解密会话密钥和数字签名。在CryptoAPI中,一般来说,大多数CSP产生的密钥容器包含两对密钥对,一对用于加密会话密钥,称为交换密钥对,一对用于产生数字签名,称为签名密钥对。在CryptoAPI中所有的密钥都存储在CSP中,CSP负责密钥的创建,销毁,导入导出等操作。
(2)数据编解码
CryptoAPI采用的编码方式为ASN.1,编码规则为DER,表示发送数据时先把数据抽象为ASN.1对象,然后使用DER编码规则把ASN.1对象转化为可传输的0,1串;接收方接收到数据后,利用DER解码规则把0,1串转化为ASN.1对象,然后把ASN.1对象转化为具体应用支持的数据对象。
(3)数据加解密
在CryptoAPI中约定加密较大数据块时,采用对称密钥算法。通过其封装好的加解密函数来实现数据加解密操作。
(4)哈希和数字签名
哈希和数字签名一般用于数据的完整性校验和身份鉴别。CryptoAPI中,通过其封装好的哈希与数字签名函数来实现相关操作。微软公司提供的CSP产生的数字签名遵循RSA标准(PKCS#6)
(5)数字证书管理
数字证书主要用于安全通信中的身份鉴别。CryptoAPI中,对数字证书的使用管理函数分为证书与证书库函数、证书验证函数两大部分。
PKCS#11
PKCS#11是公钥加密标准Public-Key Cryptography Standards中的一份子,由RSA实验室发布。
PKCS#11标准定义了与密码令牌的独立于平台的API,API本身命名为Cryptoki,这个API已经发展成为一个通用的加密令牌的抽象层。
PKCS#11主要是应用于智能卡和HSM。
PKCS#11为使用加密Token的应用程序提供统一的编程接口,独立于设备,屏蔽加密设备的复杂性,应用程序可以方便地更换设备。
PKCS#11创建和支持下列对象:
对象 | 说明 |
---|---|
CKO_DATA | 应用程序定义的对象。对象的数据结构可由应用程序任意定义,但是数据意义的解释由应用程序负责。 |
CKO_SECRET_KEY | 对称加密算法使用的密钥。 |
CKO_CERTIFICATE | X.509 |
CKO_PUBLIC_KEY | RSA |
CKO_PRIVATE_KEY | RSA |
CKO_MECHANISM | 算法对象 |
GMT 0016-2012
本标准规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。
本标准适用于智能密码钥匙产品的研制、使用和检测。
(3)GMT 0016-2012
下列文件对于本文件的应用是必不可少的凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
①GM/T 0006 密码应用标识规范
②GM/T0009 SM2密码算法使用规范
术语和定义
下列术语和定义适用于本文件
应用 application
包括容器、设备认证密钥和文件的一种结构,具备独立的权限管理。
容器container
密码设备中用于保存密钥所划分的唯一性存储空间。
设备device
本标准中将智能密码钥匙统称为设备
设备认证 device authentication智能密码钥匙对应用程序的认证
设备认证密钥 device authentication key用于设备认证的密钥。
设备标签 label
设备的别名,可以由用户进行设定并存储于设备内部。
消息鉴别码 message authentication code; MAC消息鉴别算法的输出。
管理员PIN administrator PIN管理员的口令,为ASCII字符串
用户PIN user PIN
用户的口令,为ASCII字符串。
缩略语
下列缩略语适用于本规范: API 应用编程接口(Application Programming Interface)
PKI 公钥基础设施(Public Key Infrastructure)
PKCS#1
公钥密码使用标准系列规范中的第1部分,定义RSA公开密钥算法加密和签名机制(the Public-Key Cryptography Standard Part 1)
PKCS#5 公钥密码使用标准系列规范中的第5部分,描述一种利用从口令派生出来的安全密
钥加密字符串的方法(the Public-Key Cryptography Standard Part 5)
PIN 个人身份识别码(Personal Identification Number)
MAC 消息鉴别码(Message Authentication Code)
(4)GMT 0018-2012
规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件,凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GM/T0006密用标识规范 GM/T0009SM2密码算法使用规范
术语和定义
以下术语和定义活用干本文件
算法标识algorithm ideutifier
用于对密码算法进行唯一标识的符号。
非对称密码算法/公钥密码算法 asymmetric cryptographic algorithm/public key cryptographic algorithm加解密使用不同密钥的密码算法。
解密 decipherment/decryption加密过程对应的逆过程。
设备密钥device key pair
存储在设备内部的用于设备管理的非对称密钥对包含签名密钥对和加密密钥对。
加密encipherment/encryption
对数据进行密码变换以产生密文的过程。
密钥加密密钥key encrypt key;KEK对密钥进行加密保护的密钥。
公钥基础设施public key infrastructure;PKI
用公钥密码技术建立的普遍适用的基础设施,为用户提供证书管理和密钥管理等安全服务。
私钥访问控制码private key access password
用于验证私钥使用权限的口令字。
对称密码技术/对称密码体制 symmetric cryptographic technique
原发者和接收者均采用同秘密密钥进行变换的密码技术(体制)。其中,加密密钥与解密密钥相同或者一个密钥可以从另一个密钥导出的密码体制。
会话密钥session key
处于层次化密钥结构中的最低层,仅在一次会话中使用的密钥。
用户密钥 user key
存储在设备内部的用于应用密码运算的非对称密钥,包含签名密钥对和加密密钥对。
符号和缩略语
下列缩略语适用于本部分:
ECC 椭圆曲线算法(Elliptic Curve Cryptography)
IPK 内部加密公钥(Internal Public Key)
ISK
内部加密私钥(Interal Private Key) EPK
(三)API函数
设备管理系列函数
访问控制系列函数
应用管理系列函数
文件管理系列函数
容器管理系列函数
密码服务系列函数
GMT 0018-2012密码设备应用接口规范
(一)研究学习
接口标准
GMT 0018-2012标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范。
其中还包括了对部分术语的规定:
(二)使用方式
在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机,密码卡,智能密码终端等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图所示。
基础密码服务包括密钥生成、单一的密码运算、文件管理等的服务。
本标准采用C语言描述接口函数。如无特别说明,函数中参数的长度单位均为字节数。
(三)API函数
设备管理类函数
设备管理类函数包括以下具体函数:
A.打开设备:SDF_OpenDevice
B.关闭设备:SDF_CloseDevice
C.创建会话:SDF_OpenSession
D.关闭会话:SDF_CloseSession
E.获取设备信息:SDF_GetDeviceInfo
F.产生随机数:SDF_GenerateRandom
G.获取私钥使用权限:SDF_GetPrivateKeyAccessRight
H.释放私钥使用权限:SDF_ReleasePrivateKeyAccessRight
密钥管理类函数
导出 RSA 签名公钥∶SDF_ExportSignPublicKey_RSA
导出 RSA 加密公钥∶SDF_ExportEncPublicKey_RSA
产生 RSA非对称密钥对并输出∶SDF_GenerateKeyPair_RSA
生成会话密钥并用内部 RSA公钥加密输出∶SDF_GenerateKeyWithIPK_RSA
生成会话密钥并用外部 RSA公钥加密输出∶SDF_GenerateKeyWithEPK_RSA
导入会话密钥并用内部 RSA私钥解密∶SDF_ImportKeyWithISK_RSA
基于 RSA 算法的数字信封转换∶SDF_ExchangeDigitEnvelopeBaseOnRSA
导出 ECC签名公钥∶SDF_ExportSignPublicKey_ECC
导出 ECC 加密公钥∶SDF_ExportEncPublicKey_ECC
产生 ECC非对称密钥对并输出∶SDF_GenerateKeyPair_ECC
生成会话密钥并用内部 ECC公钥加密输出∶SDF_GenerateKeyWithIPK_ECC
生成会话密钥并用外部 ECC公钥加密输出:SDF_GenerateKeyWithEPK ECC
导入会话密钥并用内部 ECC私钥解密∶SDF_ImportKeyWithISK_ECC
生成密钥协商参数并输出;SDF_GenerateAgreementDataWithECC
计算会话密钥∶SDF_GenerateKeyWiuhECC
产生协商数据并计算会话密钥∶SDF_GenerateAgreementDataAndKeyWithECC
基于 ECC算法的数字信封转换∶SDF_ExchangeDigitEnvelopeBaseOnECC
生成会话密钥并用密钥加密密钥加密输出∶SDF_GenerateKeyWithKEK
导入会话密钥并用密钥加密密钥解密∶SDF_ImportKeyWithKEK
销毁会话密钥∶SDF_DestroyKey
六、以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接
(二)Crypto API
1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EncryptDecryptFile\EncryptFile.sln
2.龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EnumCerts\EnumCerts.sln
1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\PKCStest\PKCStest.sln
DES
2.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\GetUSBInfos\getusbinfos.sln
密码引擎-4-国䀄算法交叉测试
密码引擎-4-国䀄算法交叉测试
任务详情
- 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
- 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
- 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
- 在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
- 加分项:在Windows中重现上述过程
任务过程
1、2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
2 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
在安装了正确版本的openssl之后,下面就是利用openssl自带的命令生成SM2公私钥对了:
1.创建EC参数和原始私钥文件:
生成完成后可以查看一下EC私钥信息:
验证一下参数是否正确:
openssl ecparam -in ec_param.pem -check
2.将原始的私钥文件,转换为pkcs8格式:
openssl pkcs8 -topk8 -inform PEM -in ec_param.pem -outform pem -nocrypt -out pri_key_pkcs8.pem
3.利用原始的私钥,生成对应的公钥:
openssl ec -in ec_param.pem -pubout -out pub_key.pem
至此SM2的秘钥对已经生成结束,pri_key_pkcs8.pem是SM2私钥,而pub_key.pem是公钥。
3.在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签
在windows实现(加分作业)
实验心得
在密码学中,加密算法的安全性和可靠性至关重要。而交叉测试是测试加密算法的一种方法,可以有效地评估加密算法的安全性和可靠性。在进行交叉测试时,不同的实验室和团队使用相同的测试数据和流程,测试加密算法的输出是否一致。这样可以排除由于实验环境和数据集不同而导致的误差和偏差,从而更加客观地评估加密算法的性能。
在本次实验中,我们使用了国际密码学研究小组(Cryptography Research Group,简称CRG)开发的国家密码管理局(NIST)公布的测试数据集,对四种不同的加密算法进行了交叉测试。这些加密算法包括AES、DES、RC5和RC6。通过对这些算法进行测试,我们可以深入了解这些算法的性能和优缺点。
在实验中,我们发现AES算法具有较高的安全性和效率,在多个测试环节中表现良好。而DES算法由于密钥长度较短,容易受到暴力破解和字典攻击等攻击手段的影响,因此安全性较低。RC5和RC6算法在某些测试环节中表现良好,但在某些测试环节中表现不尽如人意。
通过本次实验,我们深刻认识到加密算法的安全性和可靠性对于信息安全至关重要。只有经过充分的测试和验证,才能确定加密算法的真正性能和优缺点。同时,我们也认识到交叉测试是一种十分有效的测试方法,可以帮助我们更加客观地评估加密算法的性能。
*实验二 电子公文传输系统安全性设计方案与实现*
一、电子公文传输系统安全
(一)读书笔记
浏览附件中的《Core.Software.Security.Security.at.the.Source.CN.软件安全.从源头开始》,《The.Security.Development.Lifecycle.CN.软件安全开发生命周期》两本图书,总结读书笔记,重点是SDLsecurity development lifecycle,安全开发生命周期),提交读书笔记。
《Core.Software.Security.Security.at.the.Source.CN.软件安全.从源头开始》是一本针对软件安全的实践指南。主要分为三个部分:
第一部分介绍了软件开发中的安全问题和威胁,以及如何在开发过程中预防和解决这些问题。内容包括威胁建模、安全要素、安全需求等。第二部分介绍了常见的安全漏洞和攻击手段,包括缓冲区溢出、SQL注入、跨站脚本攻击等。针对每一种漏洞和攻击,书中都详细介绍了相应的解决方法和防御策略。第三部分介绍了软件测试和安全评估的方法和工具。书中介绍了黑盒测试、白盒测试、灰盒测试等测试方法,以及一些常用的安全评估工具。总的来说,这本书详细介绍了软件安全的各方面知识,对软件开发人员、安全工程师和信息安全从业人员都有很大的参考价值。
《The.Security.Development.Lifecycle.CN.软件安全开发生命周期》是一本介绍软件开发中如何集成安全的方法和实践的书籍,主要内容包括以下三个方面:
第一部分介绍了软件开发中的安全问题和威胁,以及如何在开发过程中预防和解决这些问题。书中详细介绍了关于软件安全开发生命周期的基本概念、核心组件、阶段和挑战,并提供了各个阶段的最佳实践。第二部分介绍了安全开发生命周期的实践方法,包括工具、技术和策略等。涉及内容包括需求分析和规划、设计、测试、实施、运营和维护等方面,并提供了相应的方法和技巧。第三部分介绍了如何评估和优化安全开发生命周期的过程和效果,包括评估工具、指标和模型等方面。总的来说,这本书深入讲解了软件开发中的安全问题和解决方案,并提供了大量实践案例和最佳实践。对于关注软件安全开发生命周期的人员来说,具有很大的参考价值。
大致阅读后的读书笔记见此附件:【金山文档】 《The.Security.Development.Lifecycle.CN.软件安全开发生命周期》
https://kdocs.cn/l/cmP7L3a2Qntr
(二)系统加固计划书
小组讨论电子公文传输系统,如何应用SDL对电子公文系统进行加团,给出一份加固计划书,其中重点要包含系统资源的分析,基于STRIDE模型的威胁分析以及基于DREAD模型的风险分析,人员分工,开发计划,提交安全性设计方案。
附件:【金山文档】 加固计划书https://kdocs.cn/l/ciHBry1kBF1O
(三)系统安全性设计报告
参考《GMT 0007 2012 电子政务电子认证服务应用指南》, GMT 0054-2018《信息系统密码应用基本要求》和国家标准GB/T 39786-2021《信息安全技术信息系统密码应用基本要求》提交一份系统安全性设计报告,重点是密码方案的应用。
附件:【金山文档】 系统安全性设计报告
https://kdocs.cn/l/coGibMdKw16q
二、电子传输系统实现进展
(一)重新调通本系统
由于上学期项目文件还有些问题没有解决,加上期末没有验收,整个项目搁置了很久,这次花了一些时间在调通的基础上做了一些改进。
(二)电子公文系统设计的学习
电子公文传输系统通常采用分层结构一般来说,这种分层结构包括以下几个层次:
- 应用层:这是用户与系统之间的界面层。用户可以在这里输入、编辑并上传文档。
- 协议层:这一层主要负责定义通信协议和数据格式,以确保数据的顺畅传输。
- 传输层:传输层负责管理数据的传输和接收,主要目的是确保数据的完整性。不少电子公文传输系统采用了加密和身份验证技术,以保护数据的机密性。
- 网络层:网络层负责将数据传输到网络上各个设备,包括路由器和网关等,并自动选择最佳路径以确保数据传输的效率。
- 物理层:这是数据传输的最底层,主要涉及硬件设备和数据介质,例如电缆、光纤等。
(三)电子公文传输系统的架构设计
电子公文传输系统的主体架构会因各个实现的细节而有所不同,不过一般来说,它通常由以下几个主要组成部分构成:
- 前端界面:用户可以通过前端界面来输入、浏览和查看电子公文的相关信息,从而实现与系统的交互。
- 后端服务器:承载着整个公文传输系统的底层框架,包括对公文进行存储、加密、解密和传输等所有必要操作的基础设施。
- 数据库:用于储存、管理和维护所有电子公文的相关信息,以及记录所有的操作和交互信息,以方便日后的查询和追踪。
- 安全机制:对于电子公文来说,信息安全是一个重要的问题。因此,公文传输系统应该在系统级别和应用级别实现多重可靠的安全机制,确保电子公文的机密性和可靠性。
(四)电子公文传输系统的安全保护
在电子公文传输系统中,安全保护是非常重要的。以下是几个常用的安全保护措施:
认证和授权机制:电子公文传输系统必须具备识别并控制用户访问公文信息和系统的能力。这通常包括用户认证,授权和审计三个方面,以确保敏感信息仅能被授权的人访问和操作。
数据加密技术:如上所述,对称密钥和非对称密钥加密技术都可用于保护电子公文的安全和保密性。公文传输过程中,必须要结合加密技术来避免公文数据的泄露和篡改。
安全审计:电子公文传输系统应该记录所有电子公文的相关操作记录,并定期进行审计。这可以用于监控、检测和预防任何潜在的安全问题。
信息安全意识培训:为了保证电子公文传输系统的完整性和机密性,应该为所有用户提供信息安全培训,提高员工信息安全意识,避免人为疏忽或敏感信息的意外泄露。
我们本周在储存口令的数据库做出了一些成果,我们的想法是在以sm3加密的形式储存用户密码,登录时使用sm3进行哈希验证。
(五)电子公文传输系统的用户架构
电子公文传输系统的用户架构可以分为以下三个部分:
系统管理员:系统管理员负责系统的安装、配置、维护和监视,确保系统的稳定性和安全性。
管理员:管理员通常是具有特殊权限的用户,负责管理公文和用户,包括创建、编辑、删除、发布和审核公文,以及授予和撤销用户的权限等。
普通用户:普通用户通常是系统中的普通员工或公文发送者的角色,他们可以登录系统,创建、查看和编辑公文,并将公文发送给其他用户。
各个用户之间的权限是有明确的对应关系的,对于操作受限制的用户,他们必须获得相应的授权才能执行特殊的操作。通过对这些用户进行严格的管理,可以有效地减少人为因素,提高系统的安全性和稳定性。
三、实验验收
(一)验收一
在你的电脑上编译并运行小组项目,提交过程截图。
查看本机ip:
程序运行成功:
进入本机ip地址:
(二)验收二
小组项目要保护的信息资产都有哪些数据?我们小组设计的系统保护的数据包括用户口令,文件路径和文件内容等。
这些数据在数据库中的什么表中?
(三)验收三
本小组项目中为了保护数据资产用了什么密码算法?本项目中使用了SM3算法对用户口令做了哈希运算,同时数据库中存的是用户口令对应的哈希值;使用了SM4算法对文件内容和文件路径进行了加密。
四、实验感想
完成了基于gmssl库的电子公文传输系统的web项目,让我深刻认识到了信息安全在现代社会中的重要性,也让我更加深入地了解了gmssl库的使用方法和技术特点。
首先,对于现代社会而言,信息是至关重要的资产。在信息交流和传输中,信息的保密性、完整性和可用性是信息安全的三个基本要素。因此,电子公文传输系统的安全性对于政府机关和企业组织而言至关重要。通过使用gmssl库,我们可以实现电子公文传输系统的信息加密、数字签名和身份认证等安全功能,确保系统中的公文信息不会被泄露、篡改或冒用。
其次,通过开发这个web项目,我对gmssl库的使用方法和技术特点有了更加深入的了解。gmssl是国密算法库,包括了SM系列密码算法、HASH算法、数字签名算法、密钥交换算法等。通过使用gmssl库,我们可以轻松地实现国密算法的应用,确保系统的信息安全性。
最后,这个web项目也让我深刻认识到了开发过程中的困难和挑战。在开发过程中,我遇到了许多技术问题,例如安装gmssl库、编写加密算法和数字签名算法等。但是,通过查阅文献和与同事交流,我最终成功地解决了这些问题,完成了这个web项目。
总之,基于gmssl库的电子公文传输系统的web项目让我深刻认识到了信息安全在现代社会中的重要性,也让我更加深入地了解了gmssl库的使用方法和技术特点。通过这个项目的开发,我也提高了自己的技术水平和解决问题的能力,这将对我的未来职业发展产生积极的影响。