所以我正在开发使用RSA进行加密的混乱应用程序。目前我提出了这个算法:
= auth =
的更新
截图:
在这种情况下,私钥只能从密码生成,而服务器只知道密码哈希只是为了授权用户(未分配密码永远不会传输到服务器),因此无法生成私钥或解密任何旧邮件。如果服务器伪造公钥,配方将无法验证使用发件人私钥加密的签名。
问题是,当服务器注册服务或请求更改密码时,服务器可以伪造发件人的私钥,公钥和密码,并且配方将无法检测到它。那么,我如何验证密钥是否未被服务器伪造?
答案 0 :(得分:0)
那么,如何验证密钥是否未被服务器伪造?
你做不到。只要客户只与服务器通信,他们就无法区分真正的"真实的"远程用户以及服务器正在进行MITMed或伪造的用户。
我在这里看到其他一些严重的潜在问题:
通过网络发送未加密码的密码哈希(在登录过程中)并不比以明文方式发送密码更好。攻击者可以通过电线嗅探哈希值以登录 - 他们不需要实际的密码! - 并且非迭代的SHA256极易受到暴力攻击。
"传递的私钥" (也在登录过程中)意味着您正在使用某种KDF从用户的密码生成私钥。这有多重负面影响:
用户通常很难选择密码。这意味着私钥也会很弱。
如果两个用户碰巧使用相同的密码,他们最终会使用相同的私钥。
任何用户都可以通过在候选密码上运行KDF来攻击他们与之通信的任何其他用户的密码(以及私钥)。
没有指定用于协商对称加密密钥的进程。使用RSA直接加密消息会将每条消息限制为密钥的大小,如果加密的数据不是随机且唯一的,则会使其容易受到大量攻击。
在消息交换中,用户向服务器发送每个消息的两个副本 - 一个加密到目标用户的私钥,一个加密到他们自己的私钥。在某些情况下,这可以恢复消息。