CHAIN ENCODER
多重結び
v0.1 では「アンカーから 1 ステップ近い隣」を必ず参照していました。 v0.2 では、アンカーを根とするランダムな木に沿って、任意の既知の位置を参照できます。 一本の赤い糸が文字から文字へ縫い進むイメージです。
musubi encrypt -k my.key \ --strategy chain --seed 42
MECHANISM · 仕組み
通常の暗号は「文字を別の文字に置き換える(置換)」か「文字の順序を入れ替える(転置)」のどちらかでした。 musubi はそのどちらでもありません。文字そのものを書く代わりに、文字同士の関係を書きます。
例:平文「あいしてる」、アンカー位置 = 2
暗号文には「3 番目は『し』」とだけ書く(これがアンカー)。
その他の位置は「アンカーから 2 つ後」「1 つ前」のように、 既知の文字との関係だけを書く。
受信者は、アンカー文字を起点に関係を辿り、芋づる式に「あ」「い」「て」「る」を順に復元する。
鍵を持たない第三者には、暗号文に書かれた「2 つ後」「1 つ前」がどの文字に対する 2 つ後なのか分からない。
RELATIONS · 関係の種類
同じ
参照先と同じ文字。連続する同一文字が暗号文に頻度として漏れないようにする。
{ "kind": "same", "reference": 2 }ずらし
参照先からアルファベット順で δ だけずらした文字。 δ は ±|Σ|/2 の範囲に正規化される。
{ "kind": "shift", "reference": 2, "delta": -3 }反転
参照先のランクを 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
Rust で書いた純粋な暗号ロジック。Alphabet / Key / Relation / Ciphertext と encrypt / decrypt の API を提供。
Rust · clap
keygen / encrypt / decrypt の3 サブコマンドを持つ CLI。stdin/stdout パイプラインに対応。
WebAssembly
wasm-bindgen 経由で JS バインディングを公開。 ブラウザの crypto.getRandomValues から OsRng で乱数を取得。