DEV Community

Cover image for When The Bot Has To Verify Someone Is Who They Say They Are, Without Feeling Like An Interrogation
FARHAN HABIB FARAZ
FARHAN HABIB FARAZ

Posted on

When The Bot Has To Verify Someone Is Who They Say They Are, Without Feeling Like An Interrogation

Any conversational system handling account specific information, balances, personal records, case status, eventually runs into a genuine tension that has no fully clean solution, verifying a caller's identity thoroughly enough to be responsible with sensitive information, without making the verification process itself so heavy that it damages the experience for the overwhelming majority of legitimate callers who are exactly who they say they are.

This tension shows up most sharply in government and financial deployments specifically, where the cost of getting verification wrong runs in both directions simultaneously. Verify too loosely, and the system risks disclosing someone's personal information to the wrong person, a serious failure with real consequences. Verify too strictly, and every legitimate caller has to sit through a lengthy, repetitive identity check before getting to the actual reason they called, which measurably increases abandonment and frustration even among people with nothing to hide.

Why This Cannot Be Solved By Simply Asking More Questions

The instinctive first approach to strengthening identity verification is adding more required fields, full name, date of birth, account number, a security question, sometimes stacked together into a single verification gate a caller has to clear entirely before the bot will discuss anything account specific. This genuinely does increase verification rigor, and it also creates a specific, measurable cost, because each additional required field is another opportunity for a legitimate caller to stumble, misremember a detail, mishear a question over a poor connection, or simply grow impatient partway through a lengthy gate before ever reaching their actual reason for calling.

The deeper issue is that a single fixed verification bar, applied uniformly regardless of what the caller is actually asking for, treats every request as equally sensitive, when in practice the actual risk of a given request varies enormously. A caller asking for general information about office hours or service availability carries essentially no risk even if verification fails completely, since nothing sensitive is being disclosed either way. A caller asking to change registered contact details or asking for full detailed account history sits at a completely different risk level, and treating both scenarios with the same verification threshold is either unnecessarily heavy for the low risk case or dangerously light for the high risk one.

Building Verification Around Risk Tiers Rather Than One Fixed Gate

The more workable design separates what the caller is asking for into risk tiers, and ties the verification requirement to the specific tier of the specific request being made in that moment, rather than applying one uniform verification bar to the entire conversation regardless of what actually gets asked. This is closely related to a principle sometimes discussed in security design as least privilege applied conversationally, only requiring the level of verification actually justified by what is being requested right now, rather than front loading maximum verification before any information exchange happens at all.

Under this structure, general non sensitive information gets handled with no verification requirement whatsoever, since there is genuinely nothing at risk. A middle tier, covering things like general account status or upcoming appointment confirmation, might require a single lightweight verification step, confirming one or two basic identifying details already likely known only to the account holder. The highest tier, covering anything involving detailed personal records, financial transactions, or changes to registered information, requires a fuller, more rigorous verification sequence, genuinely justified by the sensitivity of what is being accessed or changed.

The instruction set governing this has to explicitly define which categories of request fall into which tier, and explicitly instruct the model to reassess the required verification level dynamically as the conversation moves between topics, rather than treating verification as a single one time gate cleared at the start of the call and then assumed to remain valid for anything discussed afterward. A caller who verified lightly to check appointment status should not automatically be treated as fully verified the moment they pivot mid conversation to asking about something in the highest sensitivity tier, and a system prompt that does not explicitly address this transition point will often let that kind of scope creep in verification status happen silently.

The Harder Problem Of Failed Verification Without Confirming What Failed

A separate and genuinely delicate design challenge involves how the system responds when verification fails, because the response itself can leak information if it is not worded carefully. A system that responds differently depending on which specific piece of verification information was wrong, confirming that the account exists but the date of birth entered does not match, for instance, inadvertently discloses that the account itself is real to someone who may not actually be the legitimate account holder, simply by the shape of the failure message they receive. This is a well recognized category of concern in security design generally, sometimes discussed under the idea that error messages should never reveal more than the minimum necessary, and it applies directly to conversational verification flows even though it rarely gets the same attention there that it gets in traditional login system design.

The safer instruction pattern treats all verification failures identically from the caller's perspective regardless of which specific detail actually caused the mismatch, something structured like, I wasn't able to verify those details, let's try again, or I can connect you with someone who can help verify your identity another way, rather than any response that implicitly confirms or denies which part of the submitted information was correct. This uniform failure response protects against exactly the kind of incremental information gathering an unauthorized caller might otherwise use, submitting slightly different guesses and learning something from how the failure message changes each time.

Balancing Genuine Security With Not Treating Every Caller Like A Suspect

The tone of verification requests matters nearly as much as their actual rigor, because a verification step delivered in a cold, procedural, interrogation like register damages trust even among the legitimate majority of callers who clear it easily. A well designed instruction set frames verification as a routine, expected part of protecting the caller's own information, something like, just to keep your information secure, can you confirm a couple of details for me, rather than a register that implies suspicion or treats the request as an obstacle the caller has to get past before being taken seriously.

This tonal framing matters more in government and financial contexts specifically, where callers are often already somewhat anxious about the interaction itself, and a verification step that reads as adversarial compounds that anxiety in a way that a warmer, more matter of fact framing does not, even when the underlying rigor of the verification process itself is identical in both cases.

Specific client verification protocols and security architecture remain confidential given the nature of this work. Happy to discuss the general approach to tiered identity verification design with anyone building conversational systems that handle sensitive personal or financial information through the proper channel.

Written by Mohammad Farhan Habib Faraz
Senior Prompt Engineer and Prompt Team Lead at PowerinAI
www.powerinai.com

Top comments (0)