ShadowThakur/ShieldDrive

GitHub: ShadowThakur/ShieldDrive

ShieldDrive 是一个基于零知识架构的客户端加密云存储平台,通过浏览器端 AES-256-GCM 加密确保服务器永远无法访问用户明文文件。

Stars: 0 | Forks: 0

# ShieldDrive **一个具有客户端加密功能的安全零知识云存储平台** ShieldDrive 是一个安全的云存储平台,它使用客户端 AES-256-GCM 加密来实现零知识架构,确保文件在离开用户设备之前就被加密。 文件在离开您的设备之前,会先在浏览器中进行加密。服务器仅存储密文——它永远无法访问您的明文数据或加密密钥。 [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](#license) [![Python](https://img.shields.io/badge/python-3.14-blue.svg)](#technology-stack) [![Django](https://img.shields.io/badge/django-6.0-092E20.svg)](#technology-stack) [功能](#features) • [架构](#architecture) • [加密工作流](#encryption-workflow) • [安装说明](#installation-guide) • [路线图](#future-roadmap)
## 目录 - [项目描述](#project-description) - [为什么选择 ShieldDrive?](#why-shielddrive) - [问题陈述](#problem-statement) - [功能](#features) - [架构](#architecture) - [加密工作流](#encryption-workflow) - [安全模型](#security-model) - [技术栈](#technology-stack) - [文件夹结构](#folder-structure) - [安装指南](#installation-guide) - [环境变量](#environment-variables) - [截图](#screenshots) - [未来路线图](#future-roadmap) - [已知局限性](#known-limitations) - [贡献](#contributing) - [许可证](#license) - [作者](#author) ## 项目描述 ShieldDrive 是一个建立在**零知识架构**之上的云存储平台。与在服务端(上传后)加密文件的传统云存储服务不同,ShieldDrive 使用 AES-256-GCM 执行所有的加密和解密操作,完全**在浏览器客户端进行**。明文文件永远不会离开用户的设备,服务器——包括其运营者——也无法访问原始内容。 使用 Django 构建的后端负责处理身份验证、加密文件存储编排以及元数据管理,而原始的加密数据块则被持久化存储在 AWS S3 中。 ## 为什么选择 ShieldDrive? 大多数云存储提供商在技术上都可以访问用户数据,因为加密是在文件到达其服务器之后发生的。这是一个结构性的信任问题,而不仅仅是策略问题——即使是善意的提供商,也仅需一次配置错误、数据泄露或传票,就会暴露明文数据。 ShieldDrive 完全将服务器移出了信任边界: - 服务器**永远看不到明文文件**。 - 服务器**永远看不到加密密钥**。 - 即使拥有对数据库和 S3 存储桶的完全访问权限,攻击者(或提供商本身)也只能获得密文。 构建此项目是为了演示零知识原则的实用、可运行的实现,而不仅仅是在概念上描述它们。 ## 问题陈述 传统的云存储系统通常在数据**静止时**进行加密,此时文件已经以明文形式到达了提供商的基础设施。这意味着: - 服务提供商理论上可以检查、记录或泄露用户文件。 - 服务端的数据泄露会直接暴露明文数据。 - 合规性和隐私保证完全依赖于对提供商内部控制的信任。 **ShieldDrive 的方法:** 在文件传输之前就在客户端对其进行加密。服务器的职责简化为存储和检索不透明的密文以及管理受访问控制的元数据——从架构上讲,它无法读取文件内容。 ## 功能 ### 核心功能 - 基于电子邮件验证流程的用户注册 - 使用基于 Django 会话的身份验证进行登录和注销 - 通过电子邮件重置密码 (Gmail SMTP) - 在传输之前进行客户端加密的文件上传 - 进行客户端解密的文件下载 - 列出已上传文件及其元数据的个人仪表板 - 安全的元数据管理(文件名、大小、IV、时间戳),与文件内容解耦 ### 存储与基础设施 - 使用 AWS S3 作为加密对象存储后端 - 零知识存储模型——服务器仅持久化存储密文 - 基于环境变量配置所有的密钥和凭证 ## 架构 ### 整体系统架构 ``` flowchart TD A[Browser] --> B[Client-side Encryption Layer] B --> C[Django Backend] C --> D[(AWS S3)] C --> E[(SQLite - Metadata)] style A fill:#1f6feb,stroke:#0d1117,color:#fff style B fill:#238636,stroke:#0d1117,color:#fff style C fill:#8957e5,stroke:#0d1117,color:#fff style D fill:#d29922,stroke:#0d1117,color:#fff style E fill:#d29922,stroke:#0d1117,color:#fff ``` 浏览器执行所有的加密操作。Django 后端永远不会接收明文文件——它负责对请求进行身份验证、管理元数据,并协调 AWS S3 中的存储。 ### 上传工作流 ``` flowchart TD A[User] --> B[Choose File] B --> C[Generate AES-256 Key] C --> D[Generate Random IV] D --> E[Encrypt File using AES-256-GCM] E --> F[Upload Ciphertext to Backend] F --> G[Store Metadata in Database] F --> H[(AWS S3)] style A fill:#1f6feb,stroke:#0d1117,color:#fff style E fill:#238636,stroke:#0d1117,color:#fff style H fill:#d29922,stroke:#0d1117,color:#fff ``` ### 下载工作流 ``` flowchart TD A[(AWS S3)] --> B[Download Ciphertext] B --> C[Decrypt in Browser] C --> D[Recover Original File] style A fill:#d29922,stroke:#0d1117,color:#fff style C fill:#238636,stroke:#0d1117,color:#fff style D fill:#1f6feb,stroke:#0d1117,color:#fff ``` ## 加密工作流 ShieldDrive 使用 **AES-256-GCM**,这是一种经过身份验证的加密模式,可同时提供机密性和完整性验证。 | 步骤 | 描述 | |------|-------------| | 1. 密钥生成 | 在浏览器中为加密操作生成 AES-256 对称密钥。 | | 2. IV 生成 | 为每个文件生成加密安全的随机初始化向量 (IV),以确保唯一性。 | | 3. 加密 | 通过 Web Crypto API,在客户端使用 AES-256-GCM 对文件进行加密。 | | 4. 传输 | 仅将生成的密文(以及非机密的 IV)传输到 Django 后端。 | | 5. 存储 | 后端将密文存储在 AWS S3 中,并将关联的元数据持久化存储在数据库中。 | | 6. 检索 | 下载时,从 S3 获取密文,并在浏览器内完全解密还原为原始文件。 | ## 安全模型 | 层 | 机制 | |-------|-----------| | 文件机密性 | 上传前进行客户端 AES-256-GCM 加密 | | 加密唯一性 | 为每个文件/上传生成随机 IV | | 身份验证 | 具有安全密码哈希的 Django 内置身份验证系统 | | 会话安全 | 带有 CSRF 保护的 Django 会话框架,应用于所有状态更改请求 | | 密钥管理 | 所有凭证和密钥均通过环境变量 (`python-dotenv`) 加载,绝不硬编码 | | 对象存储 | AWS S3,通过 IAM 凭证限制访问 | | 传输 | 生产环境要求使用 HTTPS,以保护传输中的密文和元数据 | **威胁模型摘要:** ShieldDrive 假设服务器、数据库和对象存储层可能被入侵或检查,并在设计上确保此类入侵只能获取密文。主要的信任依赖于交付给浏览器的客户端代码的完整性。 ## 技术栈 | 类别 | 技术 | |----------|------------| | 后端框架 | Django 6.0 | | 语言 | Python 3.x | | 前端 | HTML, CSS, JavaScript | | 数据库 | SQLite | | 对象存储 | AWS S3 | | 加密 | AES-256-GCM (Web Crypto API, 客户端) | | 邮件发送 | Gmail SMTP | | 配置 | python-dotenv | ## 文件夹结构 ``` ShieldDrive/ ├── accounts/ ├── core/ ├── shielddrive/ ├── manage.py ├── requirements.txt ├── .env.example ├── .gitignore └── README.md ``` ## 安装指南 ### 前置条件 - Python 3.x - pip - 带有 S3 存储桶的 AWS 账户 - 带有应用密码的 Gmail 账户 (用于 SMTP) ### 步骤 ``` # 1. Clone the repository git clone https://github.com/ShadowThakur/ShieldDrive.git cd ShieldDrive # 2. 创建并激活 virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # 3. Install dependencies pip install -r requirements.txt # 4. 配置环境变量 cp .env.example .env # 使用你的实际 credentials 编辑 .env # 5. Apply database migrations python manage.py migrate # 6. 创建 superuser(可选,用于 admin access) python manage.py createsuperuser # 7. 运行开发服务器 python manage.py runserver ``` 应用程序将在 `http://127.0.0.1:8000/` 上可用。 ## 环境变量 根据 `.env.example` 在项目根目录中创建一个 `.env` 文件: ``` # Django SECRET_KEY=your-django-secret-key DEBUG=True ALLOWED_HOSTS=127.0.0.1,localhost # AWS S3 AWS_ACCESS_KEY_ID=your-aws-access-key AWS_SECRET_ACCESS_KEY=your-aws-secret-key AWS_STORAGE_BUCKET_NAME=your-s3-bucket-name AWS_S3_REGION_NAME=your-aws-region # Email (Gmail SMTP) EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_USE_TLS=True EMAIL_HOST_USER=your-email@gmail.com EMAIL_HOST_PASSWORD=your-gmail-app-password ``` ## 项目预览 特在此存储库中省略截图。 ShieldDrive 的重点在于其安全架构、客户端加密工作流和零知识实现,而不是其用户界面。 按照上述安装指南,可以在本地运行该应用程序。 ## 未来路线图 - [ ] 双因素身份验证 (2FA) - [ ] 通过具有有效期的、受访问控制的链接进行文件共享 - [ ] 支持大文件的分块上传 - [ ] 从用户密码短语 (PBKDF2/Argon2) 进行客户端密钥派生,而不是按会话生成密钥 - [ ] 针对文件访问事件的审计日志 - [ ] 对于生产环境部署,从 SQLite 迁移到 PostgreSQL - [ ] 用于本地开发的 Docker Compose 设置 - [ ] 自动化 CI 流水线(linting、测试) ## 已知局限性 - SQLite 用于元数据存储,这适用于开发,但不建议用于生产/多用户规模。 - 密钥管理目前依赖于客户端会话处理;目前还没有独立于服务器的持久密钥恢复机制——丢失密钥意味着失去对文件的访问权限。 - 目前未包含自动化测试套件。 - 身份验证端点上未实施速率限制。 - 该项目尚未经过正式的第三方安全审计;应将其视为作品集/学习实现,而不是经过生产强化的系统。 ## 许可证 该项目基于 **Apache License 2.0** 授权。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## 作者 **Shivam Kumar Singh (ShadowThakur)** 作为作品集项目设计和开发,旨在演示使用零知识原则和客户端加密的安全云存储架构。 GitHub: https://github.com/ShadowThakur LinkedIn: https://linkedin.com/in/ShadowThakur Email: shivamsinghsingh977@gmail.com
标签:Django, Syscall, Web开发, 云存储, 多模态安全, 客户端加密, 密码学应用, 数据加密, 数据可视化, 端到端加密