【问题标题】:Encrypting sensivite data in React Native and Expo在 React Native 和 Expo 中加密敏感数据
【发布时间】:2017-06-20 10:24:27
【问题描述】:

我正在使用 React Native 和 Expo 开发移动应用程序,提供安全解决方案。项目所有者希望在应用程序中存储敏感的授权密钥,用于与 REST 服务器联系并访问受保护的数据。他要求至少对这些密钥进行加密,并且尽可能地难以从外部读取。

我知道topis:

Save sensitive data in React Native

Is React Native's Async Storage secure?

关于KeyChain,但它们不包括加密和展览问题。

那么,在 React Native Expo 应用程序中尽可能保存这些数据的最佳和通用解决方案是什么?

【问题讨论】:

  • 您完全错误地解决了这个问题。如果您需要在客户端使用密钥,那么在客户端加密密钥是没有意义的,因为要使用它们,您需要解密密钥......因此,如果您在客户端上有解密密钥和密文,那么您还不如拥有明文。
  • 您可以在服务器上拥有解密密钥,客户端可以将加密的数据发送到服务器,服务器可以轻松解密。由于您提到的明显原因,在此过程中您不需要将解密密钥存储在客户端。
  • 如果要存储敏感数据可以看:stackoverflow.com/a/45550361/7618742
  • @LukePark :再一次:'很难从外面尽可能多地阅读' - 并非不可能
  • 你误解了我的意思。你以错误的方式解决问题。引入一个中间服务,您可以使用它来验证用户,然后只需在该服务器上拥有 API 密钥。你不应该在客户端存储 API 密钥,加密或其他方式。

标签: encryption react-native cryptography expo


【解决方案1】:

Expo 现在有SecureStore,用于存储加密数据。

详情:https://docs.expo.io/versions/latest/sdk/securestore

【讨论】:

  • SecureStore 的限制为 2 KB。这远远不足以存储我们的敏感数据,甚至可能超过 100MB,那么这种情况下的解决方案是什么?
【解决方案2】:

我最近参与了一个与您一样存在安全问题的 React Native 项目。安全不是一个简单的问题,我也不是专家,但我们就是这样做的。

我们使用react-native-aes-encryption 进行加密和散列,react-native-rsa 用于生成公钥/私钥对。为了正确使用这些库,您最好了解基本的密码学概念。

我们使用react-native-keychain 从钥匙串读取/写入数据。如果你想存储一些小的敏感数据,钥匙串是要走的路。它已在所有 Apple 操作系统中使用,以确保您的密码安全。也就是说,如果您想为这两个平台构建您的应用程序,该组件在 Android 端的工作并不像预期的那样无缝。

除此之外,我对世博会一无所知。我希望这些库也适合你。

【讨论】:

  • 我投反对票纯粹是因为这个解决方案不安全。在客户端保留 API 密钥只是在任何情况下都不应该做的事情,无论加密程度如何。正确的解决方案是简单地拥有一个代表客户端处理请求的经过身份验证的 Web 服务。
  • 我同意你的看法。在我们的应用程序中,我们没有存储任何 API 密钥,或者在任何应用程序中都不应存储身份验证令牌。我只是简要说明您可以使用哪些组件来为您的应用添加加密/安全性。
  • 所以我可以理解,它说他在哪里保留客户端 API 密钥?对 rsa pub/priv 密钥的引用是对密钥的唯一引用,它与 API 密钥不同。
猜你喜欢
  • 2016-09-12
  • 2017-04-09
  • 2016-12-26
  • 2020-06-29
  • 2013-03-24
  • 1970-01-01
  • 2016-10-08
  • 2012-08-11
  • 2021-04-10
相关资源
最近更新 更多