{"id":349,"date":"2026-09-05T04:21:42","date_gmt":"2026-09-05T04:21:42","guid":{"rendered":"https:\/\/neodata.com.uy\/labs\/the-server-does-not-need-the-password\/"},"modified":"2026-09-05T04:21:42","modified_gmt":"2026-09-05T04:21:42","slug":"the-server-does-not-need-the-password","status":"publish","type":"post","link":"https:\/\/neodata.com.uy\/labs\/the-server-does-not-need-the-password\/","title":{"rendered":"The server does not need the password."},"content":{"rendered":"<p><!--\nWORDPRESS CONTENT: editorial notes removed\n--><\/p>\n<p class=\"nlabs-kicker\">PASSWORD-AUTHENTICATED KEY EXCHANGE<\/p>\n<h2 id=\"what-opaque-changes-about-registration-login-and-server-compromise\">What OPAQUE changes about registration, login and server compromise.<\/h2>\n<p>A conventional password service receives a password, transforms it with a password-hashing function and later compares a derived verifier. TLS protects the path, but the server still becomes the place where password processing and password-equivalent records accumulate.<\/p>\n<p>OPAQUE changes the protocol boundary. It is an augmented password-authenticated key exchange in which the client and server establish a mutually authenticated session key without disclosing the password to the server, including during registration.<\/p>\n<p>That is a stronger architecture. It is not the end of password risk.<\/p>\n<h2 id=\"an-oprf-before-the-key-exchange\">An OPRF before the key exchange<\/h2>\n<p>OPAQUE combines an oblivious pseudorandom function with an authenticated key exchange. The client blinds a value derived from the password. The server evaluates it under a secret OPRF key without learning the client&#8217;s input. The client unblinds the response and obtains a deterministic value known only to a client holding the password.<\/p>\n<p>That value is used to protect an envelope containing client-side credentials and configuration. During login, the correct password lets the client recover the envelope and continue the authenticated key exchange.<\/p>\n<p>The server participates in every evaluation but does not receive the password or the unblinded OPRF output.<\/p>\n<h2 id=\"registration-is-a-cryptographic-ceremony\">Registration is a cryptographic ceremony<\/h2>\n<p>At registration, the client creates the material that will later authenticate it. Depending on the instantiation, this includes a private authentication key protected inside the envelope and a public key stored by the server.<\/p>\n<p>The server stores a registration record rather than a conventional password hash. The record contains enough information to run future OPRF evaluations, return the envelope and authenticate the client through the selected AKE.<\/p>\n<p>Registration must itself occur in an authenticated context. OPAQUE can hide the password from the service, but it cannot tell a new client whether it is registering with the intended service unless that relationship is established by some other means.<\/p>\n<h2 id=\"the-envelope-makes-the-client-state-recoverable\">The envelope makes the client state recoverable<\/h2>\n<p>The envelope lets a client reconstruct secret authentication state from the password and the server&#8217;s OPRF response. The device does not need to preserve that state between sessions.<\/p>\n<p>This gives OPAQUE an important deployment property: a user can authenticate from a new client using only the password, while the server never stores the client&#8217;s private key in clear form.<\/p>\n<p>It also means envelope formatting, associated context and key derivation are part of the protocol. A ciphertext that decrypts is not sufficient. The recovered configuration must be bound to the intended server identity and ciphersuite.<\/p>\n<h2 id=\"server-compromise-is-improved-not-erased\">Server compromise is improved, not erased<\/h2>\n<p>An attacker who steals an OPAQUE registration record does not obtain a reusable password verifier in the conventional sense. The construction prevents precomputation attacks and aims to make each password guess require work tied to the compromised server state.<\/p>\n<p>A low-entropy password remains guessable. OPAQUE does not create entropy that the user did not choose. After a full server compromise, an attacker can perform an offline dictionary attack whose success is limited by the password distribution and the protocol&#8217;s cost.<\/p>\n<p>The accurate claim is therefore not that a database breach becomes harmless. It is that the server learns less during normal operation and the stolen record provides the best achievable resistance for this class of password protocol.<\/p>\n<h2 id=\"the-server-key-is-part-of-every-records-security\">The server key is part of every record&#8217;s security<\/h2>\n<p>The OPRF private key is high-value service material. If one key is used across many accounts, its compromise changes the attacker&#8217;s ability to test guesses against all corresponding records.<\/p>\n<p>Deployments need a plan for generation, storage, rotation and recovery of that key. Losing it can make every associated envelope unrecoverable. Exporting it widely for availability enlarges the compromise boundary.<\/p>\n<p>An HSM may protect the OPRF key, but only if it supports the required group operation or a carefully designed remote evaluation interface. Treating the OPRF as an ordinary signing operation is not generally correct.<\/p>\n<h2 id=\"mutual-authentication-needs-key-confirmation\">Mutual authentication needs key confirmation<\/h2>\n<p>OPAQUE&#8217;s AKE confirms that the client recovered the correct credentials and that the server holds its corresponding secret. Both parties derive session keys bound to the exchange.<\/p>\n<p>An implementation must not release application data before the required authentication and key-confirmation steps complete. Error handling should avoid distinguishing an unknown account from a wrong password in ways that enable enumeration.<\/p>\n<p>The protocol output is key material, not a boolean password result. Applications should define which exported key is used for the channel, which context it is bound to and how failure is represented.<\/p>\n<h2 id=\"recovery-can-bypass-the-protocol\">Recovery can bypass the protocol<\/h2>\n<p>Password recovery is usually an administrative replacement of the cryptographic enrollment. If a help desk can reset an account after weak identity checks, it becomes an alternate authentication protocol with different guarantees.<\/p>\n<p>The new password requires a new registration record and envelope. The system must decide what happens to active sessions, remembered devices, recovery codes and old server keys.<\/p>\n<p>OPAQUE improves the primary ceremony. It cannot make an easier recovery ceremony equally strong.<\/p>\n<h2 id=\"multi-factor-authentication-remains-separate\">Multi-factor authentication remains separate<\/h2>\n<p>A password-authenticated key exchange proves knowledge of the password-derived secret and authenticates the service. It does not prove possession of a separate device or resistance to a real-time phishing relay.<\/p>\n<p>A second factor can be incorporated above the established channel, but its binding must be explicit. A six-digit OTP submitted after OPAQUE can still be relayed if the user is interacting with an attacker-controlled origin.<\/p>\n<p>The result should be evaluated as one authentication ceremony, not as independent components whose strengths are simply added together.<\/p>\n<h2 id=\"migration-needs-dual-records\">Migration needs dual records<\/h2>\n<p>A service cannot derive an OPAQUE registration record from an existing salted password hash. The client must participate with the real password.<\/p>\n<p>One migration strategy enrolls an OPAQUE record after a successful legacy login. Until that happens, both paths coexist. The service must prevent downgrade, preserve account rate limits and decide when the legacy verifier can be deleted.<\/p>\n<p>As with other cryptographic transitions, supporting the new algorithm is easier than safely removing the old one.<\/p>\n<h2 id=\"constrained-clients-change-the-cost-model\">Constrained clients change the cost model<\/h2>\n<p>OPAQUE requires group operations, hashing, authenticated encryption and the chosen AKE. This is practical on general-purpose clients, but smart cards and small embedded devices may lack the curve or API needed for an OPRF.<\/p>\n<p>Offloading only part of the operation can expose the password-derived input or the envelope key. A useful implementation profile should state exactly which component sees each intermediate value and where rate limiting is enforced.<\/p>\n<h2 id=\"the-password-becomes-an-input-not-a-server-secret\">The password becomes an input, not a server secret<\/h2>\n<p>OPAQUE does not abolish passwords. It changes what the server needs to know about them.<\/p>\n<p>The client uses the password to recover its own authentication material. The server contributes a keyed oblivious function and authenticates the resulting exchange. Registration, key custody, recovery and migration remain essential.<\/p>\n<p>The strongest result is architectural: the service can authenticate a password user without making normal server operation depend on receiving that password.<\/p>\n<hr \/>\n<h2 id=\"references\">References<\/h2>\n<ol type=\"1\">\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9807\/\">RFC 9807: The OPAQUE Augmented PAKE Protocol<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9497\/\">RFC 9497: Oblivious Pseudorandom Functions<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9383\/\">RFC 9383: SPAKE2+, an Augmented PAKE<\/a><\/li>\n<li><a href=\"https:\/\/neodata.com.uy\/labs\/six-digits-are-not-the-authentication-ceremony\/\">NEODATA Labs: Six digits are not the authentication ceremony<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>OPAQUE lets a client and server establish a mutually authenticated key without disclosing the password to the server. Registration, recovery and server-key custody still define the system&#8217;s real boundary.<\/p>\n","protected":false},"author":2,"featured_media":347,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"nlabs_article_type":[],"class_list":["post-349","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-research"],"_links":{"self":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts\/349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/comments?post=349"}],"version-history":[{"count":0,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts\/349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/media\/347"}],"wp:attachment":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/media?parent=349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/categories?post=349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/tags?post=349"},{"taxonomy":"nlabs_article_type","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/nlabs_article_type?post=349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}