Ruby on rails 如何存储密码短语以解密安全数据?
在rails应用程序中,我有一个使用公钥解密数据的密码短语 当用户试图进入特定菜单(例如“发票”)以解密敏感数据时,我会向用户询问“密码短语” 不建议将密码短语直接存储到用户会话/cookie(出于安全原因) 那么,在没有安全漏洞的情况下存储此密码短语的最佳方法是什么呢?假设:Ruby on rails 如何存储密码短语以解密安全数据?,ruby-on-rails,security,cookies,encryption,Ruby On Rails,Security,Cookies,Encryption,在rails应用程序中,我有一个使用公钥解密数据的密码短语 当用户试图进入特定菜单(例如“发票”)以解密敏感数据时,我会向用户询问“密码短语” 不建议将密码短语直接存储到用户会话/cookie(出于安全原因) 那么,在没有安全漏洞的情况下存储此密码短语的最佳方法是什么呢?假设: 您的要求是,用户可以输入一次密码,然后在会话的剩余时间访问所有数据 每个帐户(即多张发票)都有大量数据需要加密 我会做如下的事情: 使用安全、随机密钥(数据密钥)和对称密码(例如AES)加密附加到用户帐户的所有数据
- 您的要求是,用户可以输入一次密码,然后在会话的剩余时间访问所有数据
- 每个帐户(即多张发票)都有大量数据需要加密
- 使用安全、随机密钥(数据密钥)和对称密码(例如AES)加密附加到用户帐户的所有数据
- 为每个帐户提供一个公钥/私钥(帐户密钥),并使用用户选择的密码短语
- 使用公共帐户密钥加密数据密钥,并将其存储
- 创建应用程序范围的安全随机密钥(会话密钥)
- 当用户在密码短语中输入密钥时,使用它来解密他们的数据密钥,然后立即使用会话密钥对其重新加密,并将其存储在会话或cookie中。在会话中单独存储一个时间戳,注明密钥加密的时间,并通过创建时间戳、加密数据密钥和会话密钥的散列来对此进行签名
- 将加密的数据密钥、时间戳和签名散列从会话中拉出。根据时间戳、加密数据密钥和会话密钥重新计算哈希,并检查它是否与会话中的哈希匹配(即,没有任何内容被篡改)
- 将时间戳与“现在”进行比较,并判断这是否是最近的,你会相信它(也就是说它没有被中间人攻击)。
- 如果且仅当这是确定的,则使用会话密钥解密数据密钥
- 使用数据密钥对数据进行解密
希望有帮助。我认为最好的方法是使用加密的cookie存储。您可以在本文中找到更多关于这方面的信息: 加密cookie存储和
,项目的github。你能解释一下你想把它存储多久吗?您是否需要跨请求或更长的时间来存储它?他们需要取消加密所有数据,还是一次只加密一点?我需要存储我的密码短语accross请求。当用户会话过期时,用户需要在表单中再次输入正确的密码短语以访问敏感数据。如果这是rails web应用程序,用户是否通过不安全的http连接发送其密码短语?如果是这样,攻击者可以捕获它并模拟用户。为什么不能用https保护此通信?https不能解决此问题。我的密码短语在用户的cookie上没有任何安全性=>这就是问题所在