OPRF应用之OPAQUE增强型口令认证密钥交换协议【4】

发布时间:2026/11/3 2:44:22
OPRF应用之OPAQUE增强型口令认证密钥交换协议【4】 摘要本文是对RFC 9807所描述的增强型口令认证密钥交换协议OPAQUE的学习与梳理包括1协议整体执行流程、2注册方案和在线认证方案、3关键模块OPRF与3DH。文章保留了原标准的章节对应关系方便对照RFC原文阅读。关键词口令认证、OPAQUE、OPRF、aPAKE、3DH、密钥交换本文导读这是啥——这是RFC 9807 OPAQUE协议的配套学习笔记先总览、再分模块、最后看流程适合对照原文阅读也适合想快速搞懂原理的读者通读一遍。哪个读——密码协议研究者、安全开发工程师以及正在学习PAKE、OPRF的童鞋。阅读前建议先了解OPRF不经意伪随机函数可参考RFC 9497和DH密钥交换。啷个读——建议先看第2章的架构总览建立两个阶段和三条消息的整体印象再按兴趣深入第3、4章的两个关键模块第6、7章是完整的注册和登录流程完整详情可以随时配套阅读RFC原文。结算——OPAQUE用OPRF把口令隐蔽起来让服务器在看不到口令的情况下仍能和客户端完成双向认证并协商出会话密钥即使服务器数据库泄露攻击者也无法用彩虹表等手段批量破解口令。7. 在线认证密钥交换流程对应第6章7.1 在线认证全流程概述在线认证通过四个函数、三条消息完成客户端执行GenerateKE1创建KE1并发给服务器服务器执行GenerateKE2创建KE2发回客户端执行GenerateKE3创建KE3发出同时得到session_key和export_key服务器执行ServerFinish核验KE3得到session_key。图7-1在线认证阶段交互图复用图2-47.2 在线认证的状态和消息对应6.1节7.2.1 ClientState客户端状态struct {uint8 password[*]; // 客户端口令uint8 blind[Nok]; // OPRF盲化因子ClientAkeState clientakestate;} ClientState;7.2.2 ServerState服务器状态struct {ServerAkeState state;} ServerState;7.2.3 KE1、KE2、KE3消息这三条消息的具体字段定义见第4.2节这里不再重复。7.3 在线认证执行函数7.3.1 GenerateKE1对应6.2.1节ke1 GenerateKE1(password)功能客户端启动登录、生成KE1。关键步骤调用CreateCredentialRequest生成OPRF请求和盲化因子把口令和盲化因子存进ClientState再调用AuthClientStart生成KE1。7.3.2 GenerateKE2对应6.2.2节ke2 GenerateKE2(server_identity, server_private_key, server_public_key, record, credential_identifier, oprf_seed, ke1, client_identity)功能服务器生成KE2。关键步骤调用CreateCredentialResponse生成OPRF响应构造明文凭证调用AuthServerRespond生成AKE响应把两部分合成KE2。7.3.3 GenerateKE3对应6.2.3节(ke3, session_key, export_key) GenerateKE3(client_identity, server_identity, ke2)功能客户端完成AKE、生成KE3。关键步骤调用RecoverCredentials恢复客户端私钥和凭证再调用AuthClientFinalize校验服务器、生成KE3和会话密钥。由于OPRF是两消息协议KE3里不再包含OPRF元素。7.3.4 ServerFinish对应6.2.4节session_key ServerFinish(ke3)功能服务器完成AKE。关键步骤直接调用AuthServerFinalize核验KE3在使用session_key之前必须先确认客户端认证材料有效。7.4 OPRF和凭证相关函数对应6.3节7.4.1 CredentialRequest凭证请求struct {uint8 blinded_message[Noe];} CredentialRequest;7.4.2 CredentialResponse凭证响应struct {uint8 evaluated_message[Noe];uint8 masking_nonce[Nn];uint8 masked_response[Npk Nn Nm];} CredentialResponse;7.4.3 CreateCredentialRequest生成凭证请求(request, blind) CreateCredentialRequest(password)功能执行OPRF盲化并生成凭证请求逻辑与注册阶段的CreateRegistrationRequest一致。7.4.4 CreateCredentialResponse生成凭证响应response CreateCredentialResponse(request, server_public_key, record,credential_identifier, oprf_seed)功能执行OPRF盲化求值并把信封加密后生成凭证响应。关键步骤派生OPRF私钥、执行BlindEvaluate生成随机masking_nonce用注册记录里的掩码密钥扩展出一段与待加密内容等长的填充credential_response_pad Expand(record.masking_key, masking_nonce || CredentialResponsePad, Npk Nn Nm)masked_response xor(credential_response_pad, server_public_key || record.envelope)这样信封和服务器公钥在传输过程中是被一次性掩码保护的。这里要处理两种情形关系到能否防止用户枚举用户记录真实存在正常调用CreateCredentialResponse即可。用户从未注册可能是枚举攻击服务器若要防枚举仍必须返回看起来合法的响应用伪造记录来调用。伪造记录包括随机的client_public_key、随机的masking_key、全零的envelope。这样从攻击者的响应里无法判断用户是否存在。7.4.5 RecoverCredentials恢复凭证(client_private_key, cleartext_credentials, export_key) RecoverCredentials(password, blind, response, server_identity, client_identity)功能客户端执行OPRF去盲化并恢复私钥等凭证。关键步骤执行Finalize得到OPRF输出经KSF拉伸、Extract得到randomized_password从rpwd派生掩码密钥扩展出填充异或解密出信封和服务器公钥masking_key Expand(randomized_password, MaskingKey, Nh)credential_response_pad Expand(masking_key, response.masking_nonce || CredentialResponsePad, Npk Nn Nm)server_public_key || envelope xor(credential_response_pad, response.masked_response)调用Recover恢复客户端私钥、明文凭证和导出密钥。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询