我们有一个桌面和移动应用程序,用于访问许多第三方服务。 这些服务具有一些潜在的敏感信息 - 例如身份验证令牌,在某些情况下还有明文用户名/密码。
我们希望提供一种服务,以便跨多台计算机和设备同步其设置。也就是说 - 他们签署了我们提供的服务,然后该信息将在他们登录的任何地方同步。
我们无法强制第三方应用程序停止使用明文密码。
我们考虑过一些方法:
不要发送密码或身份验证令牌。
当用户登录新设备时,他们需要为每个第三方服务重新输入/验证设备。
优点:安全,没有密码/令牌危害的风险 缺点:用户很难。
使用客户端证书或硬件令牌加密敏感信息。
当用户想要登录时,他们会提供证书/硬件令牌。
优点:非常安全。
缺点:巨大的入门门槛,非营利性应用难以实现。
使用用户提供的密码
加密敏感信息当用户登录新设备时,系统会提示他们提供密码 如果密码不正确,则需要重新输入/验证所有其他设备。
优势:安全,如果用户提供强密码 缺点:如果用户重置密码,他们需要为所有第三方应用程序重新授权设备。
加密我们服务器上的敏感信息。
优点:易于用户使用 缺点:对于任何抓取设置表的人来说,只有比纯文本略多的工作。
不要费心加密任何东西。 (明文存储)
优点:易于用户使用 缺点:任何抓住我们数据库的人都可以轻松获得所有用户的密码/身份验证令牌。
我的问题是:我们还没有考虑过更好的方法吗?
答案 0 :(得分:0)
好的,这是一个多方面的问题。您必须同时考虑信息在Internet上传输时的安全性以及服务器上的信息安全性。
关于案例1,当然最好不要冒密码泄露的风险,但是你创建的应用程序对用户来说是方便的。如果操作正确,信息可以安全传递,不会有暴露风险。但是,考虑到这一点,正确实施密码术并不是一件应该轻视的壮举。事实上,当我说你永远不应该实现自己的加密,但是使用现有的经过时间考验的加密库时要注意正确使用它们。
对于第二个子弹,虽然你不应该自己实施加密,但是有许多程序和库可用于生成公钥和私钥并使用它们来保护信息。
您100%需要加密存储在数据库中的信息。如果有足够的时间/动力,每台服务器都是不安全的。但是,如果没有适当的信息,加密信息可能在计算上无法解密。