我目前正在开发一款需要上传文件然后与不在平台上的其他人共享的软件。
这是我的加密方法:
- 用户有一个主密码,其中仅存储哈希(用于登录)
- 当用户上传文件时,将
生成一个随机密码并用它加密文件(所有客户端) - 密码将使用主密码加密,然后
与文件一起存储
与外部用户共享文件时,将执行以下步骤:
- 登录用户共享文件。在客户端使用用户密码检索和解密文件密钥
- 用户现在可以共享密码和文件,或者使用位置哈希中带有密码的文件的链接。该文件将始终在客户端解密
这种方法安全吗?另外,有没有更好的选择?
我目前正在开发一款需要上传文件然后与不在平台上的其他人共享的软件。
这是我的加密方法:
与外部用户共享文件时,将执行以下步骤:
这种方法安全吗?另外,有没有更好的选择?
这种方法安全吗?
不- 如果我了解您的威胁模型,则不会。
取决于您的威胁模型。如果您从不希望服务器(或 db 或 db-backup)操作员能够解密文件,则永远不要向服务器提供文件加密密钥。
在您的模型中,最明显的威胁是我可以暴力猜测注册用户的密码。一旦我这样做了,我就可以解密文件加密密钥和文件本身。
更新
考虑密码这种方法的威胁越来越大:
一般来说,用户派生的密码是不安全的。考虑这一点的一种方法是最终 pw 将受到损害。也许是网络钓鱼、键盘记录程序、发现它是在键盘下写的,或者是暴力破解。所以说我得到了数据库的副本,现在我只是等待 pw 一段时间(或积极尝试寻找它)。拥有它后,我会解密用户上传的所有内容,这些内容在我的副本中。
我们以不同的方式构建了这个。(以防止这种威胁)
我们的构建基于 send.firefox.com。
当文件上传时,它在客户端被加密,并存储在服务器上。加密密钥存储在生成的 URL 上,不会发送到服务器。
url 发送给收件人,url 只能使用一次,24 小时后过期。
我们对此进行了补充 - 在您上传文件后,我们会返回系统生成的密码(两个常见的五年级英语单词)。
要下载文件,您需要安全链接并知道密码。
优点是不需要任何用户注册。