【问题标题】:What encryption procedure I must use to send encrypted 'email' and 'password' values over the HTTP protocol?我必须使用什么加密程序通过 HTTP 协议发送加密的“电子邮件”和“密码”值?
【发布时间】:2011-07-05 11:18:09
【问题描述】:

我正在使用 Ruby on Rails 3,我想通过 HTTP 协议发送“电子邮件”和“密码”值(我知道,我不应该,但我需要)。我需要将用户凭据从 my client 应用程序发送到 my service 应用程序*。

我可以使用公共和私有 RSA 密钥来完成此操作,但如果是这样,我必须不要通过 HTTP 将公共密钥发送给收件人,否则黑客可以窃取密钥并解密内容。另一方面,HMAC 加密(如果我理解的话)仅适用于验证数据完整性和消息的真实性。

我听说过 AES...它对我的目的有用吗?如果是这样,我在哪里可以找到有关如何将其与 Ruby\Ruby on Rails 一起使用的教程?我“只”需要在客户端加密用户凭据并在服务器端解密。

附:我:如果我写的东西有误,请告诉我。

附: II:如果您建议其他方法,请告诉我!


更新我

*客户端是一个 Web 应用程序(一个站点 Web,例如 'www.site1.com),服务器是另一个 Web 应用程序(另一个站点 Web,例如 'www.site2.com)。


更新 II

使用 RSA 加密...

Client-I-service 步骤:

  1. 客户端生成公钥\私钥巴黎

  2. 我(真人)手动将公钥从客户端复制粘贴到服务中

  3. 客户端向服务发送包含加密用户凭据的消息(客户端不向 HTTP 请求发送\附加公钥)

  4. 服务使用公钥(只有服务知道)解密用户凭据并继续用户登录

现在,如果我发送公钥而不是执行第 2 步,因此客户端必须在第 3 步中通过 HTTP 协议发送公钥,黑客可以

  1. 截取消息

  2. 获取公钥

  3. 解密用户凭据并窃取这些凭据

那么,我应该加密用户凭据(这些是重要的私人信息)如果我将公钥发送到服务,则使用 RSA 加密

【问题讨论】:

  • HTTPS 是不可能的吗?它旨在解决加密 HTTP 传输的问题。
  • @user502052 任何加密机制都需要双方都知道密钥。使用公钥加密,一方知道“公钥”,另一方知道“私钥”。
  • @user502052 如果您可以使用 HTTPS,请继续使用它。使用带有method=post的表单来传输数据;你不需要做任何其他事情。
  • @tiagoinu 我知道。在我的情况下,我需要只有客户端和服务器知道的东西......但是我必须使用什么加密程序?这就是问题所在。
  • @user502052 您想要的任何程序。只是不要通过 HTTP 发送任何密钥。将其保存在服务器客户端的某处。

标签: ruby-on-rails ruby security ruby-on-rails-3 encryption


【解决方案1】:

带有 TLS/SSL 的 HTTPS。

http://en.wikipedia.org/wiki/Https

这是一个已解决的问题。

【讨论】:

  • 正如我在之前的评论中所说,我不能使用它。
  • @user502052 其实你说你可以使用 HTTPS。
  • 我投了赞成票,因为它正确的解决方案。否则,关键的管理问题将是谋杀。
  • 您要解决的更高层次的问题是什么?我想你迷路了。
【解决方案2】:

我可以使用公共和私有 RSA 密钥 要做到这一点,但如果是这样,我必须 不要将公钥发送给 HTTP 上的接收者,否则为 黑客可以窃取密钥并解密 内容。

1) 通过 HTTP 将公钥发送给收件人。
2) 客户端使用它来加密数据。
3) 没有黑客可以用公钥解密内容。
4)在您的服务器中,使用私钥解密内容。

示例:Encrypting Sensitive Data with Ruby (on Rails)

“在非对称密钥加密方案中,任何人都可以使用公钥加密消息,但只有配对私钥的持有者才能解密。”

编辑

Background

  • 公钥用于且仅用于加密数据。
  • 私钥用于且仅用于解密数据。

如果黑客截获了公钥,她唯一能做的就是加密数据。
甚至 HTTPS 也是如此。

Obs:只有服务器应该知道私钥。

Obs2:无论如何,尝试启用 HTTPS。它会让你的生活更轻松。

【讨论】:

  • 这是一个(非常)好主意,但是否有一些更“标准”的方式(如 HMAC、AES、...即加密数据的加密名称程序!)来完成什么我需要吗?
  • @user502052 “客户端”是用户的互联网浏览器,还是您在客户端安装了一些东西?
  • @tiagoinu 不,客户端是 web 应用程序(一个站点 web,例如 'www.site1.com),服务器是另一个 web 应用程序(另一个站点 web,例如 'www.site2 .com)。我需要将用户凭据从客户端传输到服务器。
  • @user502052 我找到了一个例子:stuff-things.net/2007/06/11/…
  • @tiagoinu 我已经阅读了那篇文章,但它使用了 RSA 加密程序。由于我在问题中解释的原因,这不是我想要使用的。我开始认为我必须在不发送公钥的情况下使用 RSA,而是将其从客户端复制粘贴到服务端。
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 2012-06-19
  • 2014-05-23
  • 2015-06-10
  • 2018-12-05
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多