电子公文交换系统设计 ——基于商用密码标准的密码模块的应用
文章目录
- 《密码系统设计》实验
- 实验项目
- 实验四 密码模块的应用
- 实践要求(40 分)
《密码系统设计》实验
实验项目
实验序号 | 实验名称 | 实验学时数 | 实验目的 | 实验内容 | 实验类型 | 学生学习预期成果 |
---|---|---|---|---|---|---|
实验四 | 密码模块的应用 | 6 | 基于商用密码标准的密码模块的应用 | 对电子公文系统等密码系统进行威胁建模,安全性分析和安全性设计。 | 综合性 | 1.系统采用B/S,或者C/S架构,参考《GM∕T 0054-2018 信息系统密码应用基本要求》和《GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》》 2.设计实现的系统管理功能要简单易用; 3.用户管理采用“三员”管理; 4.设计实现的密钥管理功能应覆盖密钥的全生命周期; |
实验四 密码模块的应用
实践要求(40 分)
- 完成电子公文交换系统,系统功能,(15 分)
mindmap
root((电子公文系统))
发文
公文起草
公文查看
发文审核(审核员)
公文发送
公文查询
收文
公文签收
公文查看
公文处理
公文查询
系统管理
组织单位
用户管理
操作员(科员)
审核员(科长,处长):至少有一级审核功能
系统管理员:至少管理用户账号,组织单位功能
安全保密管理员:至少有权限管理功能,密钥管理功能
安全审计员:至少有日志查看功能
权限设置(安全保密管理员)
系统日志
数据字典(选做)
- 总体要求
- 项目类型必须是B/S或C/S架构
- 项目程序设计语言可以是C,Python,Rust等
- 三员制度是指将系统管理员、安全保密管理员和安全审计员三个角色分离,分别负责系统运行、安全保密和安全管理,相互制约,共同保障信息系统安全。三员职责
- 系统管理员
- 负责信息系统的日常维护、故障处理和升级更新。
- 确保系统正常运行,对系统资源进行合理分配。
- 负责用户账号的创建、修改和删除。
- 定期备份重要数据,确保数据安全。
- 安全保密管理员
- 负责制定和实施安全保密策略,确保信息系统安全。
- 对用户进行安全意识培训,提高用户安全防范能力。
- 监控网络安全状况,发现异常情况及时处理。
- 负责信息系统安全事件的应急响应和处理。
- 安全审计员
- 负责对信息系统进行安全审计,评估安全风险。
- 监督系统管理员和安全保密管理员的工作,确保其履行职责。
- 对信息系统安全事件进行调查,提出整改建议。
- 黄金法则(5 分 )
- 身份鉴别:口令不能存,数据库要保存加盐的SM3Hash值
- 访问控制:操作员,审核员,安全三员的权限设置
- 安全审计:至少完成日志查询功能
- 密码(15 分)
- 算法:SM2,SM3,SM4,推荐使用 Key
- 密钥管理:所有私钥,对称算法密钥等不能明存
- 系统量化评估(5分)
- 按照商用密码应用安全性评估量化评估规则,计算自己系统的得分,只计算应用和数据安全。
- 提交要求:
- 提交实践过程Markdown和转化的PDF文件
- 代码,文档托管到gitee或github等,推荐 gitclone
- 记录实验过程中遇到的问题,解决过程,反思等内容,用于后面实验报告
首先配置环境
环境
操作系统 Windows 11 ,运行环境 Python 3.12.8
额外的第三方库
pip3 install filetype
pip3 install django-sslserver
pip3 install gmssl
pip3 install secrets
pip3 install PyPDF2
http启动方法
python manage.py runsslserver
--certificate D:\ProgramData\Anaconda3\Lib\site-packages\sslserver\certs\development.crt
--key D:\ProgramData\Anaconda3\Lib\site-packages\sslserver\certs\development.key
环境配置时遇到的问题 在安装 secrets库 的时候,因为python3库中自带了secrets的库
所以步骤中命令pip3 install secrets其实被识别为安装一个外部的secrets库
因此该步骤会报错。
但是因为自带secrets库。所以可以跳过此步骤。
C:\Users\wzy>pip3 install filetype
Defaulting to user installation because normal site-packages is not writeable
Collecting filetype
Downloading filetype-1.2.0-py2.py3-none-any.whl.metadata (6.5 kB)
Downloading filetype-1.2.0-py2.py3-none-any.whl (19 kB)
Installing collected packages: filetype
WARNING: The script filetype.exe is installed in 'C:\Users\wzy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed filetype-1.2.0
C:\Users\wzy>pip3 install django-sslserver
Defaulting to user installation because normal site-packages is not writeable
Collecting django-sslserver
Downloading django_sslserver-0.22-py3-none-any.whl.metadata (1.1 kB)
Collecting Django>=1.8 (from django-sslserver)
Downloading Django-5.1.4-py3-none-any.whl.metadata (4.2 kB)
Collecting asgiref<4,>=3.8.1 (from Django>=1.8->django-sslserver)
Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting sqlparse>=0.3.1 (from Django>=1.8->django-sslserver)
Downloading sqlparse-0.5.2-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: tzdata in c:\users\wzy\appdata\local\packages\pythonsoftwarefoundation.python.3.12_qbz5n2kfra8p0\localcache\local-packages\python312\site-packages (from Django>=1.8->django-sslserver) (2024.1)
Downloading django_sslserver-0.22-py3-none-any.whl (10 kB)
Downloading Django-5.1.4-py3-none-any.whl (8.3 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3/8.3 MB 87.8 kB/s eta 0:00:00
Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading sqlparse-0.5.2-py3-none-any.whl (44 kB)
Installing collected packages: sqlparse, asgiref, Django, django-sslserver
WARNING: The script sqlformat.exe is installed in 'C:\Users\wzy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script django-admin.exe is installed in 'C:\Users\wzy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed Django-5.1.4 asgiref-3.8.1 django-sslserver-0.22 sqlparse-0.5.2
C:\Users\wzy>pip3 install django-sslserver
Defaulting to user installation because normal site-packages is not writeable
Collecting django-sslserver
Downloading django_sslserver-0.22-py3-none-any.whl.metadata (1.1 kB)
Collecting Django>=1.8 (from django-sslserver)
Downloading Django-5.1.4-py3-none-any.whl.metadata (4.2 kB)
Collecting asgiref<4,>=3.8.1 (from Django>=1.8->django-sslserver)
Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting sqlparse>=0.3.1 (from Django>=1.8->django-sslserver)
Downloading sqlparse-0.5.2-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: tzdata in c:\users\wzy\appdata\local\packages\pythonsoftwarefoundation.python.3.12_qbz5n2kfra8p0\localcache\local-packages\python312\site-packages (from Django>=1.8->django-sslserver) (2024.1)
Downloading django_sslserver-0.22-py3-none-any.whl (10 kB)
Downloading Django-5.1.4-py3-none-any.whl (8.3 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3/8.3 MB 87.8 kB/s eta 0:00:00
Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading sqlparse-0.5.2-py3-none-any.whl (44 kB)
Installing collected packages: sqlparse, asgiref, Django, django-sslserver
WARNING: The script sqlformat.exe is installed in 'C:\Users\wzy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script django-admin.exe is installed in 'C:\Users\wzy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed Django-5.1.4 asgiref-3.8.1 django-sslserver-0.22 sqlparse-0.5.2
C:\Users\wzy>pip3 install PyPDF2
Defaulting to user installation because normal site-packages is not writeable
Collecting PyPDF2
Downloading pypdf2-3.0.1-py3-none-any.whl.metadata (6.8 kB)
Downloading pypdf2-3.0.1-py3-none-any.whl (232 kB)
Installing collected packages: PyPDF2
Successfully installed PyPDF2-3.0.1
虚拟环境中
使用以下命令与选项运行
python manage.py runsslserver --certificate D:\Desktop\Document-transmission-master\.venv\Lib\site-packages\sslserver\certs\development.crt --key D:\Desktop\Document-transmission-master\.venv\Lib\site-packages\sslserver\certs\development.key
处理完成后
D:\Document-transmission-master\Document-transmission-master>.\.venv\Scripts\activate
(.venv) D:\Document-transmission-master\Document-transmission-master>
python manage.py makemigrations captcha
System check identified some issues:
WARNINGS:
user.MyUser: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the UserConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
No changes detected in app 'captcha'
(.venv) PS D:\Desktop\Document-transmission-master> python manage.py migrate
System check identified some issues:
WARNINGS:
user.MyUser: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the UserConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
Operations to perform:
Apply all migrations: admin, auth, captcha, contenttypes, index, sessions, user
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying user.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying captcha.0001_initial... OK
Applying captcha.0002_alter_captchastore_id... OK
Applying index.0001_initial... OK
Applying index.0002_auto_20210601_1010... OK
Applying index.0003_document_type... OK
Applying index.0004_document_lyrics... OK
Applying index.0005_auto_20210602_0952... OK
Applying index.0006_auto_20210602_0953... OK
Applying index.0007_document_key... OK
Applying index.0008_auto_20210605_1920... OK
Applying sessions.0001_initial... OK
Applying user.0002_auto_20210605_1743... OK
Applying user.0003_alter_myuser_first_name... OK
功能介绍
电子公文传输系统网站分为网站首页、公文列表、公文在线观看、公文批改、公文搜索和用户管理
安全性措施有:
-
身份认证(用户名-口令)
- 对口令做了加盐的sha-256哈希保护用户的个人隐私
-
访问控制(只能访问不大于自己密级的文件)
- 低密级的用户的页面中不存在高密级的文件
- 低密级的用户试图通过路由猜测文件的位置会被返回失败并记录日志
-
防御跨站脚本攻击(XSS)
- 转义特殊字符来防御XSS攻击:<转义为<, >转义为>, ’转义为' “转义为" ,& 转义为&
-
防御跨站点请求伪造(CSRF)
- 通过检查每一个 POST 请求中的密文来实现。这保证恶意用户不能“复现”一个表单并用 POST 提交到你的网页,并让一个已登录用户无意中提交该表单。恶意用户必须知道特定于用户的密文(使用 cookie)
-
防御 SQL 注入
- 查询的 SQL 代码与查询的参数是分开定义的。参数可能来自用户从而不安全,因此它们由底层数据库引擎进行转义。
-
防御访问劫持
- 在框架或 iframe 中加载资源。如果响应包含值为 SAMEORIGIN 的头, 那么只有当请求来自同一个网站时,浏览器才会在框架中加载资源
-
SSL/HTTPS
- 恶意用户不能在客户端和服务器之间嗅探验证资格或其他信息
-
Host 头部验证
- 当 DEBUG为True 和 ALLOWED_HOSTS 为空时,主机将根据 [‘.localhost’, ‘127.0.0.1’, ‘[::1]’] 进行验证,防止非预期的访问
-
Referrer 策略
- 保护用户隐私
-
会话安全
- 要求一个被部署的网页应让不受信任的用户不能访问任何子域
-
文件加密传输
-
用非对称密钥(SM2)保护对称密钥,再用对称密钥实现对文件的加解密
-
文件安全性校验
-
检查文件二进制格式,防止PE文件冒名传输 实现的功能有:
-
用户注册登录
-
文件在线查看
-
文件上传、下载
-
文件批改
-
项目支持参照博客园的一篇学长学姐的博客