在将数据发送到服务器之前加密客户端应用程序上的数据

Ant*_*Dev 1 encryption cryptography ios

我正在尝试创建一个应用程序,它将加密所有用户输入数据,然后将其发送到服务器,它将存储在sql数据库中.我们的想法是数据库中的数据始终是加密的,并且只能在客户端应用程序上解密,所以我想在客户端应用程序上创建和存储私钥.第二个要求是所有应用程序都可以解密写在服务器数据库上的数据,因此我假设所有应用程序应该共享相同的私钥.

我的问题是:

  • 如何在项目中存储私钥以保证其安全:我正在考虑对其进行模糊处理,然后将其存储到钥匙串中,但据我所知,混淆和钥匙串都不是很安全.我担心的是,如果我的所有应用实例都使用相同的私钥,那么黑客只需通过越狱自己的手机就可以轻松访问我的数据.如果我在运行中生成它,那么所有应用程序将拥有不同的私钥,并且无法以可读形式共享数据
  • 实现这一目标有哪些最佳实践,如果钥匙串不安全,是否还有其他地方或方法,如果不存在我将使用钥匙串,但至少我想解决项目中硬编码密钥的问题所以它可以在第一次运行时保存在钥匙串中

编辑

只是为了澄清一点

可以说我们有类似云服务的东西,每个云都可以加入很多设备.当其中一个设备更改某些资源时,所有设备都会与其云同步.该云用一个配置文件表示,该配置文件包含有关拥有设备的用户的一些个人数据.我希望加入云(C1)的所有设备都可以看到(读取)与该云相关联的个人数据,我不喜欢的是某些数据库管理员可以读取该数据.所以我想在客户端加密数据,并在客户端解密.

简而言之,加密不是出于传输目的,因为我使用ssl,它只是尝试符合关于个人数据安全性的新GDPR规则.

编辑1

经过一番调查,我发现了一个名为"客户端加密"的东西.它完全符合我的需求,数据在客户端加密,发送到服务器,存储在db中,并在客户端再次解密.但我似乎无法找到一种方法来处理在我的项目中硬编码私钥的需要.为了将它保存到钥匙串,我必须从某个地方加载它,如果我生成它比其他客户端不会有相同的密钥,它将无法解密数据.所以有人可以帮助我,我是从错误的角度看待这个吗?

Luk*_*ark 5

假设您使用TLS,我们可以概述您所做的以下要求:

  • 存储在服务器上的所有信息都必须以服务器泄露不会泄漏任何数据的方式进行加密.

  • 给定"云"中的所有客户端都可以访问该云中的所有数据.

  • 丢失客户端设备将不会从云中泄漏任何信息.

然后,我们可以概述一个E2E方案,如下所示:

  1. 首次创建用户时,生成公钥/私钥客户端并将公钥传输到服务器.使用从用户密码生成的对称密钥加密私钥客户端.因此,任何需要此私钥的操作也需要用户密码,以防止设备被盗.

  2. 当用户希望创建"云组"时,为该组生成对称密钥并使用用户公钥对其进行加密.将此密钥存储在客户端设备上,使用用户公钥加密.

  3. 当用户想要将另一个用户添加到他们的"云组"时,用新用户公钥加密组对称密钥并进行传输.

  4. "云组"内的通信和存储使用组对称密钥.

请注意,在此方案中:

  • 服务器无法解密任何数据,因为组对称密钥仅在由特定用户公钥加密时触摸服务器.

  • 用户密码总​​是需要使用他们的私钥,因此盗窃设备不能向窃贼公开任何信息.

  • "云组"的所有用户可以使用简单的对称算法相互通信.