0

背景:我编写了一个密码生成器,其工作原理如下:

  • 生成 130 个随机位
  • 将随机位解释为 26 个元素GF(32)
  • 使用元素作为系数来构造 25 次多项式
  • 评估所有 32 个可能输入的多项式
  • 使用修改后的 base32 编码对结果进行编码

这为我提供了强密码(130 位熵),在不影响安全性的情况下,可以容忍输入密码时的一些拼写错误。

到目前为止,我已经将算法的纠错部分与ssh-add命令集成在一起,这是完美的。现在我希望我的登录密码也能顺利使用。

问题:是否可以编写一个pam模块,在其他模块看到之前更改用户输入的密码?特别是我想确保ecryptfs看到更正的密码,以便在我的算法更正用户输入的密码中的错字后可以挂载主目录?

4

1 回答 1

0

作为一个单独的模块,没有明显的方法可以做到这一点。但这可以通过对pam_unix模块的简单修改来完成。

pam_sm_authenticate()modules/pam_unix/pam_unix_auth.c以下代码的末尾找到:

    /* verify the password of this user */
    retval = _unix_verify_password(pamh, name, p, ctrl);
    name = p = NULL;

这可以修改以应用我需要的纠错:

    /* verify the password of this user */
    retval = _unix_verify_password(pamh, name, p, ctrl);
    if (retval == PAM_AUTH_ERR) {
        apply_error_correction(p);
        retval = _unix_verify_password(pamh, name, p, ctrl);
    }
    name = p = NULL;
于 2014-08-11T12:02:34.973 回答