pam模块可以在用户输入的密码被其他模块看到之前修改它吗?



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

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

这给了我强密码(130位熵),在输入密码时可以容忍一些拼写错误,而不会影响安全性。

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

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

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

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

    /* 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;

相关内容

  • 没有找到相关文章