pam共享哈希

时间:2012-06-09 14:47:09

标签: java security jaas pam

我正在研究PAM模块的设计方式,作为我自己的JAAS LoginModule的指南。令我感到惊讶的一点是,尽管用于访问散列密码的方法大部分与散列方法本身正交,但我无法找到任何可以充分利用此属性的PAM模块。是因为我忽略了一些安全问题,还是仅仅是尚未探索的问题?

为了解释一下我的意思,让我们说我们有3种不同的方法来访问哈希密码(LDAP,SQL,普通文件)和2种哈希方法(MD5,SHA1)。目前,每种访问方法都有一个或多个PAM模块,每个模块实现一个或多个这些哈希方法。添加新的哈希方法(比如BCrypt)意味着需要修改所有这些访问方法以支持新的哈希类型。更好的设计是为每个访问方法设置一个PAM模块,只需使用用户名检索散列密码,然后使用一组单独的PAM模块进行哈希验证,并在模块之间共享散列值(如密码是)。因此,如果我使用数据库存储我的密码,并使用MD5验证密码,我的配置将如下所示:

password  required  pam_sql.so
password  required  pam_md5.so

在此配置中,pam_sql从数据库中检索哈希密码(如果用户名不存在,则会失败)。然后pam_md5将散列密码与要测试的密码进行比较,如果它们不匹配则会失败。在使用Bcrypt的不同配置中,我只需要用pam_bcrypt替换pam_md5,而不必等待pam_sql的开发人员为新的哈希方法更新它。

1 个答案:

答案 0 :(得分:1)

PAM不了解密码散列或比较密码的方法(无论是否散列)。 PAM为模块提供与用户“对话”的工具,即向他们提问并从中获得答案。通常的问题当然是“你的用户名是什么?”和“你的密码是什么?”,但他们不需要。对于所有PAM关注,在决定身份验证过程的结果之前,某些模块可以向用户询问5个问题或者没有问题。

您要求的是比PAM更低层的抽象,它为处理散列密码的PAM模块子集提供公共服务。

你的问题是什么?您想实现这样的抽象并将其作为标准推广吗?