【问题标题】:Key Generation/Storage for react-native apps to encrypt realm dbreact-native 应用程序的密钥生成/存储以加密领域数据库
【发布时间】:2016-06-27 17:32:08
【问题描述】:

realm 是否有任何 react-native 支持用于加密领域数据库的密钥生成/密钥存储?在编写任何本机模块之前,我想与在领域工作的团队核实。如果有任何 node 模块支持 react native,那会很有帮助。

提前致谢。

【问题讨论】:

    标签: encryption react-native realm


    【解决方案1】:

    Realm 不提供任何用于生成或存储加密密钥的 API。我在下面复制我过去在这个问题上发表的评论,只是为了提供我对在 React Native 上处理加密领域时应该考虑的一些考虑因素的想法......

    react-native-keychain 模块仅支持密码字符串,而 Realm 需要一个 512 位(64 字节)数据 blob 作为 ArrayBufferArrayBufferView(例如 Uint8Array 等)。

    如果您是随机生成密码,那么我建议在使用react-native-keychain 存储之前将该数据进行base64 编码为字符串,然后在将其取出时进行base64 解码。我建议查看 base64-js 处理原始数据(atob/btoa 只处理字符串)。

    另一方面,如果用户提供密码,那么您可以将其直接存储在钥匙串中,并使用该密码的 512 位散列作为加密密钥。 SHA-512 散列可以实现这一点,但通常使用加密时,您希望使用包含盐的散列算法,并且从根本上讲速度很慢,因此更难暴力破解。这样做的标准是PBKDF2,尽管存在更新更好的散列方法。我建议您查看crypto-jspbkdf2-js

    【讨论】:

    • 感谢 Scott 提供的 react 本机库链接。提到的所有要点都非常有用。
    • Scott,我决定编写自己的原生模块,并通过桥将密钥暴露给 react-native 模块。我在看这个例子 - github.com/realm/realm-java/blob/feature/example/store_password/…。例如,如果我从上面的示例中公开 generateKeyForRealm(),那么领域的加密会起作用吗?我只是想看看我是否理解你那里的 512 位评论
    • 是的,generateKeyForRealm() 方法只是返回一个完全随机的 64 字节(512 位)密钥。
    • 非常感谢,斯科特!
    【解决方案2】:

    对此进行一点扩展。您可以使用https://asecuritysite.com/encryption/PBKDF2z 之类的网站生成一个 64 字节的散列作为十六进制字符串和 base64 字符串。

    您可以使用领域浏览器 GUI 中的十六进制字符串来解锁领域文件。您可以将 base64 字符串与上述 base64-js 库一起使用。只需将 base64 字符串传递到 base64js.toByteArray() 中,这就是您将在 new Realm({encryptionKey: key...}) 中使用的密钥

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 2023-03-21
      • 2023-02-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多