本仓库为密码学应用实践课程的课程项目
中传放心传
,fork 自开源项目 helloflask/watchlist
对比与原开源项目的差异,可参考 https://github.com/Mr-Nobodyl/ac-web/compare/master...newcrypto
列表形式说明逐个功能要点。
- 基于网页的用户注册与登录系统(60 分)
- 使用 https 绑定证书到域名而非 IP 地址 【 PKI X.509 】(实现了一半,即绑定到了域名,但是只有服务器证书没有形成完整证书链,因此还是会有不安全提示)
- 允许用户注册到系统
- 用户名的合法字符集范围:中文、英文字母、数字
- 类似:-、_、.等合法字符集范围之外的字符不允许使用
- 用户口令长度限制在 36 个字符之内
- 对用户输入的口令进行强度校验,禁止使用弱口令
- 用户名的合法字符集范围:中文、英文字母、数字
- 使用合法用户名和口令登录系统
- 禁止使用明文存储用户口令 【 PBKDF2 散列算法 慢速散列 针对散列算法(如 MD5、SHA1 等)的攻击方法 】
- 存储的口令即使被公开,也无法还原/解码出原始明文口令
- (可选)安全的忘记口令 / 找回密码功能
- (可选)微信/微博/支付宝的 OAuth 授权登录 / 注册绑定
- (可选)双因素认证
- OTP: Google Authenticator
- SMS
- 扫码登录
- 基于网页的文件上传加密与数字签名系统(20 分)
- 限制文件大小:小于 10MB
- 限制文件类型:office 文档、常见图片类型
- 匿名用户禁止上传文件
- 对文件进行对称加密存储到文件系统,禁止明文存储文件 【 对称加密 密钥管理(如何安全存储对称加密密钥) 对称加密密文的 PADDING 问题 】
- 系统对加密后文件进行数字签名(我们对明文进行了hash,然后保存密文,从而可以保证明文未篡改)
- (可选)文件秒传:服务器上已有的文件,客户端可以不必再重复上传了
- 基于网页的加密文件下载与解密(20 分)
- 提供匿名用户加密后文件和关联的数字签名文件的下载
- 客户端对下载后的文件进行数字签名验证 【 非对称(公钥)加密 数字签名 】(应该说我们只实现了消息验证,没有实现数字签名)
- 客户端对下载后的文件可以解密还原到原始文件 【 对称解密 密钥管理 】
- 提供已登录用户解密后文件下载
- 下载 URL 设置有效期(限制时间或限制下载次数),过期后禁止访问 【 数字签名 消息认证码 Hash Extension Length Attack Hash 算法与 HMAC 算法的区别与联系 】
- 提供静态文件的散列值下载,供下载文件完成后本地校验文件完整性 【 散列算法 】
- 提供匿名用户加密后文件和关联的数字签名文件的下载
- 使用X.509公钥证书实现https通信
- 对文件进行对称加密
- 对文件加密的对称密钥采用RSA加密,实现密钥的安全管理
- 正则表达式校验口令要求
- 哈希存储用户口令,避免明文存储口令
- HMAC验证文件完整性(只能验证文件上传时和下载时内容完整性,没有对属主身份的验证)
- web框架使用flask
快速安装与使用方法说明。
clone:
$ git clone https://github.com/Mr-Nobodyl/ac-web.git
$ cd ac-web
激活虚拟环境 & 安装依赖:
$ python3 -m venv env # use `python ...` on Windows
$ source env/bin/activate # use `env\Scripts\activate` on Windows
(env) $ pip install -r requirements.txt
初始化数据库并生成测试数据:
(env) $ flask forge # 初始用户名为: CUCer 密码: 7q:N37mayrMgiH!
(env) $ flask run
百度网盘链接 提取码:7caj
This project is licensed under the MIT License (see the LICENSE file for details).