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

omo*_*ser 4 authentication encryption passwords kerberos keytab

我在Linux系统上使用keytab文件来验证使用kerberos的服务.我想知道这个密码是如何实际存储到该keytab文件中的.正如我们在/ 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
Run Code Online (Sandbox Code Playgroud)

使用该keytab,我可以在不输入密码的情况下获得krbtgt.创建密钥表时,无法与AD/KDC进行通信(因此没有可用于签名的共享密钥或其他内容).

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

fra*_*ale 7

通常,基于密码的Kerberos密钥来自将特定于算法的密钥派生函数应用于用户提供的密码,并使用用户主体名称作为salt(因此具有相同密码的两个主体将不具有相同的密钥).使用的实际密钥派生函数在RFC 3961RFC 3962中定义, 但RC4配置文件在别处(由Microsoft)定义.

密钥派生是单向函数,因此没有可行的方法来"解密"密钥.

  • 并且该派生密钥存储(按原样)到该密钥表中?并且可以使用该派生密钥(按原样)对用户进行身份验证?与将纯文本密码存储到配置文件中相比,我没有看到真正的优势...... Au contraire - 我看到人们认为keytab文件是一种存储密码的"安全"方式,他们使用它们时没有足够的谨慎...... (3认同)
  • Kerberos协议基于对称(共享密钥)加密; 用户主体的密钥通常是从密码派生的这一事实是一个实现细节.当然,您*可以*只是存储密码,但实现必须在每次与KDC通信时派生密钥.密钥表仅与其上的访问控制一样安全(与普通密码文件相同); 我认为没有人曾经假装过. (3认同)
  • @frasertweedale arcfour salt始终为空.不幸的是,MS使用的AES用于源自RFC.见[here](http://mailman.mit.edu/pipermail/kerberos/2015-July/020908.html). (3认同)