首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计一种加密文件共享协议

设计一种加密文件共享协议
EN

Security用户
提问于 2013-08-21 22:29:04
回答 1查看 2.3K关注 0票数 6

作为一个学习项目,我正在尝试实现一种安全的方式,通过dropbox与朋友共享文件。(我不是在寻找现有的软件,我这么做是为了学习如何正确地完成这个任务。)

当然,我不会尝试发明自己的加密算法。

我有一个文件,我想寄给我的朋友安全。

我们的机器上都有我的项目,还有一个共享的dropbox文件夹。(虽然转移手段不相关)。

我们每个人都有一个RSA密钥,我们用一种安全的方法交换公钥(亲自通过USB棒,或者通过GPGed电子邮件)。

我会用

密钥大小为4096位的RSACryptoServiceProvider

为了这些钥匙。

(我正在考虑可能很快就会出现8192位,因为我发现测试应用程序中8-11秒的大暂停不是由RSA密钥生成或加密造成的,而是由key2stringkey2base64操作造成的!)

密钥在本地存储在文本文件中。私钥是用

AESCryptoServiceProvider在CBC模式下,PKCS7填充,256位.

该IV将完全随机产生由CSP。

对称密钥将从密码派生为

Rfc2898DeriveBytes (==PBKDF2),1000次迭代,来自RNGCryptoServiceProvider的盐。

(盐长==最终键长)

该文件是加密的,再次使用

AESCryptoServiceProvider在CBC模式下,PKCS7填充,256位.

Key和IV将是完全随机的每个文件,由CSP本身产生。

IV将加到加密的文件数据中。

此包将使用

使用随机密钥的HMACSHA512。

我不知道是使用RNGCSP还是使用HMAC内部randomkeygen,因为直到现在,我才能够知道这个内部方法有多安全。(这是NIST批准的吗?)

HMAC将加到IV:cryptedfile包中。

HMAC-密钥和AES-密钥将(单独)用我朋友的公钥加密,并以这种加密形式添加到包中:

cryptedAESKey:cryptedHMACKey:HMAC:IV:cryptedfile

此包将以二进制形式保存到共享的DropBox文件夹中,并使用与原始文件相同的名称和扩展名。

这是因为我还没有为文件名做任何事情,甚至没有想过,建议是非常受欢迎的。

当然,在接收端,这一过程是相反的:

  1. 输入密码以解锁私钥
  2. 解密HMAC和AES密钥
  3. 认证文件
  4. 使用密钥和iv解密
  5. 保存为原始文件名

我做得对吗?

换句话说,你看到我这方面有什么问题吗?有失礼的,没有的,误解的吗?我正在寻找您对我的项目有经验的评价,有什么可以做得更好,不同,根本没有,另外?我认为我涵盖了汲取的经验教训中的所有内容,以及我的研究成果。

现在,我不想隐瞒沟通的存在。此外,我的应用程序中的密钥处理现在也没有兴趣,我将作为下一步(保护内存以避免转储等)进入这个过程。在我把密码弄好之后。

EN

回答 1

Security用户

发布于 2013-08-22 23:36:17

您应该尝试使用一些较新的块密码来实现,例如带有1024位的Threefish。另外,尝试使用三个或更多块密码的组合,这将防止算法破坏其中之一。看看Truecrypt是如何将AES、Twofish和Serpent结合在一起的。也许可以从三个主要超级大国中各使用一个算法。一位来自俄罗斯,一位来自中国,一位来自美国。

也可以考虑加密MAC,请参阅UMAC规范。考虑使用一个NIST哈希函数竞争决赛。有了Skein,你可以有一个1024位的HMAC。

假设您的潜在对手现在或不久的将来拥有一台量子计算机,那么使用Grover的算法,您的128位加密将减少到64位。使用蛮力搜索,256位散列将减少到128位。

这篇文章不久将被一位主持人否决/删除/审查。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/41028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档