ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Authelia Argon2 哈希生成命令详解:`authelia crypto hash generate argon2` 完整指南

Authelia Argon2 哈希生成命令详解:`authelia crypto hash generate argon2` 完整指南 Authelia Argon2 哈希生成命令详解authelia crypto hash generate argon2完整指南【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia导读authelia crypto hash generate argon2是 Authelia 提供的命令行子命令用于以 Argon2 算法默认 argon2id 变体生成密码的加密哈希摘要digest。该命令既是安全实验与哈希参数调优的利器也是理解 Authelia 文件认证后端File Authentication Backend密码哈希机制的入口。读完本文你将掌握该命令的全部参数语义、默认值来源、密码输入方式以及生成结果如何与 Authelia 的配置、校验体系衔接。命令定位crypto hash家族的一员在 Authelia 的命令体系中authelia crypto hash是密码哈希工具的总入口其下包含两个核心子命令见 internal/commands/crypto_hash.goauthelia crypto hash generate生成哈希摘要按算法进一步分为argon2、sha2crypt、pbkdf2、bcrypt、scrypt五个子命令authelia crypto hash validate校验一个密码是否与指定摘要匹配。本文聚焦其中的argon2子命令。它生成的摘要使用 go-crypt 中用户记录里的password字段。命令语法authelia crypto hash generate argon2 [flags]查看完整帮助authelia crypto hash generate argon2 --help全部选项解析以下选项均可在argon2子命令上直接使用选项含义默认值-h, --help显示该子命令的帮助信息--i, --iterations intArgon2 迭代次数参数 t3-k, --key-size int派生密钥长度单位字节参数 K32-m, --memory int内存用量单位 KiB参数 m65536即 64 MiB-p, --parallelism int并行度 / 线程数参数 p4--profile string使用的预设配置可选low-memory和recommended空-s, --salt-size int盐长度单位字节16-v, --variant string变体可选argon2id、argon2i、argon2dargon2id选项与配置项的映射关系这些选项并非孤立存在而是被映射到 Authelia 配置中authentication_backend.file.password.argon2对应的字段。在 internal/commands/util.go 的getCryptoHashGenerateMapFlagsFromUse函数中可以看到明确映射--variant→password.argon2.variant--iterations→password.argon2.iterations--memory→password.argon2.memory--parallelism→password.argon2.parallelism--key-size→password.argon2.key_length--salt-size→password.argon2.salt_length这意味着该命令在执行前会通过 internal/commands/crypto_hash.go 的PreRunE链依次完成设置默认配置 → 将命令行旗标映射进配置 → 加载配置文件 → 校验密码相关配置段最终才执行真正的哈希生成逻辑。因此即使你不传任何参数命令也会以与 Authelia 运行时完全一致的默认参数工作。关于--profile预设--profile在源码中作为 argon2 子命令的便捷旗标注册见 internal/commands/crypto_hash.go用于以预设方式快速指定参数组合可用选项为low-memory与recommended。从源码结构看它并不参与上面的逐项旗标映射其具体参数组合由底层密码学库实现决定当需要精确控制时建议直接使用-i/-m/-p/-k/-s等参数手动指定。继承自父命令的选项argon2子命令还继承了父命令generate的一组通用选项主要用于控制密码的获取方式与随机密码生成-c, --config strings 配置文件或目录更多信息参见 authelia -h authelia config默认 [configuration.yml] --config.experimental.filters strings 应用于所有配置文件的过滤器列表 --no-confirm 跳过密码确认提示 --password string 手动提供密码而非使用终端交互提示 --random 使用随机生成的密码 --random.characters string 为随机字符串指定显式字符集 --random.charset string 随机密码字符集可选 ascii、alphanumeric、alphabetic、numeric、numeric-hex、rfc3986默认 alphanumeric --random.length int 随机字符串的字符长度默认 72密码获取的优先级顺序从 internal/commands/crypto_hash.go 的cmdFlagsCryptoHashGetPassword实现可以看出密码来源按以下优先级确定--random生成随机密码可配合--random.charset、--random.characters、--random.length微调--password从命令行直接传入明文密码交互式输入否则在终端提示Enter Password:随后提示Confirm Password:进行二次确认若两次输入不一致则报错退出。使用--no-confirm可跳过确认步骤便于脚本化。需要说明的是默认--random.charset为alphanumeric、--random.length为72这些常量的定义同样位于 internal/commands/const.go 中。实战示例1. 交互式生成最安全的方式authelia crypto hash generate argon2命令会提示输入并确认密码随后输出类似Digest: $argon2id$v19$m65536,t3,p4$salt$hash2. 通过--password传参适合脚本authelia crypto hash generate argon2 --password My$ecretPssw0rd注意这种方式下密码会出现在进程列表与 shell 历史中仅在可信环境使用。3. 跳过确认提示authelia crypto hash generate argon2 --password My$ecretPssw0rd --no-confirm4. 生成随机密码并直接输出摘要authelia crypto hash generate argon2 --random输出会包含随机密码本身及其 URL 编码形式当二者不同时随后是摘要Random Password: aB3x... Random Password (URL Encoded): aB3x... Digest: $argon2id$v19$m65536,t3,p4$salt$hash5. 使用预设 Profileauthelia crypto hash generate argon2 --profile recommended authelia crypto hash generate argon2 --profile low-memory6. 自定义全部参数authelia crypto hash generate argon2 \ --variant argon2id \ --iterations 4 \ --memory 131072 \ --parallelism 2 \ --key-size 32 \ --salt-size 167. 结合配置文件authelia crypto hash generate argon2 -c /path/to/configuration.yml加载配置文件后命令会以配置中的authentication_backend.file.password相关设置作为参数基础命令行旗标仍可覆盖。默认值的来源该命令的所有默认值并非硬编码在命令实现中而是取自 Authelia 的密码默认配置DefaultPasswordConfig定义于 internal/configuration/schema/authentication.govar DefaultPasswordConfig AuthenticationBackendFilePassword{ Algorithm: argon2, Argon2: AuthenticationBackendFilePasswordArgon2{ Variant: argon2id, Iterations: 3, Memory: 64 * 1024, // 65536 KiB Parallelism: 4, KeyLength: 32, SaltLength: 16, }, ... }对应 internal/commands/crypto_hash.go 中newCryptoHashDefaults与newCryptoHashGenerateSubCmd对 argon2 分支的初始化逻辑。因此命令默认行为与 Authelia 文件认证后端默认行为完全一致。底层实现原理生成流程的最终执行位于runCryptoHashGenerateinternal/commands/crypto_hash.go若配置中AuthenticationBackend.File为空直接报错authentication backend file is not configured按前述优先级取得密码调用authentication.NewFileCryptoHashFromConfig实现于 internal/authentication/file_user_provider.go将配置参数传入go-crypt的 argon2 构造器hash, err argon2.New( argon2.WithVariantName(config.Argon2.Variant), argon2.WithT(config.Argon2.Iterations), argon2.WithM(uint32(config.Argon2.Memory)), argon2.WithP(config.Argon2.Parallelism), argon2.WithK(config.Argon2.KeyLength), argon2.WithS(config.Argon2.SaltLength), )对密码执行hash.Hash(password)得到摘要后以digest.Encode()输出 PHC 格式字符串。这也印证了该命令与 Authelia 运行时使用的哈希链路完全同源用户在登录、修改密码等场景中写入用户数据库的哈希与命令行生成的哈希遵循同一套算法与编码规则。参数校验边界在执行前配置校验器 internal/configuration/validator/authentication.go 会对 Argon2 各参数做范围校验越界即报错相关边界包括iterations需大于 0存在库级最小/最大值约束parallelism至少为 1memory至少为 8 KiB且不能低于parallelism × 8即默认并行度 4 时内存至少 32 KiBkey_length至少为 4 字节salt_length至少为 1 字节。schema 中internal/configuration/schema/authentication.go同时标注了 JSON Schema 范围memory最大 4294967295、parallelism最大 16777215、key_length与salt_length最大 2147483647。若配置加载的哈希参数非法命令会拒绝执行并给出明确错误。与配置文件的关系在 Authelia 的配置模板 internal/configuration/config.template.yml 中文件认证后端的密码哈希配置示例如下# file: # path: /config/users_database.yml # password: # algorithm: argon2 # argon2: # variant: argon2id # iterations: 3 # memory: 65536 # parallelism: 4 # key_length: 32 # salt_length: 16模板注释明确指出这些选项拥有合理的默认值且涉及安全影响强烈建议保留默认值如需调整务必先阅读密码调优相关文档。命令行工具与这套配置共用同一默认值与校验逻辑因此你可以在命令行中安全地试验参数组合再决定是否应用到生产配置。校验生成的摘要生成摘要后可以使用配套的validate子命令确认密码与摘要匹配authelia crypto hash validate $argon2id$v19$m65536,t3,p4$salt$hash该命令会提示输入密码或使用--password并通过crypt.CheckPassword校验输出The password matches the digest.或The password does not match the digest.实现见 internal/commands/crypto_hash.go 的CryptoHashValidateRunE。这样即可验证命令行生成的哈希能被 Authelia 的认证链路正确识别。小结authelia crypto hash generate argon2是一个参数完备、与配置体系深度耦合的哈希生成工具默认值来自DefaultPasswordConfig、参数直接映射到authentication_backend.file.password.argon2配置键、底层与 Authelia 运行时共用同一套go-cryptargon2 实现。无论是为文件认证后端生成用户哈希还是调优并验证 Argon2 参数该命令都能提供与生产环境完全一致的行为。延伸阅读父命令参考authelia crypto hash generate顶层命令参考authelia crypto hash命令源码internal/commands/crypto_hash.go默认配置定义internal/configuration/schema/authentication.go哈希构造实现internal/authentication/file_user_provider.go参数校验逻辑internal/configuration/validator/authentication.go配置文件模板internal/configuration/config.template.yml【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表