Encryption 用户名加密

Encryption 用户名加密,encryption,Encryption,我需要加密从外部合作伙伴SSO接收的用户名。这需要完成,因为用户名是分配给学童的。但我们仍然需要能够跟踪每个人,以防止滥用我们的系统,所以我们决定加密我们日志中的用户名等。 这样,违反我们的制度不会损害儿童的身份 这就是我的困境。我在这方面的知识非常有限,所以我正在寻找使用哪种算法的建议 我在考虑使用非对称算法,比如PGP,扔掉其中一个密钥,这样我们就无法解密用户名 我的问题是: 对于相同的输入,PGP加密是否始终提供相同的输出 PGP是一个很好的选择,还是我们应该使用其他算法 有没有人对实现

我需要加密从外部合作伙伴SSO接收的用户名。这需要完成,因为用户名是分配给学童的。但我们仍然需要能够跟踪每个人,以防止滥用我们的系统,所以我们决定加密我们日志中的用户名等。 这样,违反我们的制度不会损害儿童的身份

这就是我的困境。我在这方面的知识非常有限,所以我正在寻找使用哪种算法的建议

我在考虑使用非对称算法,比如PGP,扔掉其中一个密钥,这样我们就无法解密用户名

我的问题是:

  • 对于相同的输入,PGP加密是否始终提供相同的输出
  • PGP是一个很好的选择,还是我们应该使用其他算法
  • 有没有人对实现同样的目标有更好的建议——用户匿名化

我认为PGP是个好主意,但有可能使用户名难以记忆,为什么不简单地制作一个由
user+orderedNumber
组成的用户名列表,其中user可以是您想要的任何单词,或者ordered number是一个按孩子出生日期排序的4-5位数字?
一旦这样做了,您只需保留一个列表,其中用户名与相应的孩子abd链接,然后您就可以编写这个“很高兴拥有”列表中有一个只有你知道的键

如果想要单向函数,就不需要加密。你想要散列。最简单的方法是使用像SHA-256这样的散列。我建议在散列之前先对用户名加盐。在本例中,我可能会选择一个静态salt,如
edu.myschoolname:
,并将其放在用户名前面。然后通过SHA-256进行测试。将结果转换为Base-64或十六进制编码,并将结果字符串用作“用户名”

在unix命令行中,这看起来像:

$ echo -n "edu.myschoolname:robnapier@myschoolname.edu" | shasum -a 256
09356cf6df6aea20717a346668a1aad986966b192ff2d54244802ecc78f964e3  -
该输出对于该输入字符串是唯一的(从技术上讲,它不是“唯一的”,但您永远不会通过意外或搜索找到冲突)。输出是稳定的,因为它对于给定的输入总是相同的。(我认为PGP包括一些随机化;如果没有,应该包括。)


(关于以下评论)

加密散列算法是非常安全的。非加密散列算法是不安全的(但也不一定是安全的)。据我所知,没有针对SHA-2(包括SHA-256和SHA-512)的重大攻击

您的系统需要对有权访问代码的人具有健壮性,这是正确的。但是,如果他们知道要查找的用户id,则没有系统会阻止他们发现该id的屏蔽版本。如果进行加密,则有权访问密钥的攻击者只需对该值本身进行加密即可确定该值是什么


但是,如果您要防止出现相反的情况:防止攻击者在不知道要查找的id时确定id,正确的解决方案是加密哈希,特别是SHA-256或SHA-512。使用PGP来创建单向函数就是使用加密原语来完成它不是构建来完成的事情,这总是一个错误。如果你想要一个单向函数,你需要一个散列。

你是要存储还是要处理查询?您还应该详细介绍您的系统。我不想谈太多细节。但是我们在系统中创建了一个用户,因此我们可以将各种使用日志与内部创建的用户ID相关联,然后这些用户ID主要用于防止滥用,但也会为我们的服务向客户收费。以这种方式登录我们系统的人将使用我们外部合作伙伴提供的SSO解决方案,因此,我们永远不会使用/知道我们存储在数据库中的用户名。但是我们仍然需要每次都能将日志与同一个唯一的用户联系起来谢谢你的回答。正如我所说的,我在这方面的知识有限,但我的印象是哈希不是很安全。我们不希望能够访问源代码的人(例如黑客)能够撤销用户名的加密/哈希。这就是为什么我考虑在不保存两个密钥的情况下使用非对称加密算法。