敏捷性包含三个方面:清楚哪里用到了密码技术(密码资产清单,越来越多地以密码物料清单的形式表示);能够更换它(格式中带有算法标识符、协议中支持协商、不硬编码密钥长度或签名长度、代码中有抽象层);能够把更换部署出去(密钥轮换、双重发布、监控对端实际协商的结果)。
反例很常见:签名列宽度固定的数据库、假定签名为 64 字节的协议、只支持一种曲线的智能卡,以及只接受 RSA 密钥的库。敏捷性也有代价:每个可协商的选项都是攻击面,降级攻击和算法混淆攻击就说明了这一点,因此具备敏捷性的系统仍应只允许一份简短且符合当前要求的算法列表。