musubi

MECHANISM · 仕組み

文字ではなく、
関係を綴る暗号。

通常の暗号は「文字を別の文字に置き換える(置換)」か「文字の順序を入れ替える(転置)」のどちらかでした。 musubi はそのどちらでもありません。文字そのものを書く代わりに、文字同士の関係を書きます。

例:平文「あいしてる」、アンカー位置 = 2

  1. 1.

    暗号文には「3 番目は『し』」とだけ書く(これがアンカー)。

  2. 2.

    その他の位置は「アンカーから 2 つ後」「1 つ前」のように、 既知の文字との関係だけを書く。

  3. 3.

    受信者は、アンカー文字を起点に関係を辿り、芋づる式に「あ」「い」「て」「る」を順に復元する。

  4. 4.

    鍵を持たない第三者には、暗号文に書かれた「2 つ後」「1 つ前」がどの文字に対する 2 つ後なのか分からない。

RELATIONS · 関係の種類

3 種類の「関係」だけで意味を運ぶ

Same

同じ

参照先と同じ文字。連続する同一文字が暗号文に頻度として漏れないようにする。

{ "kind": "same", "reference": 2 }

Shift δ

ずらし

参照先からアルファベット順で δ だけずらした文字。 δ は ±|Σ|/2 の範囲に正規化される。

{ "kind": "shift", "reference": 2, "delta": -3 }

Mirror

反転

参照先のランクを 0 を中心に反転した位置の文字。回文や響きの遊びに向く。

{ "kind": "mirror", "reference": 5 }

v0.2 「織り」

編み方を増やす — 多重結びと迷い糸

CHAIN ENCODER

多重結び

v0.1 では「アンカーから 1 ステップ近い隣」を必ず参照していました。 v0.2 では、アンカーを根とするランダムな木に沿って、任意の既知の位置を参照できます。 一本の赤い糸が文字から文字へ縫い進むイメージです。

musubi encrypt -k my.key \
  --strategy chain --seed 42

NOISE INJECTION

迷い糸

暗号文に、平文に含まれないダミーの文字とその関係を織り込みます。 鍵を持つ受信者は本物の糸だけを辿って正しい平文に戻れますが、 鍵を持たない者からは平文の長さすら見えません

musubi encrypt -k my.key \
  --noise 5 --seed 42

ARCHITECTURE

実装の構成

Rust

musubi-core

Rust で書いた純粋な暗号ロジック。Alphabet / Key / Relation / Ciphertext と encrypt / decrypt の API を提供。

Rust · clap

musubi-cli

keygen / encrypt / decrypt の3 サブコマンドを持つ CLI。stdin/stdout パイプラインに対応。

WebAssembly

musubi-wasm

wasm-bindgen 経由で JS バインディングを公開。 ブラウザの crypto.getRandomValues から OsRng で乱数を取得。

実際に触ってみる

すべての処理はあなたのブラウザの中だけで完結します。 鍵もテキストも、サーバには送られません。