Asjdf

一只在杭电摸鱼的小火鸡

浅谈 OPAQUE 安全远程密码

2023-11-06 大约1409字 预计阅读3分钟

继前一篇谈 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

闽ICP备2022001901号-1 公安网备图标闽公网安备35030302354429号

主题 atom-hugo-theme