设想
SOAP Web 服务提供用于检索文档和数据的接口。安全是最重要的。
使用 WS-Security,客户端和服务器都对整个 SOAP 信封进行加密和签名。
问题
用于签名的私钥应该编译到应用程序中并存储在设备上,还是应该由服务器使用密钥交换协议提供(可能在用户身份验证之后)?
用于解密的私钥应该存储在设备上还是由服务器提供?
对于要由服务器解密(如果从客户端上传)或由客户端解密(如果从服务器下载)的每个文件都有一个唯一的密钥是否现实?
设想
SOAP Web 服务提供用于检索文档和数据的接口。安全是最重要的。
使用 WS-Security,客户端和服务器都对整个 SOAP 信封进行加密和签名。
问题
用于签名的私钥应该编译到应用程序中并存储在设备上,还是应该由服务器使用密钥交换协议提供(可能在用户身份验证之后)?
用于解密的私钥应该存储在设备上还是由服务器提供?
对于要由服务器解密(如果从客户端上传)或由客户端解密(如果从服务器下载)的每个文件都有一个唯一的密钥是否现实?
只是几个建议:
- 由于逆向工程,您应该将嵌入到服务器外部任何内容的对称密钥视为公开的(即,如果密钥在野外,即使加密也不要打扰)。
- 您应该使用客户端上的安全 RNG 生成的每会话对称密钥,并使用全局非对称公钥加密传输到服务器。私钥有保质期。
- 您可以对在该会话中传输的所有文件/流使用会话密钥,但您应该使用唯一的随机数对每个文件的对称密钥加密进行加盐。根据加密模式,对多个流使用相同的密钥/随机数可能会使您容易对两个流进行异或运算并恢复混合但未加密的结果。
如果必须将私钥从一个设备传输到另一个设备,那么整个私钥的概念就被打破了。通信通道的每一端都必须生成自己的私钥。请注意,这并不意味着将私钥编译成可执行文件,因为拥有该可执行文件的每个人都共享一个私钥,这显然不是您想要的。每个单独的设备都必须使用加密安全的随机数源来生成它自己的公钥/私钥对。然后公钥可以明文交换,你可以用它们来交换会话密钥(每个文件可以是唯一的),私钥可以签名,每个人都很开心。
但请记住:永远不要对私钥进行硬编码,永远不要与任何人共享它们。