我需要实现一个系统,我将为用户生成userId / password组合。将使用所有用户的一些通用逻辑生成userId。
例如,userId将是用户的
<mobileNumber>_XYZ
。用户的密码将由加密
userId
生成AES128 encryption with ECB mode
。用户可以访问他的userId /密码。他可以在标题中找到它(这是因为我们正在使用的一些第三方工具。你可以忽略这一部分。)
以下是我可以在其中找到的漏洞:
_XYZ
作为后缀,所以所有密码都会
最后有相同的块。而攻击者将在几个回合中
知道密码只是一些加密了
userId only。 AES128 Encryption with ECB
。我担心的是,如果他无法在我们用于加密的
KEY
上获取,那么攻击者是否有办法破解我们的系统?
答案 0 :(得分:2)
如果用户ID分散在多个ECB块中,则攻击者可以混合并匹配&#34;加密块以猜测类似于他们自己的用户ID的密码。例如,如果用户ID被拆分为:
"user_123", "45" -> "ABCD", "EFGH"
"user_456", "78" -> "IJKL", "MNOP"
然后攻击者可以想到密码ABCDMNOP
对用户user_12378
有效。
最简单的解决方案是不使用AES-ECB。使用(键控)HMAC结构从用户ID派生密码;虽然它不允许从密码中确定用户ID,但这是安全的。 (这可能很好。)