hash - 如何将一个人的身份与其个人数据分开?

标签 hash database-security sensitive-data

我正在编写一个应用程序,其主要目的是保留用户列表
购买。

我想确保即使我作为开发人员(或任何拥有完整
访问数据库)不知道多少钱一个
特定的人花了或他买了什么。

我最初想出了以下方案:

--------------+------------+------------
user_hash |项目 |价钱
--------------+------------+------------
a45cd654fe810 |脱衣舞俱乐部 | 400.00
a45cd654fe810 |法拉利 | 1510800.00
54da2241211c2 |啤酒 | 5.00
54da2241211c2 | iPhone | 399.00

  • 用户使用用户名和密码登录。
  • 从密码算出user_hash (可能加盐等)。
  • 使用散列通过普通 SQL 查询访问用户数据。

  • 如果有足够多的用户,几乎不可能知道有多少
    特定用户只知道他的名字就花掉了他的钱。

    这是明智的做法,还是我完全愚蠢?

    最佳答案

    恐怕如果您的应用程序可以将一个人与其数据相关联,那么任何开发人员/管理员都可以。

    你唯一能做的就是让链接变得更难,减慢开发人员/管理员的速度,但如果你让用户链接到数据变得更难,那么你的服务器也会变得更难。

    基于@no idea 的想法:

    您可以使用经典的用户/密码登录到您的应用程序(散列密码或其他),以及一个特殊的“通行证”,用于确保您的数据安全。此“通行证”不会存储在您的数据库中。

    当您的客户登录您的应用程序时,我必须提供用户/密码/通行证。用户/密码与数据库一起检查,密码将用于加载/写入数据。

    当您需要写入数据时,您可以对您的“用户名/通行证”对进行散列,并将其存储为将您的客户端链接到您的数据的键。

    当您需要加载数据时,您可以对“用户名/密码”对进行散列,并加载与此散列匹配的每个数据。

    这样就不可能在您的数据和您的用户之间建立联系。

    另一方面,(正如我在对@no 的评论中所说)小心碰撞 .另外,如果您的用户写了一个错误的“通行证”,您将无法检查它。

    更新:对于最后一部分,我有另一个想法,您可以在数据库中存储“密码/密码”对的哈希值,这样您就可以检查您的“密码”是否正常。

    关于hash - 如何将一个人的身份与其个人数据分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691348/

    相关文章:

    c# - 一种在不存储 key 的情况下将 key 存储在字典中的方法?

    perl - 在 perl 中返回函数的关联数组

    使用动态 SQL 的存储过程的 SQL Server 权限

    Android perimision "user' s private information", "your personal information", "read sensitive log data"

    PHP - 新的 Imagick 更改图像的 md5()

    php - php 中是否有哈希函数将字符串参数哈希为数字?

    php - 处理通过应用程序的数据流的正确方法

    database-design - 让应用程序通过 REST Api 直接访问 CouchDB 是否安全?

    node.js - MongoDB 和 NodeJS 中的敏感数据分离 - 通过加密 key 引用

    github - DVCS(Github、BitBucket等)如何保证私有(private)项目代码的完整性?