【问题标题】:Does TLS ensure message integrity and confidentiality of data transmission in a RESTful Java enterpriseTLS 是否确保 RESTful Java 企业中数据传输的消息完整性和机密性
【发布时间】:2013-08-25 17:53:49
【问题描述】:

我想根据OWASP Web Service Security 应用网络服务安全性。因此,我偶然发现了两点:

  1. Message Integrity
  2. Message Confidentiality

到目前为止,只有一个 RESTful 服务可以由客户端直接访问。对于每个请求,客户端都需要通过服务器进行身份验证。所有通信都通过 TLS 保护。我现在不确定 Message Integrity 因为我不明白这句话:

使用公钥加密时,加密确实可以保证机密性,但不能保证完整性,因为 接收者的公钥是公开的。出于同样的原因,加密确实 不确保发件人的身份。

是否还要求数据由客户端签名以确保消息完整性? TLS 只是点对点,代理呢?

关于Message Confidentiality,我的理解如下。

  1. 使用 TLS 确保通过网络传输消息的机密性。
  2. 使用对称加密对传输的数据进行加密。
  3. 加密后的数据存储在数据库中。

我没听错吗?

【问题讨论】:

    标签: security ssl data-integrity confidentiality


    【解决方案1】:

    来自TLS specification:

    TLS 协议的主要目标是提供隐私和数据 两个通信应用程序之间的完整性。 [...]

    • 连接是私有的。对称密码学用于 数据加密(例如,DES [DES]、RC4 [SCH] 等)。 [...]

    • 连接可靠。消息传输包括消息 使用密钥 MAC 进行完整性检查。安全散列函数(例如, SHA、MD5 等)用于 MAC 计算。记录 协议可以在没有 MAC 的情况下运行,但一般只用于 此模式,而另一个协议正在使用记录协议作为 用于协商安全参数的传输。

    所以,是的,只要正确使用,TLS 将在传输过程中为您提供消息的完整性和机密性。

    特别是,客户端需要验证证书以确保它与正确的服务器通信(验证证书是真实的并且由受信任的一方颁发,并且颁发给它打算联系的主机名)。

    • 使用 TLS 确保通过网络传输消息的机密性。
    • 使用对称加密对传输的数据进行加密。

    TLS 将通过加密提供机密性。 (您需要使用适当的密码套件,尤其是匿名密码套件或密码套件不会加密,但默认情况下总是如此。)

    • 加密后的数据存储在数据库中。

    如果您想加密数据库中的数据,那就是另外一个问题了。 TLS 仅在传输过程中为您提供完整性和机密性。一旦它被您的网络应用程序处理,它就会被解密。

    TLS 只是点对点,代理呢?

    HTTP 代理仅按原样中继 TLS 流量,无需查看或更改它。 (有些代理服务器可以拦截流量,但是证书验证会失败,除非你忘记检查证书。)

    【讨论】:

      【解决方案2】:

      TLS 是否确保消息的完整性和数据传输的机密性

      是的。

      在 RESTful Java 企业中

      无关紧要。答案仍然是肯定的。

      使用公钥加密时,加密确实可以保证机密性,但不能保证完整性,因为接收者的公钥是公开的。出于同样的原因,加密并不能确保发送者的身份。

      无关紧要。 TLS 不是公钥加密。在这种情况下,我真的看不出这些言论的意义,但它们是不正确的。单独的加密形式无法保证完整性或身份:您需要额外的措施;并且公开的密钥也与此无关。

      是否还要求数据由客户端签名以确保消息完整性?

      没有。一个安全的 HMAC 也可以,TLS 使用其中之一。 TLS 在身份验证阶段确实使用数字签名。

      TLS 只是点对点,代理呢?

      代理要么是它们自己的受信任的 TLS 端点,要么是透明的字节传递代理,因此将它们的对等点之间的 TLS 属性保留为端点。

      关于消息保密性,我是这样理解的。

      使用 TLS 确保通过网络传输消息的机密性。

      正确。

      使用对称加密对传输的数据进行加密。

      TLS 做到了。

      加密后的数据存储在数据库中。

      没有。加密的数据被对等端解密。对等方可以重新加密到数据库,或者数据库可以这样做,但这是一个单独的问题。

      【讨论】:

      • 在 TLS 中使用公钥加密。 TLS 有一个初始公钥加密步骤,其中对等方安全地交换对称会话密钥。随后的通信使用对称密钥密码进行加密。
      • @MihaiTomescu 你错了。 TLS 对称会话密钥永远不会传输。它通过密钥协商协议在两端独立地进行安全协商。 一些密码套件指定了 pre-master secret 的公开加密,这根本不是一回事。
      • 没错,会话密钥已建立(例如,通过 Diffie Helman)但从未传输。感谢您指出这一点。
      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多