2021 年教学计划

课程基本信息

  • 主讲教师:黄玮
  • 课程主题:从密码学理论到密码学的工程实践与应用
  • 上课方式:讲授+实验+大作业

结课大作业基本要求

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

结课材料,统一用 zip 格式打包(满足学校教务处要求)并发送到我邮箱( huangwei.me AT gmail.com ),邮件主题和邮件附件命名规范:姓名1_姓名2_姓名3_姓名4_姓名5_作业题目.zip姓名先后顺序按照对结课作业的贡献程度排名

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

分组完成

  • 每个小组至多允许 5
  • 每个题目的验收标准包括:
    • 完成度:假设题目要求的一级需求有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
    • 每增加完成 1 个实验 +10
  • 满分:100

结课大作业题目

分组完成

  • 基于网页的用户注册与登录系统(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),方便我查看你 你具体做了哪些改动

单兵作战

问题清单

分组完成

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

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

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

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

课程阶段计划

  • 前 4 天开发,最后 1 天集中报告

参考资料