Obsidian

Encryption, under scrutiny.

A Rust cryptography research project. The ambition is to beat the best. The evidence isn't there yet.

Experimental. Not for secrets. R1 is a composition baseline, not a new proven primitive. No audit, no claim of mathematical unbreakability.

Test bench

Loading Rust engine...

Work with sample text in this page. Encryption and decryption run locally in WebAssembly. No data upload, analytics, or saved keys.

R1 is an unaudited research composition. It is slower and larger in the first benchmark.

Keep the key to decrypt later. Show key reveals it on this screen only; hide it before sharing your screen. Keys are not saved. This page cannot recover a lost key. Nonces are generated automatically.

Waiting for the Rust engine.

Output

No operation yet.

Maximum plaintext: 1 MiB. The envelope includes its construction, nonce and authentication tag. A wrong key or changed envelope must fail.

First results

R1 does not beat either baseline.

First native release-build run, 1 MiB messages, 12 operations per construction. Throughput includes allocation and the envelope. These are a single machine's observations, not a universal ranking.

ConstructionEncrypt MiB/sDecrypt MiB/sOverhead
Obsidian R1108.4111.064 B
XChaCha20-Poly13051,010.11,136.048 B
AES-256-GCM1,041.31,068.336 B

All use 32-byte master keys. Overhead includes the 8-byte version/mode header. Benchmarks do not measure cryptographic strength. Raw measurements · Environment

Research, not a claim

What R1 tests

Can a simple hash-based, authenticated construction be a useful baseline for further work? R1 separates its stream and authentication keys with HKDF-SHA-256, generates counter blocks with HMAC-SHA-256, and authenticates before releasing plaintext.

The first result is negative: more overhead and lower throughput. That stays in the record.

What a proof would need

Precise privacy and integrity games, explicit primitive assumptions, quantitative bounds, composition analysis and independent scrutiny. We have proof obligations, not a finished proof.

Known ways it fails

Reuse a key and nonce and the stream repeats. The attack bench demonstrates plaintext recovery from that mistake. Raw APIs cannot enforce fresh nonces. The browser generates a new nonce per encryption.

It does not hide length, prevent replay, establish keys, sign messages, or protect a compromised browser. Memory erasure is not guaranteed.

Not the same job

AES encrypts data. RSA supplies public-key operations. ML-KEM establishes shared keys, while ML-DSA and SLH-DSA sign. A symmetric envelope cannot replace all of them or win a meaningful single leaderboard.

Mathematically uncrackable?

Perfect secrecy is possible under strict one-time-pad assumptions: a uniformly random, independently shared key as long as the message, never reused. It doesn't provide authentication or solve key delivery. A short reusable key cannot offer perfect secrecy for arbitrary longer messages. R1 makes no unconditional, quantum-proof, or best-on-earth claim.

Full design and threat model · Attack record

Primary references