Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何存储密码短语以解密安全数据?_Ruby On Rails_Security_Cookies_Encryption - Fatal编程技术网

Ruby on rails 如何存储密码短语以解密安全数据?

Ruby on rails 如何存储密码短语以解密安全数据?,ruby-on-rails,security,cookies,encryption,Ruby On Rails,Security,Cookies,Encryption,在rails应用程序中,我有一个使用公钥解密数据的密码短语 当用户试图进入特定菜单(例如“发票”)以解密敏感数据时,我会向用户询问“密码短语” 不建议将密码短语直接存储到用户会话/cookie(出于安全原因) 那么,在没有安全漏洞的情况下存储此密码短语的最佳方法是什么呢?假设: 您的要求是,用户可以输入一次密码,然后在会话的剩余时间访问所有数据 每个帐户(即多张发票)都有大量数据需要加密 我会做如下的事情: 使用安全、随机密钥(数据密钥)和对称密码(例如AES)加密附加到用户帐户的所有数据

在rails应用程序中,我有一个使用公钥解密数据的密码短语

当用户试图进入特定菜单(例如“发票”)以解密敏感数据时,我会向用户询问“密码短语”

不建议将密码短语直接存储到用户会话/cookie(出于安全原因)

那么,在没有安全漏洞的情况下存储此密码短语的最佳方法是什么呢?

假设:

  • 您的要求是,用户可以输入一次密码,然后在会话的剩余时间访问所有数据
  • 每个帐户(即多张发票)都有大量数据需要加密
我会做如下的事情:

  • 使用安全、随机密钥(数据密钥)和对称密码(例如AES)加密附加到用户帐户的所有数据
  • 为每个帐户提供一个公钥/私钥(帐户密钥),并使用用户选择的密码短语
  • 使用公共帐户密钥加密数据密钥,并将其存储
  • 创建应用程序范围的安全随机密钥(会话密钥)
  • 当用户在密码短语中输入密钥时,使用它来解密他们的数据密钥,然后立即使用会话密钥对其重新加密,并将其存储在会话或cookie中。在会话中单独存储一个时间戳,注明密钥加密的时间,并通过创建时间戳、加密数据密钥和会话密钥的散列来对此进行签名
当他们想查看一些数据时,那么:

  • 将加密的数据密钥、时间戳和签名散列从会话中拉出。根据时间戳、加密数据密钥和会话密钥重新计算哈希,并检查它是否与会话中的哈希匹配(即,没有任何内容被篡改)
  • 将时间戳与“现在”进行比较,并判断这是否是最近的,你会相信它(也就是说它没有被中间人攻击)。
  • 如果且仅当这是确定的,则使用会话密钥解密数据密钥
  • 使用数据密钥对数据进行解密
如果需要额外的安全性,可以定期旋转会话密钥,以确保即使攻击者设法从某人的会话中获取加密数据类型,他们也必须同时危害应用程序本身,以获取相关会话密钥

对于您的需求来说,这可能过于复杂。如果不是,那么请记住我不是密码学家,所以使用它的风险由你自己承担,如果你担心的话,找一个真正知道他们在这里做什么的人


希望有帮助。

我认为最好的方法是使用加密的cookie存储。您可以在本文中找到更多关于这方面的信息:

加密cookie存储和


,项目的github。

你能解释一下你想把它存储多久吗?您是否需要跨请求或更长的时间来存储它?他们需要取消加密所有数据,还是一次只加密一点?我需要存储我的密码短语accross请求。当用户会话过期时,用户需要在表单中再次输入正确的密码短语以访问敏感数据。如果这是rails web应用程序,用户是否通过不安全的http连接发送其密码短语?如果是这样,攻击者可以捕获它并模拟用户。为什么不能用https保护此通信?https不能解决此问题。我的密码短语在用户的cookie上没有任何安全性=>这就是问题所在