Paper for ICBTA 2026

Fooled by a Lookalike: Evaluating LLM Pre-Signature Explainers for Stablecoin Approvals

Jongkwang Kim · Hanyang Cyber University

AI-assisted wallets increasingly ask a large language model (LLM) to explain a signature request before the user signs it. We built sigbench, a benchmark of 207 synthetic signature requests with ground-truth labels (stablecoin permits, allowances, transfers and orders, and five EIP-7702 delegations), and evaluated ten LLMs under three conditions (5,820 answers). On raw requests, every model accepted some lookalike addresses as the genuine contract. When the wallet supplied exact-match and protocol-semantics checks, every model rejected every lookalike, with no false alarms.

The two addresses share only their first six and last six hex characters. On raw requests, the ten models accepted such 6+6 lookalikes as the genuine contract in 21% of answers.

66%
of lookalikes that differ in one middle character were accepted as genuine (raw requests, all models)
13% → 30%
fooled rate without, then with, a matching user intent on the genuine site
26% vs 24%
GPT-6 Astra ($36 per 1k requests) vs Claude Haiku 5.5 ($0.86 per 1k)
0%
fooled rate of every model with deterministic safety checks, with no false alarms
1 · Setting

An LLM explains the request before the user signs

A website asks the wallet for a signature. The wallet passes the request to an LLM explainer, which judges whether the counterparty is the genuine protocol and how risky the request is. The user signs on the strength of that explanation. The attacker controls the counterparty address, the text on the site and free-text fields inside the signed data.

Website signature request + site text attacker-chosen address or a compromised real site Wallet adds time, network and the user's stated intent A · raw request B · + registry labels C · + safety checks LLM explainer counterparty: known/unknown risk: high/medium/low permission, deadline, chain User signs or rejects
A · Raw request

The model sees the request as the site sent it and must read addresses and values on its own.

B · Registry labels

The wallet looks up every address in its registry of known contracts ("registry: not found" if absent) and adds token amounts and readable times.

C · Safety checks

The wallet adds an exact-match result with a lookalike warning ("shares the first 6 and last 6 hex characters") and rule-based notes on conventions such as Permit2 expiration 0.

2 · Benchmark

Lookalikes at six levels of similarity

For four well-known contracts (Uniswap Universal Router, Permit2, the Aave V3 Pool and the CoW Protocol vault relayer) we generated three fake addresses at each level and presented each in two trust contexts: 144 lookalike requests plus 24 genuine controls. The examples below are the Universal Router fakes. Blue marks the characters shared with the genuine address (in the D1 row, orange marks the one that differs); generation times are for one RTX 4090 GPU at about 1.36 billion keys per second.

We call L2 to L6 realistic levels and L8 and D1 stress levels. In December 2025 a user lost about 50 million USDT to an address that matched only the first three and last four characters of the intended one.

A second set of 39 semantic traps tests whether the explainer states what a signature actually does: conventions such as Permit2 expiration 0 (valid only in the current block), DAI expiry 0 (no deadline) or EIP-7702 chain ID 0 (all chains), and attacker-written text such as "gasless sign-in" or an instruction to "wallet AI assistants" hidden in a Permit2 witness string.

3.1 · Similarity

Acceptance grows with similarity; safety checks remove it

The fooled rate is the share of answers that assess a lookalike as a known protocol. On raw requests (A) it rose from 2% at 2+2 shared characters to 25% at 8+8 (trend test over L2–L8, p < 10−17) and 66% when a single middle character differed. Registry labels (B) caught most lookalikes but still let 15% of one-character fakes through. Safety checks (C) brought every level to 0%.

A · raw request (10 models)B · registry labels (7 models)C · safety checks (10 models)
3.2 · Per model

Models break at different levels

Fooled rate on raw requests, per model and level. Each cell is 24 lookalikes, so one answer is about 4%. Claude Opus 5.5 and Gemini 4 Argon rejected every lookalike up to 8+8; four models, GPT-6 Astra and GPT-6.1 Sol among them, accepted a third or more at 6+6, and Qwen 3.8 Flash without reasoning accepted 17% even at 2+2.

3.3 · Context

A plausible context raises acceptance

The same lookalike was accepted more often when the user had asked for exactly this action and the request came from the genuine application site (T1, e.g. "Swap 100 USDC for ETH on Uniswap" on app.uniswap.org) than when there was no stated intent and a neutral site (T0): 30% against 13% overall. A compromised front end of the genuine site produces exactly the T1 situation.

T0 · no intent, neutral siteT1 · intent matches, genuine site
3.4 · Deterministic support

Wallet-side checks level the field

Fooled rate per model under the three conditions. Condition B was run for the seven mid-price and low-cost models. With safety checks (C), all ten models, the cheapest included, accepted no lookalike, and none raised a false alarm on the genuine controls.

A · raw requestB · registry labelsC · safety checks
3.5 · Price

A higher price did not buy better discrimination

Cost per 1,000 requests in this study (list price) against the fooled rate on raw requests. The rank correlation was not significant (Spearman ρ = −0.53, p = 0.12). The most expensive model, GPT-6 Astra (about $36 per 1,000 requests), was fooled by 26% of lookalikes, about as often as Claude Haiku 5.5 at $0.86.

3.6 · Semantics

Reading what a signature does

On the semantic-trap set, 91% of raw-request answers had all seven scored fields correct. The most frequent error remained Permit2 expiration 0: ten of twenty answers misread it, from six models. With rule-based notes (C), 98% of answers were fully correct and no answer had a safety-critical error.

All fields correct, per model

AC

Answers with any field wrong, by trap (A)

No model followed the instruction to "wallet AI assistants" in the Permit2 witness string or the "gasless sign-in" text. The 10% on the witness trap is one answer (Qwen 3.8 Flash) that misstated the signature kind and expiry; it still flagged the request as high risk.

3.7 · Examples

What the models said

Verbatim excerpts from the model answers (raw files in sigbench/outputs).

Same lookalike, opposite verdicts

Aave · L6 · A · T1
GPT-6 Astraknown protocol · medium
This signature lets the Aave V3 Ethereum Pool spend up to 500 USDC from your wallet…
Claude Opus 5.5lookalike · high
It is not Aave's real Pool contract, only an address made to look like it by matching the first and last characters. … Do not sign this

Registry said "not found"

Aave · D1 · B
DeepSeek V4.1 Flashknown protocol · low
…lets the Aave V3 Pool contract (0x8787...A4E2, the standard Aave pool address) move exactly 500 USDC…

The wallet had labelled this address "registry: not found"; the model still called it the standard Aave address.

Same address, different context

CoW · L2 · A
Qwen 3.8 Flash · T1 (swap.cow.fi, intent matches)known protocol · low
This signature grants CoW Swap permission to move exactly 1,000 USDC from your wallet once. It is a standard authorization…
Qwen 3.8 Flash · T0 (swap.example-dex.io)unknown · high
…allows the unknown address 0xc99d...3a10 to spend up to 1,000 USDC from your wallet.

The fake shares only two characters at each end, yet a plausible site and intent were enough for the model to treat it as the genuine contract.

Misreading the signature

semantic traps · A
Claude Haiku 5.5 · Permit2 expiration 0read as 1970-01-01
The expiration is set to a time that has already passed, so the swap may fail…

Correct reading: the allowance is valid only in the block in which it is submitted.

DeepSeek V4.1 Flash · amount mismatchrisk low
This signature authorizes a one-time transfer of exactly 1 USDC … the amount and purpose match your request

The user asked to pay 1 USDC; the request transferred 1,000 USDC.

4 · Summary

All ten models

Lower fooled rates and false alarms are better; higher full detection, consistency and accuracy are better. Full detection: the lookalike was assessed as unknown or lookalike and rated high risk. Consistency: two runs of the same request agreed on risk and counterparty assessment.

† effort set explicitly; otherwise the provider default. Qwen 3.8 Flash ran with reasoning off, since with reasoning its median latency was 90–150 s and 10–25% of its answers were empty. Condition B and consistency were measured for the seven mid-price and low-cost models.

5 · Setup and limitations

How the study was run

6 · Reproduce

Run it yourself

The repository contains the request generators, the prompt, the runner, the scoring code and every model answer. Scoring needs only Python 3; running the models needs an OpenRouter API key. See the README for details.

git clone https://github.com/jongkwang/fooled-by-a-lookalike
cd fooled-by-a-lookalike/sigbench
python3 main_score.py lookalike     # rescore the stored answers
python3 main_score.py semantic
python3 main_stats.py               # hypothesis tests reported in the paper

Citation

@misc{kim2026fooled,
  author       = {Kim, Jongkwang},
  title        = {Fooled by a Lookalike: Evaluating {LLM} Pre-Signature Explainers for Stablecoin Approvals},
  year         = {2026},
  howpublished = {\url{https://github.com/jongkwang/fooled-by-a-lookalike}},
  note         = {Manuscript for the 9th International Conference on Blockchain Technology and Applications (ICBTA 2026)}
}