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

Authentication 如何将密码加密到密钥表文件中?,authentication,encryption,passwords,kerberos,keytab,Authentication,Encryption,Passwords,Kerberos,Keytab,我在Linux系统上使用keytab文件来使用kerberos对服务进行身份验证。我想知道这个密码实际上是如何存储到那个keytab文件中的。正如我们在/etc/passwd中所知道的那样,密码是在应用单向散列方法后存储的,因此无法从中计算明文密码 但是在keytab文件中是如何实现的呢?使用keytab的进程必须知道密码才能对用户进行身份验证?!是否使用主密码对其进行加密以便解密 我正在使用此选项创建密钥表文件: $ ktutil ktutil: addent -password -p my

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

但是在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中呢?如果它不是散列算法-是否可以解密?

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


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

并且该派生密钥(按原样)存储到该密钥表中?而该派生密钥可以(按原样)用于对用户进行身份验证?与将纯文本密码存储到配置文件相比,我看不出有什么真正的优势。。。相反,我看到人们认为keytab文件是存储密码的一种“安全”方式,他们使用它们时没有足够的谨慎……Kerberos协议基于对称(共享密钥)加密技术;用户主体的密钥通常来自密码这一事实是一个实现细节。当然,您可以只存储密码,但是实现必须在每次与KDC对话时派生密钥。密钥表的安全性仅与其上的访问控制相同(与普通密码文件相同);“我想从来没有人假装过不一样的样子。”弗雷瑟特维代尔arcfour盐总是空的。MS使用的AES盐来自RFC。请参阅。@Michael-O-我已经阅读了邮件列表上的链接/你的帖子。您是否找到了一种解决方案,可以在不使用msktutil的情况下创建一个可用的AES密钥表条目?@slash4,是的。这是可能的,但很烦人。实际上,我所做的是接触
msktutil
devs并要求他们添加必要的位。请参阅SF跟踪器。最终,如果您处于广告管理环境中,您将需要
msktutil
。如果还想知道如何实现这一点,请再次ping我。