7

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

但是如何在 keytab 文件中完成呢?使用 keytab 的进程必须知道密码才能验证用户身份?!它是否使用主密码加密以便可以解密?

我正在使用它来创建一个 keytab 文件:

$ 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

使用该密钥表,我无需输入密码即可获得 krbtgt。创建密钥表时,没有与 AD/KDC 通信(因此没有可以添加用于签名或其他内容的共享密钥)。

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

4

1 回答 1

8

一般来说,基于密码的 Kerberos 密钥来自于对用户提供的密码应用特定于算法的密钥派生函数,并使用用户主体名称作为盐(因此具有相同密码的两个主体将不会具有相同的密钥)。实际使用的密钥派生函数在RFC 3961RFC 3962中定义, 但是 RC4 配置文件在其他地方(由 Microsoft)定义。

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

于 2015-11-19T06:20:13.423 回答