Solaris 开发者安全性指南

在 GSS-API 中处理包装大小问题

使用 gss_wrap() 来包装消息会增加要发送的数据量。由于所保护的消息包需要适应指定的传输协议,因此 GSS-API 提供了 gss_wrap_size_limit() 函数。gss_wrap_size_limit() 用于计算可以包装的消息的最大大小,使其不至于因变得过大而不适用于该协议。应用程序可以在调用 gss_wrap() 之前截断超出该大小的消息。在实际包装消息之前,请始终检查包装大小限制。

包装大小的增加取决于以下两个因素:

缺省的 QOP 会因不同的 GSS-API 实现而异。因此,即使指定了缺省的 QOP,所包装消息的大小也会有所不同。下图说明了这种可能性:

该图显示选定的 QOP 如何影响消息大小。

无论是否应用了保密性,gss_wrap() 仍然会增加消息的大小。gss_wrap() 可将 MIC 嵌入到所传送的消息中。但是,对消息进行加密会进一步增加消息的大小。此过程如下图所示。

该图显示使用保密性会增加消息大小。

如果 gss_wrap_size_limit() 成功完成,则将返回 GSS_S_COMPLETE。如果指定的 QOP 无效,则将返回 GSS_S_BAD_QOP包装和发送消息中提供了一个说明如何使用 gss_wrap_size_limit() 返回原始消息最大大小的示例。

成功完成此调用并不一定保证 gss_wrap() 可以保护长度为 max-input-size 个字节的消息。能否保护消息取决于调用 gss_wrap() 时系统资源是否可用。有关更多信息,请参见 gss_wrap_size_limit(3GSS) 手册页。