如何保护存储的用户数据:电话号码?

5
我想开发一个应用程序,基本上是文本消息的订阅服务。
用户通过我的网站提交电话号码。我向他们发送一条带有密钥的确认短信,如果他们正确输入密钥,则订阅成功,之后每天我都会发送一条特定的信息短信,直到他们取消订阅。
问题:我想以一种我(开发人员或存储层管理员)无法查看这些电话号码的方式来存储这些电话号码,以保护隐私。我不能只存储它们的哈希值,那么我的应用程序如何读取它们以发送文本消息呢?我该怎么做?
编辑:这既是安全性问题,也是隐私问题...即使黑客完全访问数据库,我也不希望他们能够获取任何电话号码。
2个回答

4
当系统上的软件可以解密它们时,任何获得足够访问权限的人都可以这样做。最好的办法是使用专用系统进行实际消息传递部分以减少风险。通过使消息成为该系统唯一的功能,您限制了入侵该系统的选项。然后,通过使用公钥/私钥加密,消息系统将是唯一需要解密密钥的系统。用于注册用户或更改电话号码的系统仅需要加密密钥。
现在,如果您想进一步保护解密密钥,则可以通过设置没有人知道的密码并禁用所有登录方法来使此系统对管理员不可访问。哦,还要确保密钥仅存在于内存中而非磁盘上!
如果此消息系统出现故障,则需要启动一个新的消息系统,需要使用该密钥。因此,您需要在多个锁之后的一个安全位置中拥有密钥副本,不同的人持有该密钥。然后,这些人就可以监督密钥被正确输入到新系统中,而没有其他人复制该密钥,并且之后所有登录都已正确禁用。

1
+1,但是在处理像电话号码这样的数据时,要小心公钥/私钥加密。任何拥有公钥和加密后的电话号码的人都可以制作电话号码及其对应的加密版本表格,并使用它来推断用户身份。 - Johan Lundberg

3

我认为加密是您唯一的选择。您需要对电话号码进行加密,但只允许软件/服务应用程序访问密钥。您可以将密钥存储在外部系统上,并通过SSH或SSL使应用程序检索密钥并仅存储在内存中。这并不意味着管理员无法访问密钥,但他们只是电话号码,无法想象有人会花费大量精力来获取手机号码。


当然,我可以加密电话号码并将密钥放在另一台服务器上,但这并不能阻止我(或者入侵我的系统的人)去那个服务器并获取密钥来窃取我的用户数据。确实,比电话号码更敏感的数据还有很多,但至少在学术目的下,我能否设置我的应用程序,以便_没有人_可以访问这些电话号码? - Tim
我看到的问题是,如果在过程中某个点上需要将加密数字返回到未加密状态以传输SMS消息,则必须向软件提供解密该文件所需的密钥。这并不意味着您不能实现一个密钥轮换系统,在每次使用或按固定速率更改密钥。软件可以在给定间隔内创建密钥,并将用于数字加密的密钥加密。但是,如果您没有将该密钥编写到应用程序内存之外的其他位置,则如果该应用程序崩溃,则会出现问题。 - Jordan
是的,那些问题我也看到了。只是好奇业界标准惯例是什么——大多数应用程序都经历这种麻烦,还是只是以明文形式存储您的电话号码(或其他数据,除密码外)? - Tim
我认为许多人会以明文方式存储电话号码,因为它们不是信用卡号码(您无法直接从窃取它们中获利)。另一方面,许多人会同意它们是敏感的。在这种情况下 - 正如其他人间接指出的那样 - 您需要创建使用案例,然后创建威胁模型,最后实施保护措施。最终解决方案肯定将基于对数据的有限访问,并且加密可以在其中发挥作用,特别是如果信息存储在数据库或磁盘中。 - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接