为隐私而设计--一种新兴的软件模式

2020-09-11 22:42:12

被隐藏在地毯下太久了,处理隐私现在是许多软件架构师和开发人员待办事项清单上的一个问题。一批新的初创企业开始出现来解决这个问题。我们讨论了问题的核心,以及解决问题时应采取的正确方法。

在软件设计中,我们经常谈论定义由特定设计模式解决的设计问题的冲突力。在隐私问题上,这些力量到底是什么?

个人用户数据是功能的金矿。一个真正有用的最终用户应用程序自然会收集和处理个人用户数据。事实上,内容越多,应用程序对用户的用处就越大。用户和应用程序通过用户数据交换“说话”。无论您正在构建什么最终用户软件,无论是电子商务网站、银行应用程序还是社交网络,您的软件都是用来收集和处理用户数据的,而且通常它的用途甚至是由这些数据来定义的。此外,。

智能在用户数据中茁壮成长。人工智能系统依靠用户数据来学习智能行为,并向用户提供智能的个性化服务。而用户想要的是智能应用。

换句话说,在不收集、存储和处理用户数据的情况下交付用户想要的现代最终用户应用程序是不可想象的。很难想象一个应用程序能够最大限度地减少收集和存储的数据量。这是我们对您的软件设计施加压力的第一个“力”。

在中心位置收集和存储个人数据会使您的系统面临安全和隐私风险,这将成为您的系统的责任。其他人可能想知道您的系统对其用户“了解”什么。即使是最意想不到的软件系统也会成为攻击和数据泄露的目标。

也更难建立和维护信任,即用户相信您或实际运行您的系统的企业员工没有读取个人用户数据的能力。各大软件公司(如Google)都制定了严肃的内部政策来解决这些担忧,然而,随着每一个新的用户数据相关丑闻的发生,用户实际上信任完全保护他们的政策的能力越来越弱。

有法律要求将收集和存储的数据降至最低,并在传输和静止时对其进行保护。欧洲的GDPR是人们谈论最多的保护在线隐私的法律框架,也是全球开发商头疼的问题(因为它保护欧盟公民甚至不受外国公司妨碍隐私的行为的影响)。但在加利福尼亚州(CCPA)和世界其他地方也存在类似的法律保护。

现代系统-用户关系不仅要求保护用户数据不受非故意的外部各方的影响,而且在一定程度上还要求保护用户数据不受系统本身的影响。

然而,几十年来,传统的客户端-服务器体系结构一直在转向减轻客户端的责任,从而使最终用户应用程序通常只负责收集用户输入并显示来自集中式服务器的响应。

虽然这样的方法确保了系统组件的某种优雅和有意义的责任分配,但它也放大了我们在这里描述的力量冲突。因此,系统架构师不得不在有用的功能和隐私之间做出选择,或者更糟:在代码外部的策略或安全解决方案方面应用补丁,这往往会使可用性变得可怕。然而,现代用户已经提高了期望,更加意识到隐私风险,并且理所当然地期望具有高水平的有用功能和隐私,更不用说可用性了。

我们在这里介绍可以解决这种力量冲突的软件体系结构元素,这些元素是我们从成功克服它的新兴现代应用程序中派生出来的。

要做的第一件事是将您的系统需要“知道”的用户数据与系统可以收集和处理的用户数据分开,并以不同的方式考虑这些数据,而无需实际访问这些数据。我们称这两个类别为:已知和未知的用户数据。

这种分离没有什么神奇的秘诀,因为它取决于您系统的功能。在有些系统中,所有用户数据都可以被认为是未知的-系统不知道向其提供功能的用户(Tor等匿名服务就是很好的例子)。

然而,大多数系统需要识别用户,以便让他为他们提供的服务付费。拼车平台可能希望考虑乘客和司机的身份是“已知的”,但乘车的目的地以及司机和乘客之间交换的任何消息都是“未知的”。酒店预订平台可能会以这样的方式执行拆分,将用户与酒店联系起来,从酒店收取费用,但忽略显示用户下落的预订日期。

一旦您将哪些用户数据划分为“已知”,哪些为“未知”,您就可以采用一种新的客户端-服务器体系结构-当您像往常一样处理“已知”数据时,但“未知”用户数据保存在用户的端点;通过您的系统在用户之间交换时进行端到端加密,并在备份时进行加密。

当您的系统需要将未知用户数据从一个用户移动到另一个用户时,您可以使用端到端加密来确保在系统无法读取正在交换的实际用户数据的情况下进行这些传输(和相关功能)。

对于这一点,您可以从完善的信号协议中得到启发。在百视网,我们正在努力为您提供易于集成的组件,使您的软件端到端加密就绪。

端到端加密在终端用户应用程序中变得越来越普遍,因为需要确保信任不断增长。密切关注blindnet.io正在做些什么,以使每个应用程序中的每个开发人员都能轻松实现它。

“未知”用户数据的风险在于,您为“已知”用户数据设置的任何中央数据库备份都是不够的。在您的系统可能暴露于“未知”数据集的情况下,您将需要设置加密,以便只有其端点上的用户可以解密备份。

您可以使用以下现有的优秀解决方案之一来实现这一点,例如Tanker.io。

这里的一个重要考虑事项是,如果加密密钥因用户端点丢失而丢失,备份会发生什么情况。系统“未知”的数据将永远丢失。这实际上取决于您的用例,您如何最好地处理这个问题。端到端加密聊天应用程序在工程设计方面处于领先地位,用户端点可以在其中验证彼此的身份,从而使一个用户可以有多种方式访问她的数据。

在处理某些应该保持“未知”的用户信息时,可以使用零知识证明来实现高度的功能,同时允许大量用户数据对您的系统保持“未知”。通常,可以通过这种方式优雅地实现法定年龄验证。

在设计软件时,主要的挑战是如何使用任何智能/个性化的功能。传统上,这些特征是通过维护机器学习算法可以在其上运行的集中式数据存储来开发的。为了满足现代用户的期望,一种趋势是将某些计算从集中式服务器转移到更靠近用户端点的位置(因此称为“边缘计算”)。

“边缘计算”背后的理念,就是像我们把数据分成“已知”和“未知”一样,把计算拆分,让计算点更靠近用户,代表云执行任务和提供服务。事实上,机器学习算法仍然可以集中操作,并通过使用匿名用户数据来学习参数关联。设备上机器智能(On-Device Machine Intelligence)是一种在改善隐私和延迟方面取得进展的方法。看看开源项目,比如MobileNet和Learn2Compress。

然后,可以在“未知”数据的基础上,在用户的端点上执行个性化计算,以向用户提供智能行为和智能功能。

以保护隐私的方式处理用户数据也是一个充满活力的挑战,让位于许多新的想法和方法:密切关注Evervault正在建造的建筑。

将“已知”形式的“未知”用户数据分离、端到端加密传输、加密存储、零知识证明和边缘计算相结合,可以产生一种全新的方式来构建健壮、功能强大但按设计私有的软件系统。

这种设计对软件架构师来说并不新鲜,他们已经故意忽略了。事实上,软件系统中对隐私的期望是软件系统(特别是商业系统)最基本、最自然的期望之一。

虽然许多人会试图出售隐私作为对恐惧的回应-担心被过度控制的政府监视,担心被视为广告目标,担心被暴露在数据泄露中,以及其他恐惧;我认为这样的观点是危险的,它正在损害软件设计。我认为恐惧是非理性的,虽然人们确实出于恐惧而购买东西,但对于软件系统设计决策来说,恐惧不是一个可行的主题。

另一方面,我确实看到的是在用户和软件系统之间设计平衡关系的基本必要性。我相信用户和软件系统不是一体的。在考虑第三方入侵和滥用之前,软件架构师必须考虑到,当用户和系统不是一个实体,而是两个实体时,向软件系统完全公开用户数据不能被认为是一种合理的默认运作方式:也不能认为是处于某种关系的实体。而且,和每一种关系一样,用户与系统的关系只有在有平衡的地方才能生存。

在考虑隐私的情况下构建软件,意味着首先设计这种平衡关系,在不损害系统功能的情况下限制系统对用户数据的暴露。只有将系统设计为保护用户不受系统本身的影响,才能有效地保护用户免受外部威胁。