继前一篇谈 SAP 协议之后,我们来浅了解一下 OPAQUE。(一个已经被WhatsAPP用于生产的新兴协议)
和 SAP 的建立于“反复打磨”上的安全性不同,OPAQUE 在设计过程中就能证明其安全性——这是经过数学证明的。
OPAQUE 被称为强 aPAKE,它通过在服务器上使用秘密加盐哈希来抵抗预计算攻击。OPAQUE 由 Stanislaw Jarecki、Hugo Krawcyzk 和 Jiayu Xu 于 2018 年提出并正式分析。OPAQUE 名称是两个加密协议名称的组合:OPRF 和 PAKE。从前一篇文章中我们已经知道 PAKE,但什么是 OPRF?OPRF 代表 Oblivious Pseudo-Random Function,又称为盲签名,盲签名实现了签名者对发送者的消息进行签名,却不能知道签名者消息的具体内容。相当于将文件放入信封,签名者在信封上对文件进行签名,而不知道具体的文件内容。
# OPAQUE 如何运作?
您可以在这里查看 OPAQUE 的最新草案以及进展。
OPAQUE 由两个阶段组成,即凭证注册和通过密钥交换登录。
# 注册
在注册之前,用户首先注册服务并选择用户名和密码。注册从我们刚刚描述的 OPRF 流程开始:Atom(客户端)和 服务端进行 OPRF 交换。交换的结果是客户端获得了一个随机密钥rwd,该密钥源自 OPRF 输出F(key, pwd),其中 key 是服务端专为 Atom 生成的 OPRF 密钥,pwd是 Atom 的密码。
在服务端发出的 OPRF 消息中,服务端发送他的 OPAQUE 身份的公钥。然后,Atom(客户端) 生成一个新的私钥/公钥对,这将是 Atom 为服务端提供的持久不透明身份,并使用rwd加密 Atom 的私钥和服务端的公钥(我们将结果称为加密信封)。然后Atom(客户端)将此加密信封连同他的公钥(未加密)发送给服务端,服务端将他提供的数据以及 Atom 的特定 OPRF 密钥秘密存储在按他的用户名(或是其他如邮箱、uid之类)索引的数据库中。
# 登陆
登录和注册非常相似。它的启动方式与注册相同——使用 OPRF 流。然而,在服务器端没有生成新的 OPRF 密钥,而是查找服务端在 Atom 注册期间创建的密钥。通过查找 Atom 的用户名(或是其他唯一ID)并检索她的记录来做到这一点。该记录包含她的公钥、她的加密信封以及服务端给 Atom 的 OPRF 密钥。
除此之外,服务端还发送了加密的信封,Atom 可以使用 OPRF 流的输出来解密该信封。(如果解密失败,Atom(客户端)会中止协议——这可能表明她输入的密码不正确,或者鲍勃不是他所说的那个人)。如果解密成功,Atom(客户端)现在就拥有了自己的密钥和鲍勃的公钥。客户端将这些信息输入到与 服务端的 AKE 协议中,而服务端又输入他的私钥和Atom的公钥,这为他们俩提供了一个新的共享密钥。
# 资源
OPAQUE 非对称 PAKE 协议的 IETF 草案 https://datatracker.ietf.org/doc/draft-irtf-cfrg-opaque/
OPAQUE paper https://eprint.iacr.org/2018/163.pdf
# OPAQUE 协议的实现
Rust 实现 https://github.com/facebook/opaque-ke 带有 python、php、ruby、lua、zig、java、erlang、golang、js 和 SASL 绑定的 c 实现 https://github.com/stef/libopaque
Go实现 https://github.com/bytemare/opaque/
# 博客文章
“让我们来谈谈 PAKE”,作者 Matthew Green https://blog.cryptographyengineering.com/2018/10/19/lets-talk-about-pake/
Stefan Marsiske 的“OPAQUE” https://www.ctrlc.hu/~stef/blog/posts/opaque.html
“为什么以及如何使用 OPAQUE 进行用户身份验证”,作者:Stefan Marsiske https://www.ctrlc.hu/~stef/blog/posts/Why_and_how_to_use_OPAQUE_for_user_authentication.html
“如何使用 OPAQUE 设置安全通道”,作者:Stefan Marsiske https://www.ctrlc.hu/~stef/blog/posts/How_to_use_OPAQUE_for_setting_up_a_secure_channel.html
“如何使用 OPAQUE 恢复静态机密”作者:Stefan Marsiske https://www.ctrlc.hu/~stef/blog/posts/How_to_recover_static_secrets_using_OPAQUE.html
Stefan Marsiske 的“遗忘伪随机函数” https://www.ctrlc.hu/~stef/blog/posts/oprf.html
“关于 OPAQUE、SASL、Google、浏览器扩展、隐私和安全”,作者:Stefan Marsiske https://ctrlc.hu/~stef/blog/posts/On_OPAQUE,_SASL,_Google,_browser-extensions,_privacy_and_security.html
Stefan Marsiske 的“宣布 SPHINX” https://www.ctrlc.hu/~stef/blog/posts/sphinx.html
Stefan Marsiske 的“宣布 Klutshnik 项目” https://ctrlc.hu/~stef/blog/posts/Announcing_Project_Klutshnik.html
# 视频
“通过 OPAQUE 和握手后身份验证进行密码身份验证的 TLS”,作者:EuroCrypt 的 Julia Hesse https://www.youtube.com/watch?v=GL4m7StDsPg
“神奇的 OPRF 以及在哪里可以找到它们”,由 Stefan Marsiske 在 CCC 营 https://media.ccc.de/v/camp2023-57085-fantastic_oprfs_and_where_to_find_them
“OPRF 的力量”,作者:Stefan Marsiske,Camp++ 0x7e7 https://www.youtube.com/watch?v=6-8EVxFGh9M