node.js crypto是否在GCM模式下使用固定标记大小?
我正在node.js中以GCM模式使用密码实现一个方案 为了检查完整性,我必须在密文中附加/前置GCM标记。然而,我不确定标签会有多大 在上,我读到大小可能不同,它实际上是GCM模式的一个参数。引用wiki,emphasis mine: 双方必须提供和使用的参数为:node.js crypto是否在GCM模式下使用固定标记大小?,node.js,encryption,aes-gcm,Node.js,Encryption,Aes Gcm,我正在node.js中以GCM模式使用密码实现一个方案 为了检查完整性,我必须在密文中附加/前置GCM标记。然而,我不确定标签会有多大 在上,我读到大小可能不同,它实际上是GCM模式的一个参数。引用wiki,emphasis mine: 双方必须提供和使用的参数为: 键和键大小 iv和iv尺寸 标签大小 但是,在中,标记大小无关。只是标记存在。从文件中引用: cipher.getAuthTag() 对于经过身份验证的加密模式(当前支持:GCM),此 方法返回一个缓冲区,该缓冲区表示 已根据给
- 键和键大小
- iv和iv尺寸
- 标签大小
我是否应该期望标签大小有所不同,并将标签大小与密文一起保存?或者我可以假设标记大小始终小于128位,并在左侧用零填充吗?node.js和browserify crypto都使用128位标记 我还没有找到实际的代码,但通过查看测试,这是显而易见的
,.Node.js在引擎盖下使用OpenSSL,因此可以在那里查看。将标记填充到128位是错误的,因为这样您就不知道需要比较多少位(不是node.js在解密过程中提供生成的标记以便您自己进行比较)。实际上,我希望生成的代码能够在node和browserify中工作。这让事情变得复杂了一点。如果身份验证标签较小,它只是完整标签的前x位。所以我假设返回128位。然后应用程序可以决定使用多少。但是请注意,GCM提供的安全性对于较小的标记大小来说会严重降低,因此您可能应该使用完整的128位。