On 10 August 2026, a group of researchers published a paper with a vanity domain and a blunt title: Stealing Reasoning Traces from Proprietary LLM APIs. The claim fits in a sentence. The encrypted reasoning blocks that Anthropic, OpenAI and Google hand back to API clients are not bound to your session, your account, or even the model that produced them. Hand one to a weaker model in the same family, ask it politely to transcribe what it can see, and it reads the contents out in plain text.
Most teams filed this as AI security research about somebody else’s infrastructure. It is not. If your application calls a reasoning model over an API, you have almost certainly been persisting those blocks in your logs, your database, your observability traces and possibly your public repositories, on the entirely reasonable assumption that they were ciphertext. They were closer to an encoding.
TL;DR
- Researchers showed that encrypted chain-of-thought blocks returned by Anthropic, OpenAI and Google APIs are interchangeable across sessions, users and models within the same provider, consistent with a single global encryption key.
- The attack needs no cryptanalysis: replay a frontier model’s encrypted trace into a weaker sibling model, jailbreak that weaker model, and it transcribes the stronger model’s hidden reasoning verbatim. Claude Haiku 4.5 proved the most co-operative.
- Decoding 315,320 blocks scraped from public repositories recovered 367 personal data artefacts and 182 credentials that developers believed were unreadable.
- The nastier vector is invisible prompt injection: a payload hidden inside an encrypted block passes your log review, your WAF and your human approval step, then lands in a context models treat as high-trust.
- Action for teams: reclassify stored reasoning blocks as plaintext, audit where they are persisted and published, rotate exposed credentials, and never accept a reasoning block from an untrusted source.
What providers were actually doing
Reasoning models generate a long internal working-out pass before producing an answer, and providers have strong commercial reasons to hide it. The obvious design is to keep traces server-side behind an opaque reference, but that costs storage and forces session affinity. The chosen design was cheaper: encrypt the trace, return the ciphertext to the client, and require the client to send it back on the next turn. The provider stays stateless. The client carries state it cannot read.
That is defensible only if the key is scoped. If every session, every account and every model in a family decrypts with the same key, the ciphertext stops being a confidentiality boundary. It becomes an obfuscated wire format, and any party inside the ecosystem can act as a decryption oracle for any other party’s blocks.
This was not an out-of-nowhere discovery. Johns Hopkins cryptographer Matthew Green reported the single-global-key hypothesis and a timing side channel through vendor bug bounty programmes in May 2026, and Will Smidlein independently demonstrated cross-account and cross-model replay against Anthropic and OpenAI in June. The August paper from Alexander Panfilov and co-authors is the systematic write-up with numbers attached.
The attack is a request, not an exploit
There is no cryptographic break here. The researchers attach an encrypted block from a strong model to a conversation with a weaker model from the same provider, then instruct it to continue, and transcribe the reasoning attached to this turn verbatim. The weaker model has the key material in its serving path and considerably lighter safety training. It complies.
The paper documents four consequences: circumventing anti-distillation protection, extracting private data from blocks published in public repositories, surfacing hazardous content that safety layers stripped from the answer but left in the reasoning, and prompt injection carried entirely inside an encrypted payload.
Vendor status is genuinely unclear at the time of writing. Some coverage reports that all three providers acknowledged and patched; other coverage states no architectural fix has been confirmed. Until your provider tells you in writing what the key scope now is, take the researchers’ operating assumption: treat encrypted reasoning as readable.
Four ways this lands on a product team
1. Your logs contain plaintext you have never read
The 367 personal data artefacts and 182 credentials recovered from public repositories came from developers doing something completely ordinary: committing agent transcripts, evaluation fixtures and bug reports that happened to include reasoning blocks. Nobody redacted them because there was nothing visible to redact. A base64-looking blob does not trip a secret scanner or a reviewer’s instincts.
The same blind spot exists inside your perimeter. LLM observability platforms capture full payloads by default, conversation tables store whole turns, CI artefacts keep agent runs for weeks. Every one of those stores has a retention policy and an access model built on the belief that the reasoning field was opaque.
2. Invisible prompt injection defeats your review layer
This is the vector that should worry anyone running agents. A malicious instruction inside an encrypted reasoning block is invisible to log inspection, to content filtering, to a human approving a tool call, and to the reviewer reading the pull request that contains the fixture. It then arrives in the part of the context models are trained to treat as their own prior thinking, which is close to the highest-trust position available.
If your architecture accepts reasoning blocks from anywhere other than your own immediately preceding API response, you have an unmonitored injection channel into a tool-enabled agent. Same structural problem as indirect prompt injection, except the payload is now unreadable by design.
3. Anti-distillation was never your moat
Plenty of AI products assume competitors cannot see how the model reached an answer. That protection was rented from your provider, and it has just been shown to be climbable. If your differentiation rests on prompt scaffolding whose effects are legible in the trace, move the durable value to proprietary data, workflow integration and evaluation quality.
4. You cannot audit what you were told not to read
We wrote earlier this year about encrypted sub-agent prompts and the auditability gap. This sharpens the point. Teams accepted opaque blobs inside their own trust boundary because a vendor said the contents were not theirs to inspect. Those contents turned out to be readable by anyone with an API key: unauditable by you, legible to an attacker.
The compliance problem nobody has costed
Under GDPR, personal data is personal data whatever format it sits in. Encryption is a security measure, not an exemption, and encryption with a key held by every other customer of the same provider is a weak one. If your reasoning blocks contain user-supplied personal data in recoverable form, and for most applications they will, they fall inside your records of processing, retention schedules, access controls and erasure obligations.
Practically: a subject access or deletion request that resolves against your conversation table but ignores your trace store is incomplete, and the standard incident defence, that the exposed field was encrypted, does not survive contact with this research.
What to do this week
- Inventory the persistence points. Application logs, LLM observability tooling, conversation tables, agent transcripts, evaluation datasets, CI artefacts, support tickets, public repositories. Anywhere a full API response is written to disk.
- Reclassify reasoning fields as plaintext model output, with the retention window and access controls you already apply to prompts and completions.
- Search your public surface. Grep repositories, gists and issue trackers for reasoning blocks in committed fixtures and bug reports, then rotate any credential that could plausibly have entered a model context.
- Strip reasoning before it leaves your boundary. Not to browser clients, not to analytics, not into customer webhook payloads.
- Refuse untrusted reasoning blocks from request bodies, webhooks, uploads or scraped sources, and never replay one across models or providers. Only your own immediately preceding response is a legitimate origin.
- Extend secret scanning to model output, before storage and before commit.
- Put questions to your vendor in writing. Is the key scoped per session or per account? Is server-side trace storage available? What is the disclosure commitment if the scope changes again?
The engineering change is usually small. Most teams are one middleware function from a safe default:
// Persist the turn, never the provider's opaque reasoning payload
const { reasoning, encrypted_content, ...safe } = response;
await conversations.append(conversationId, safe);
Holding the block in memory for the next turn is fine. Writing it to durable storage, shipping it to a third-party observability vendor or committing it to a repository is the part that now carries risk.
The pattern worth learning
Strip out the specifics and this is a familiar shape: an abstraction that moved responsibility without moving accountability. Serverless moved concurrency limits. Managed CI moved workflow permissions. Client-direct databases moved authorisation into a rules file. Encrypted reasoning moved a confidentiality guarantee into a key management decision your team never got to see, review or test.
The lesson for architects is that “encrypted” is not a property of data. It is a property of a key scope. When a vendor hands you a blob you cannot inspect and asks you to carry it, ask who else holds the key and what your systems do if the contents turn out to be legible. If you cannot answer, do not put the blob anywhere that outlives the request.
Need a second pair of eyes on your AI stack?
REPTILEHAUS builds and secures production AI systems for clients across Ireland and Europe, covering agent architecture, data handling, LLM observability and the governance underneath both. If you are not certain what your application writes to disk after every model call, that audit is short work with a high return. Get in touch.
📷 Photo by FlyD on Unsplash

