我已经构建了一个CMS系统,允许用户在我的客户端内联网应用上创建和管理在线表单。
当然,表格处理的一些数据可能需要加密,例如如果系统用于构建处理工资细节或其他任何内容的表单。所以我使用AESManaged
类在进入我们的应用程序db之前对这种数据进行对称加密。
一切都很好,但现在,在发布之前,我可以对shared secret
和salt
进行指导。
我最初的想法是通过将包含加密字段的shared secret
的基于(基于GUID的)ID与(再次,基于GUID)的ID相结合来创建(动态)Form
Question
该字段是答案:
FormId:QuestionId
我的Salt
目前以相同的方式生成,只有Guids顺序颠倒了。
QuestionID:FormID.
我对这些东西不熟悉所以不确定这是一个明智的策略,还是我应该采取其他方式呢?
答案 0 :(得分:1)
盐应该是随机生成的值。其目的是使字典/暴力攻击更难以执行。维基百科有一篇关于加密盐的好文章: http://en.wikipedia.org/wiki/Salt_(cryptography)
对于共享密钥,理想情况下,它不会是未加密存储的值,而是加密的数据(例如您的ID)。通常最佳做法是由最终用户或管理员以某种方式选择密钥,以便他们可以定期轮换密钥或者如果发生某种安全漏洞。此密码密钥可以由CMS的每个用户拥有,也可以由管理员帐户拥有。如果您有非常严格的安全要求,则可以使用第三方密钥管理服务器。
如果这里的主要目标更多是混淆,并且CMS不会受到某种形式的安全审核,那么就像你最初的想法那样。它可以防止数据的随意访问,但可能不会通过对需要随机盐的正式标准的审核,一种旋转密钥的方式,以及一种方式来帮助"所有者"系统更改密码,使您自己无法访问数据。