作为一个学习项目,我正在尝试实现一种安全的方式,通过dropbox与朋友共享文件。(我不是在寻找现有的软件,我这么做是为了学习如何正确地完成这个任务。)
当然,我不会尝试发明自己的加密算法。
我有一个文件,我想寄给我的朋友安全。
我们的机器上都有我的项目,还有一个共享的dropbox文件夹。(虽然转移手段不相关)。
我们每个人都有一个RSA密钥,我们用一种安全的方法交换公钥(亲自通过USB棒,或者通过GPGed电子邮件)。
我会用
密钥大小为4096位的RSACryptoServiceProvider
为了这些钥匙。
(我正在考虑可能很快就会出现8192位,因为我发现测试应用程序中8-11秒的大暂停不是由RSA密钥生成或加密造成的,而是由key2string或key2base64操作造成的!)
密钥在本地存储在文本文件中。私钥是用
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文件夹中,并使用与原始文件相同的名称和扩展名。
这是因为我还没有为文件名做任何事情,甚至没有想过,建议是非常受欢迎的。
当然,在接收端,这一过程是相反的:
我做得对吗?
换句话说,你看到我这方面有什么问题吗?有失礼的,没有的,误解的吗?我正在寻找您对我的项目有经验的评价,有什么可以做得更好,不同,根本没有,另外?我认为我涵盖了汲取的经验教训中的所有内容,以及我的研究成果。
现在,我不想隐瞒沟通的存在。此外,我的应用程序中的密钥处理现在也没有兴趣,我将作为下一步(保护内存以避免转储等)进入这个过程。在我把密码弄好之后。
发布于 2013-08-22 23:36:17
您应该尝试使用一些较新的块密码来实现,例如带有1024位的Threefish。另外,尝试使用三个或更多块密码的组合,这将防止算法破坏其中之一。看看Truecrypt是如何将AES、Twofish和Serpent结合在一起的。也许可以从三个主要超级大国中各使用一个算法。一位来自俄罗斯,一位来自中国,一位来自美国。
也可以考虑加密MAC,请参阅UMAC规范。考虑使用一个NIST哈希函数竞争决赛。有了Skein,你可以有一个1024位的HMAC。
假设您的潜在对手现在或不久的将来拥有一台量子计算机,那么使用Grover的算法,您的128位加密将减少到64位。使用蛮力搜索,256位散列将减少到128位。
这篇文章不久将被一位主持人否决/删除/审查。
https://security.stackexchange.com/questions/41028
复制相似问题