2022 年教学计划

课程基本信息

  • 主讲教师:黄玮
  • 课程主题:从密码学理论到密码学的工程实践与应用
  • 实验准备:自备电脑,自行安排时间和地点
  • 上课方式:讲授结课方式1次+自行组队完成大作业

课程阶段计划

作品提交 DDL:2022.8.15 23:59:59。

结课大作业基本要求

分组完成单兵作战 至少「二选一」,鼓励学有余力的同学「多劳多得」。

  • 每个小组至多允许 6 人,建议 4 人最佳;
  • 分组完成 作业过程中产生的文档、代码均可以采用 Github 的方式管理(这是一个鼓励和支持的作业完成过程建议,有助于提高印象分哦~);
  • 结课材料,统一用zip格式打包并提交到学校畅课平台指定作业模块(后续在课程微信群、畅课平台课程公告模块进行通知,注意查看)。附件命名规范:姓名1_姓名2_姓名3_姓名4_姓名5_姓名6_作业题目.zip
    • 姓名先后顺序按照对结课作业的贡献程度排名;
    • 每人 独立完成一份 「创新实践能力团队赛」总结技术报告;
      • markdown 书写,建议参照 基于 Markdown 的中文文档排版规范 对实验报告进行排版;
      • 内容重点强调:个人在本次大作业中的主要贡献;完成了哪些自认为有技术含量的工作;印象深刻的一些 bug 和自己的解决方法;
    • 附件大小请控制在 10MB 以内,删除不必要的临时文件、视频文件、开发和测试过程中上传的测试文件等;
    • 视频文件可以上传到第三方视频网站,然后在总结报告文档中附上视频链接即可,以减少压缩包大小;
    • 已在 Github 上传所有文件的小组,在实验报告中同样需要附上项目仓库地址备查。

附件大小请控制在 10MB 以内,删除不必要的临时文件、视频文件、开发和测试过程中上传的测试文件等。

推荐的实验报告目录组织形式

├── 0_张三
│   └── README.md
├── 1_李四
│   └── README.md
├── 2_王五
│   └── README.md
├── 3_赵六
│   └── README.md
└── README.md
  • 如果是选择 单兵作战 的同学,则无需创建以自己姓名命名的子目录。
  • 如果是选择在 公开仓库 提交作品,则无需实名命名上述子目录,可以使用自己的 网络 ID ,但是在打包提交到畅课作业区的最终实验报告目录里需要使用实名。
  • 根目录下的 README.md 内容统一要求如下,示范 READMEac-demo
# 作品名

> 一句话简介。

## 功能清单

> 列表形式说明逐个功能要点。

## 本项目用到的关键技术

> 本作品中包含的密码学理论与技术示范应用要点说明,列表形式、逐个要点说明。

## 快速上手体验

> 快速安装与使用方法说明。

## 演示

> 课程结题报告与系统功能操作视频演示地址。

## 附录-1 (可选)


## 附录-2 (可选)

分组完成

  • 每个小组至多允许 6
  • 每个题目的验收标准包括:
    • 完成度:假设题目要求的一级需求有10条,最终完成了8条,则完成度=8/10*100%=80%
    • 完成质量:声称已完成的需求,经过检查后认定实际的完成质量
  • 大作业完成过程请在 Github 上建立小组的项目仓库,每个组员的日常完成进度通过 git 提交历史来体现。
    • 如果是 私有 仓库,请邀请 c4pr1c3 成为你们小组建立的仓库的协作者(Collaborators);
    • 如果是 Fork 样例仓库,则无需做特别设置;
    • 不要在你提交的任何材料中出现任何重要个人隐私信息,包括但不限于:姓名、学号、密码等;
    • 作业提交内容包括但不限于:代码、markdown 格式的文档、图片等;
    • 组长创建仓库,组员可以在 Github 后台添加到 Collaborators 或通过 Fork + PR 的方式来实现协同开发和编辑;
    • 不建议直接使用 Github 官方客户端,推荐使用 git 命令行客户端;
    • commit 注释应该清晰明了,说明本次提交的目的,不要搞出一堆的 Add files via upload
    • 禁止提交:临时文件(文本编辑器产生的临时文件、备份文件等)、中间结果文件(.exe、.pdb、.log等都是典型代表)
    • 图片应在保持清晰度、不影响阅读的前提下进行必要的尺寸裁剪和图像压缩以减少图片文件占用存储空间大小;
  • 课程总评分数=出勤 * 10% + 系统实现(代码)* 60% + 课题结题报告 * 30%

单兵作战

  • 从推荐实验中至少选择并完成 1 个,建议选择 2 个或更多 (10 分)
  • 仿照 对称加密 ECB 模式的漏洞利用综合实验指南Padding Oracle Attack 实验指南 的形式编写实验报告 ( 70 分)
    • 排版质量 10%
    • 内容专业性程度 20%
    • 实验操作步骤详细程度(操作效果截图、代码) 60%
    • 参考文献引用标注 10%
  • 除了按照上述实验官方指南中的方法和工具完成实验之外,再使用另一种编程语言或工具完成实验 (10 分)
  • 附加分
    • 编写「自动化漏洞利用脚本」+10
    • 完成 3 个或以上实验 +10
  • 最终成绩:上述分项得分累加 x 80% (88 分封顶)

结课大作业题目

分组完成【候选】题目-1 “中传放心传”

  • 基于网页的用户注册与登录系统(60分)
    • 使用https绑定证书到域名而非IP地址 【 PKI X.509
    • 允许用户注册到系统
      • 用户名的合法字符集范围:中文、英文字母、数字
        • 类似:-、_、.等合法字符集范围之外的字符不允许使用
      • 用户口令长度限制在36个字符之内
      • 对用户输入的口令进行强度校验,禁止使用弱口令
    • 使用合法用户名和口令登录系统
    • 禁止使用明文存储用户口令 【 PBKDF2 散列算法 慢速散列 针对散列算法(如MD5、SHA1等)的攻击方法
      • 存储的口令即使被公开,也无法还原/解码出原始明文口令
    • (可选)安全的忘记口令 / 找回密码功能
    • (可选)微信/微博/支付宝的OAuth授权登录 / 注册绑定
    • (可选)双因素认证
      • OTP: Google Authenticator
      • Email
      • SMS
      • 扫码登录
  • 基于网页的文件上传加密与数字签名系统(20分)
    • 已完成《基于网页的用户注册与登录系统》所有要求
    • 限制文件大小:小于 10MB
    • 限制文件类型:office文档、常见图片类型
    • 匿名用户禁止上传文件
    • 对文件进行对称加密存储到文件系统,禁止明文存储文件 【 对称加密 密钥管理(如何安全存储对称加密密钥) 对称加密密文的PADDING问题
    • 系统对加密后文件进行数字签名 【 数字签名(多种签名工作模式差异)
    • (可选)文件秒传:服务器上已有的文件,客户端可以不必再重复上传了
  • 基于网页的加密文件下载与解密(20分)
    • 已完成《基于网页的文件上传加密与数字签名系统》所有要求
    • 提供匿名用户加密后文件和关联的数字签名文件的下载
      • 客户端对下载后的文件进行数字签名验证 【 非对称(公钥)加密 数字签名
      • 客户端对下载后的文件可以解密还原到原始文件 【 对称解密 密钥管理
    • 提供已登录用户解密后文件下载
    • 下载URL设置有效期(限制时间或限制下载次数),过期后禁止访问 【 数字签名 消息认证码 Hash Extension Length Attack Hash算法与HMAC算法的区别与联系
    • 提供静态文件的散列值下载,供下载文件完成后本地校验文件完整性 【 散列算法

可以基于 PHP 版实现的课程系统半成品源代码Python 版实现的课程系统半成品源代码 进行「二次开发」,也可以自己从零开始开发。编程语言技术栈没有限制。“中传放心传”不是限定的题目,仅作示例,同学们可以自拟具体作品名。

前方重要提醒

如果基于以上代码进行「二次开发」,必须采用 fork + PR 的方式提交最终完成的系统源代码(第三方依赖的源代码不要 push 到 github),方便我查看你 你具体做了哪些改动

分组完成【候选】题目-2 “开放式命题”

全国大学生信息安全竞赛 作品赛 的要求为基础(开放式自主命题,自主设计),在你们的小组作品中需要仿照上述“中传放心传”设计的密码学相关技术要点应用,在 自命题、自主设计 的作品中至少包含 6 个以上的密码学相关理论或关键技术的示范应用。

单兵作战

问题清单

分组完成

请通过屏幕操作录像的方式,展示你们小组完成的系统,并 尽力而为 在录像中结合操作演示回答以下每一个问题。

录像请上传到第三方视频网站(首选腾讯视频,便于优秀作品可以直接在微信公众号推送中嵌入),务必避免在录像中泄漏个人隐私信息,在屏幕操作录像过程中建议关闭即时通信工具等有可能会弹出通知窗口的应用程序,保证录像质量和效果。

  • 请总结你们的所有已完成功能点
  • X.509证书中各个字段含义、用途解释说明。
  • WEB服务器使用的证书和CA使用的证书有什么区别和联系?
  • 简述你们的口令安全存储策略。
  • 你们是如何实现弱口令检测的?
  • 你们是如何实现安全的文件上传的?
  • 请展示并说明你们的
    • 文件加密代码片段
    • 文件解密代码片段
    • 文件签名代码片段
    • 文件签名验证代码片段
    • 文件完整性验证代码片段
  • 同一个用户的不同文件是否使用相同的对称加密密钥?如果是,请说明其中存在的安全风险。如果否,请结合代码展示你们的文件对称加密密钥的存储和提取使用策略
  • 你们的文件下载过期策略是如何设计并实现的?
  • 常见对称加密工作模式有哪些?各自应用场景、优缺点说明。
  • 简述RSA加密算法和RSA签名算法之间的关系?
  • 通过 PHP / Python 实现文件散列值计算有哪些方法?
  • 你们是如何实现匿名用户禁止上传文件功能的?
  • 请展示并说明你们的数据库表结构设计

在课程结题报告中附上在线视频链接即可。

参考资料