细节调研之Minimum Device Password Complex Characters
导读
Minimum Device Password Complex Characters,测试同事称之为最小字符集。遗憾的是,测试同事并不能对这个“最小字符集”的具体含义说出个所以然来,只是拿出测试用例来进行测试。而在Exchange应用的代码实现中,Minimum Device Password Complex Characters是用来限制非字母字符的长度。测试同事有时并不接受这个解释,只是以测试用例为准,所以就有了这篇文档。这篇文档用来弄明白Minimum Device Password Complex Characters的具体含义是什么。
一、Android的Exchange应用中的实现
在Android的Exchange实现中,MinDevicePasswordComplexCharacters是基于非字母字符的个数确定的。基于如下方法实现。
DevicePolicyManager #setPasswordMinimumNonLetter()
Called by an application that is administering the device to set the minimum number of non-letter characters (numerical digits or symbols) required in the password.
其具体代码类似如下:
// the user must have entered a password containing at least a letter, a numerical digit
// and a special symbol, by default.
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
dpm.setPasswordMinimumSymbols(mAdminName, 0);
dpm.setPasswordMinimumNumeric(mAdminName, 0);
dpm.setPasswordMinimumNonLetter(mAdminName, policy.mPasswordComplexChars);
该段代码的含义是,MinDevicePasswordComplexCharacters的值(policy.mPasswordComplexChars
)等同于密码中包含非字母字符的个数。而这个解释对测试部给出的测试用例并不能全部通过。所以,很有必要搞清楚、搞明白MinDevicePasswordComplexCharacters的具体含义。
由于Minimum Device Password Complex Characters是微软提出的,故在微软的官网中找到了一下Minimum Device Password Complex Characters的解释。
二、微软的解释
在微软官网中找到了如下三种解释,不幸的是,这几种解释并不一致。从这里也可以看出,测试同事说不出个所以然来也是正常现象。作为该项概念的提出者来说,都没有给出一个统一的解释。
2.1 第一个解释
在微软的官网中Understanding Exchange ActiveSync Mailbox Policies[ 1 ]中给出了Minimum device password complex characters的解释,如下
Minimum device password complex characters
This setting specifies the minimum number of complex characters required in a mobile phone password. A complex character is any character that is not a letter.
这个解释字面意思是,Minimum device password complex characters,该项用于设置手机密码时,指定的复杂字符的最小值。一个复杂字符是任意一个非字母字符。该解释与与我们的Exchange代码实现相同。
2.2 第二个解释
这个是在一份微软的Policy CSP[ 2 ]文档中找到的,该解释适用于Can be set using Exchange Active Sync (EAS)。
DeviceLock/MinDevicePasswordComplexCharacters
The number of complex element types (uppercase and lowercase letters, numbers, and punctuation) required for a strong PIN or password.
Note
This policy must be wrapped in an Atomic command.
Always use the Replace command instead of Add for this policy in Windows 10 for desktop editions.
PIN enforces the following behavior for desktop and mobile devices:
- 1 - Digits only
- 2 - Digits and lowercase letters are required
- 3 - Digits, lowercase letters, and uppercase letters are required
- 4 - Digits, lowercase letters, uppercase letters, and special characters are required
其中,字符集合说明:
* English uppercase characters (A through Z) * English lowercase characters (a through z) * Base 10 digits (0 through 9) * Special characters (!, $, #, %, etc.)
这个解释字面意思是,Minimum device password complex characters是复杂元素类型(大写字母、小写字母、数字、标点符号)的数量。该项符合逻辑,也与Exchange服务器中Minimum device password complex characters的取值是[1, 4]相匹配。
不考虑其它,我倾向于使用这种解释来说明Minimum device password complex characters。
2.3 第三个解释
这个是在EAS协议的Exchange ActiveSync: Provisioning Protocol[ 3 ]的2.2.2.36 MinDevicePasswordComplexCharacters给出了解释。当然,对于Exchange来说,这是最权威的一种。
Valid values for MinDevicePasswordComplexCharacters are 1 to 4. The value specifies the number of character groups that are required to be present in the password. The character groups are defined as:
- Lower case alphabetical characters
- Upper case alphabetical characters
- Numbers
- Non-alphanumeric characters
For example, if the value of MinDevicePasswordComplexCharacters is 2, a password with both upper case and lower case alphabetical characters would be sufficient, as would a password with lower case alphabetical characters and numbers.
这个解释字面意思是,Minimum device password complex characters是在密码中需要被使用的字符集的数量。和第二种解释类似,但也是有区别的。如果Minimum device password complex characters的值为2,在这种解释中,只包含大小写字母也是满足的,而在第二种解释是密码中必须包含数字和小写字母。
这种解释是最规范最合理的,但在当前的Android框架中,并不支持该种方式的实现。要完成这种方式,需要修改Android框架层代码。
三、测试部相关的测试用例
- the value of MinDevicePasswordComplexCharacters is 1
当the value of MinDevicePasswordComplexCharacters is 1,有下面一条测试用例,不符合实现。
将Exchange服务器中账户对应的密码策略中设置“最小字符集”1, 2、手机上建立Exchange邮件账户,设置手机锁屏密码 (1):1abc、12ab、12AB、1@Aa、1@#A(至少包含1个数字和一个字母) (2):1111、aces、adgdD、AETD、#@%@、231@、#adfa、%ADFG;3、登陆账户后,按电源键休眠唤醒输入设置的锁屏密码
期待 (1)可以设置成功 (2)设置不成功。 3、能够正常解锁。
实际情况是,“#adfa”和“%ADFG”可以设置成功。这两个密码序列的非字母的个数均为1,满足微软的第一种解释[ 1 ],也满足Exchange代码实现,可以设置成功是正常现象。
- the value of MinDevicePasswordComplexCharacters is 2
当the value of MinDevicePasswordComplexCharacters is 2,有下面一条测试用例,不符合实现。
设置手机锁屏密码:#adfa、%ADFG、1abc、1@#A,设置不成功
实际情况是,“1@#A”可以设置成功。因为其非字母的个数为3,满足Exchange的代码实现。也满足微软的第一种解释[ 1 ]。
四、结论
MinDevicePasswordComplexCharacters只是一种安全策略,其值是密码安全等级。故,只需要依据其值对密码的安全进行分级保护即可,没有必要全盘依据官方解释来实现。再说,微软官方也没用给出一个统一的解释。故,建议遵循现有的代码实现。如果在以后,局方对这种实现有异议,可以使用微软第一种解释[ 1 ]来解释当前的实现。如果局方坚决不认同这种解释,可以尝试使用第二种解释[ 2 ]来修改代码。对于第三种解释[ 3 ],当前的Android框架并不支持,需要对框架层代码进行扩展,工作量太大,不建议做。
参考目录
- https://technet.microsoft.com/en-us/library/bb123484(v=exchg.141).aspx "Understanding Exchange ActiveSync Mailbox Policies"
- https://msdn.microsoft.com/en-us/library/windows/hardware/dn904962(v=vs.85).aspx "Policy CSP"
- https://msdn.microsoft.com/en-us/library/ee201726(v=exchg.80).aspx "Exchange ActiveSync: Provisioning Protocol"