Kerberos krb5p是如何加密的?

Posted

技术标签:

【中文标题】Kerberos krb5p是如何加密的?【英文标题】:How Kerberos krb5p does encryption? 【发布时间】:2020-10-16 14:13:50 【问题描述】:

全部,

我正在尝试将 NAS 驱动器安装到 Linux 虚拟机。 我需要对传输中的数据进行加密,即我希望在何时加密数据 它从 Linux 写入 NAS 驱动

https://www.dellemc.com/hu-hu/collaterals/unauth/technical-guides-support-information/products/storage/docu88304.pdf

根据上述链接,krb5p 提供数据加密。 krb5p:Kerberos 身份验证、数据完整性和数据隐私,通过在通过网络发送数据之前对数据进行加密。数据加密需要额外的

https://www.varonis.com/blog/kerberos-authentication-explained/ 我了解 Kerberos 相互身份验证的工作原理,但是一旦授予服务访问权限(在我的情况下是 NAS 驱动器),传输到 NAS 的数据如何被加密。 有人可以提供有关“加密”如何与 krb5p 一起使用的其他详细信息或文档吗? 我找不到任何其他详细信息。

根据: https://whyistheinternetbroken.wordpress.com/tag/krb5p/ 使用 krb5p 时: NFS 数据包将使用 Kerberos 配置中指定的 enctype 进行加密。

但是可以指定的可用编码类型有哪些?

我附上了一张图表,试图解释 b/w Server-KDC-Client 的消息流

【问题讨论】:

【参考方案1】:

Kerberos 允许客户端和 KDC、KDC 和服务以及客户端和服务之间的相互身份验证。这是通过各方之间的关键协议发生的。

客户端和 KDC 证明知道共享密钥,KDC 和服务证明知道不同的共享密钥,因此客户端和服务可以生成另一个随机密钥并相互同意。

换句话说,当客户端将票证发送到服务时,它包含一个密钥,双方可以在身份验证成功后使用该密钥来加密数据。在这种情况下,该密钥用于保护 NFS 流量。

选择的 enctype 有点不确定。由所有三方商定一个,每个人都有机会改变它。在实践中,由服务做出最终决定。它应该是它认为客户端可以处理的最强算法。这通常意味着 RC4、AES128 或 AES256。

【讨论】:

【参考方案2】:

Kerberos 只提供加密密钥,但它本身并不会神奇地执行加密——这必须由 NFS 客户端和 NFS 服务器自己完成。他们知道 krb5p 是经过协商的,并且会在需要时调用相应的加密/解密函数。 (更具体地说,它发生在构建 NFS 的 SunRPC 层中。)


当 Kerberos KDC 向您发出“nfs/yourserver.example.com”的票证时,该票证包括随机生成的会话密钥的两个副本:一个副本可由您解密,另一个副本可由该服务器解密。

KDC 将使用您的票证请求中指示的内容与服务器主体持有的长期密钥之间通用的最佳编码类型标记此会话密钥。通常这将是 AES256-CTS,但如果服务密钥在很长一段时间内没有更改,它也可以是 RC4 (arcfour)。

例如,

“nfs/yourserver.example.com”主体具有 aes256-cts-sha1-96、aes128-cts-sha1-96、arcfour-hmac、des3-cbc 的长期密钥。 您的客户提出 AS_REQ 表示支持 aes256-cts-sha384、aes128-cts-sha256、aes256-cts-sha1-96、aes128-cts-sha1-96。 KDC 选择 aes256-cts-sha1-96 作为会话密钥的最佳编码类型。

该指示存储在票本身中。如果客户端使用的是 MIT Krb5 软件,您可以使用kvno 手动请求服务票证(如果您还没有),然后klist -e 以查看为该票证设置的 enctypes – “skey”表示会话密钥要与之一起使用的编码类型。

因此,从 KDC 收到票证后,您将其作为 RPCSEC_GSS 身份验证过程的一部分发送到 NFS 服务器,现在您和服务器都拥有会话密钥的副本。 (只要服务票证有效,相同的会话密钥就会一直使用 - 通常为 10 小时。)


possible enctypes 的集合是:

aes256-cts-hmac-sha384-192aes128-cts-hmac-sha256-128:新的,大多数实现还不支持(而且大多数服务也没有这种类型的键)。 aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96:得到所有 Kerberos 实现的广泛支持。 camellia256-cts-cmaccamellia128-cts-cmac:AES 的不错替代品,但在实践中很少使用。 arcfour-hmac (RC4):已弃用,但仍偶尔使用。从 Linux 5.10 中删除。 des3-cbc-sha1:已弃用,但仍在实施。 des-cbc-md5des-cbc-crc:完全过时了。希望你永远不会看到那些。

(不要相信网页上说 Linux NFS 客户端只支持 DES——2010 年 v2.6.35 已修复,现在完全支持 AES。)

【讨论】:

您好,这一点不清楚:“KDC 将使用最佳 enctype 标记此会话密钥,这在您的票证请求中指示的内容与服务器的负责人。”在我的例子中,KDC 是一个 Active Directory 域控制器。那么“enctype”是我必须在我的 AD 中设置的某种类型的参数吗?因此,一旦身份验证完成,从我的 Limux VM 到 NAS 文件服务器的后续通信是否也会使用与服务器和客户端共享的相同对称服务会话密钥? @user2595169:对于 AD DC,它是使用用户帐户或计算机帐户的 msDS-SupportedEncryptionTypes 属性设置的。 (如果未设置,则仅假定为 RC4。)对于具有 SPN 的用户对象,您可以在 dsa.msc 的“高级”视图中看到与此相对应的复选框,例如“此帐户支持 AES256 加密”。几分钟前,我刚刚将一个帐户从 RC4 升级到了 AES256。 (对于计算机对象,通常在加入时设置正确的值。) @user2595169:身份验证完成后,使用该票证的所有通信都将使用相同的对称会话密钥。 (请注意,会话密钥实际上并未用于 身份验证——它只是在 身份验证期间传递。不要将它与长期服务密钥混淆!)跨度> 谢谢,这很有意义,最后一个问题 - 我在什么时候将 krb5p 设置为选项?是在将 NAS 挂载到 Linux VM 时。我可以看到在 centos 中使用了以下命令,我想我们要求 KDC 在传输过程中强制加密数据,对吗? mount -t nfs -o sec=krb5p server.example.com:/export /mnt/export 以上命令取自:serverfault.com/questions/871899/… 主要你需要在 NAS 本身上设置它,当标记文件系统以导出(/etc/exports 或等效)时,但为了安全起见,你也应该在挂载文件系统时设置它:@987654336 @。 (从技术上讲,客户端会自动选择服务器提供的最佳方法,但可能不会从 krb5p 降级保护到例如 krb5i 或 krb5。)

以上是关于Kerberos krb5p是如何加密的?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法验证是不是使用了 Kerberos?

linux中nfs怎么用kerberos加密

Kerberos:应用服务器如何解密服务票据?

Kerberos认证原理简介

Kerberos认证原理简介

Keberos认证原理