密码如何加密到密钥表文件中?

How is a password encrypted into a keytab file?

我在 Linux 系统上使用 keytab 文件通过 kerberos 验证服务。我想知道这个密码实际上是如何存储到那个密钥表文件中的。正如我们在 /etc/passwd 中所知,密码是在应用单向哈希方法后存储的 - 因此无法从中计算明文密码。

但是密钥表文件中是如何完成的?以某种方式使用密钥表的进程必须知道密码才能对用户进行身份验证?!是否使用主密码加密以便可以解密?

我正在使用它来创建密钥表文件:

$ ktutil
ktutil:  addent -password -p my_user@MYREALM -k 1 -e rc4-hmac
Password for my_user@MYREALM:
ktutil:  wkt my_user.keytab
ktutil:  quit

有了那个keytab,我不用输入密码就可以得到一个krbtgt。创建密钥表时,没有与 AD/KDC 的通信(因此没有可以添加用于签名或其他内容的共享机密)。

那么密码是如何加密到keytab中的呢?如果它不是哈希算法 - 是否可以解密它?

一般来说 基于密码的 Kerberos 密钥来自于对用户提供的密码应用算法特定的密钥派生函数,并使用用户 principal name 作为盐(这样两个具有相同密码的主体将不会有相同的密钥)。实际使用的密钥派生函数在 RFC 3961 and RFC 3962 中定义 然而 RC4 配置文件在别处定义(由 Microsoft)。

密钥派生是一种单向函数,因此没有可行的方法来“解密”密钥。