由于您专门询问了熵,因此我将首先介绍您问题的客观方面。
熵减少了,因为你从每一边拿走了一半的键空间。
为了简化这一点,如果一个 10 个字符的密码包含小写和大写字符的熵是
log2(52^10) = ~ 57 bits of entropy
然后你从前半部分删除大写字符,从后半部分删除小写字符,你的熵是有效的
log2(26^10) = ~ 47 bits of entropy
加上 1 位,因为反过来也可能发生 48 位。以上假设密码是使用加密安全的伪随机数生成器生成的 - 即它是完全随机的,并且不包含人脑生成的任何模式,这些模式将在许多方面无意中预测。
密码的熵基于生成技术,因此如果知道这一点,那么您已经按照上述方法减少了熵。不要依赖于秘而不宣的方法。
但是,如果您想这样做以便于输入,只需在密码中再添加两个字符:
log2(26^12) = 56
加上 1 位,然后您就有 57 位来获得与原始方法等效的安全性。
但是,您还询问了这如何影响密码的实际安全性。如前所述,除非攻击者知道您的密码的生成方法,在这种情况下,X 个无需 shift 键即可输入的字符和 X 个需要 shift 键的字符,任何密码猜测攻击都将是通用的。也就是说,他们并没有特别针对您,因此他们对您的特定生成方法一无所知。这意味着他们将尝试通用单词列表和常见字符序列,而不是适合您的生成模式的序列。因此,他们的攻击空间的熵与您的密码生成方法所拥有的熵不匹配。
在您的情况下,假设一个随机生成的 20 个字符的密码,这通常会给出 ~131 位,并且按照所述将 ~113 位拆分。两者都高于NIST推荐的 80 位密码强度。