文字の式で暗号を作ろう!について

*1の夏期休業向け数学ワークブックの巻末に掲載されていたもの。

暗号化アルゴリズム

0.五十音と単項の対応表を用意する
1 2 3 ……
a ……
b ……
c ……
d ……
e ……

"あ"ならば"a"、"き"ならば"2b"、濁点半濁点と句読点が、や行わ行の隙間に押し込めてある。

2.平文中の文字を対応表に基づいて置き換える

「さいかく」ならば「3a,b,2a,2c」

3.項を加算記号でつなぐ

「3a,b,2a,2c」ならば「3a+b+2a+c」

4.同類項をまとめる

「3a+b+2a+2c」ならば「5a+b+2c」

5.完成

平文「さいかく」を暗号化した暗号文は「5a+b+2c」となる。

鍵生成アルゴリズム

0.失われた情報を補うための鍵を作る

「5a+b+2c」をそのまま対応表に基づいて逆変換すると「ないく」になってしまい、平文が得られない。

1.文字式中の文字について、係数をどう分割するかを添える

この場合、「5a」を「3a+2a」に分割しなければいけないため、「3 2 a」という情報を添える。("文字のカギ"と称する)

2.正しく分割された文字式に対して、項の順番をどうするか添える

「3a+2a+b+2c」では「さかいく」になってしまうので、これが「さいかく」になるように「1 3 2 4」という情報を添える。("数字のカギ"と称する)

3.完成

「3 2 a」「1 3 2 4」という情報を、暗号文「5a+b+2c」と共に送出する。

復号アルゴリズム

1.係数分割

「3 2 a」を用いて「5a+b+2c」→「3a+2a+b+2c」

2.順列入れ替え

「1 3 2 4」を用いて「3a+2a+b+2c」→「3a+b+2a+2c」

3.逆変換

対応表を用いて「3a+b+2a+2c」→「さ+い+か+く」

4.完成

平文「さいかく」を得る。工程2と3は入れ替えてもよい。

暗号なの?

暗号文の衝突

暗号文が全く同じになる例は容易に挙げることが出来る。
アナグラムの関係にある平文は全て同じ暗号文になるし、「あかさか」も「はか」も「なさ」も「や」も「8a」である。
前者は"数字のカギ"、後者は"文字のカギ"がこれらを区別する。

もしかして情報過多なんじゃ

「あいかき゛」という平文を暗号化すると、
「あいかき゛」→「a+b+2a+2b+8b」→「3a+11b」という暗号文、「1 2 a」「1 2 8 b」という文字のカギ、「1 3 2 4 5」という数字のカギが生成される*2ので、これを送出する、が、このとき、平文を得るのに暗号文そのものを使う必要が無い。
「1 2 a」「1 2 8 b」という文字のカギだけで、すでに「a,2a,b,2b,8b」という文字を使うことがわかり、あとはこれに数字のカギを用いて並べ替えを施せば平文「あいかき゛」が得られる。
最初に挙げた「さいかく」→「5a+b+2c」,「3 2 a」,「1 3 2 4」にしても、文字のカギ、の生成方法を拡張して「3 2 a」に加えて「b」「2 c」も文字のカギとして添えてしまえば、もはや暗号文そのものは情報として必要ない。
つまり、カギにこそ情報が載っているのであって、暗号文はそれの添え物に成り下がっている。

まとめ

この暗号を暗号たらしめている点は、

  1. 対応表による換字
  2. 項の整理による転置
  3. 暗号文と"文字のカギ"への情報の分散(情報の重複あり)

この3点であると考える。そう考えると、古典的な暗号の範疇にある。

暗号の解読

先に言ったとおり、"文字のカギ"のほうが重要な情報になりうる。平文が長くなればなるほど、情報の重要さは"文字のカギ"にかかってくるので、解読者はこれを入手してしまえばよい。"数字のカギ"も一緒に手に入ればよいが、このとき他の同類項がないせいで"文字のカギ"に乗り損ねた情報がある場合のことを考えると、あまり使い物にはならない。
"文字のカギ"が手に入ったなら、暗号文に使われる文字をかなり特定できるので、隣り合う文字の頻度統計から、平文の一部を復元することが出来るだろう。これが"暗号文"のみの入手となった場合、平文全てが生成時に関係しているという利点こそあれど、同類項をまとめる動作によって情報が落ちているので、これをどう係数分割するか、"文字のカギ"なしの状態でこれを解析するには、総当りでいくか、既存の分析統計から「ありそうな係数分割」を推定できるかもしれない。もともとの通信において平文が短いと推定できれば、"文字のカギ"に情報が乗る可能性が低くなるので、この方法に頼らざるを得ない。このとき、文字列の短さは幸いとして働くであろう。

まとめ

またあぶたんちしたきたあんたごうたよりはたそたれっぽいんたじゃなたいですたかねた!

ヒント
      ______
    / −、 −、   \
   /   |  ・|・  | 、    \
  / / `-●−′ \    ヽ   
  |/ ── |  ──   ヽ   |  
  |. ── |  ──    |   | 
  | ── |  ──     |   l
  ヽ (__|____  / /
   \           / /
    l━━(t)━━━━┥
||< 

*p2*文字の式で暗号を作ろう!について
弟((中学2年生))の夏期休業向け数学ワークブックの巻末に掲載されていたもの。
**暗号化アルゴリズム
***0.五十音と単項の対応表を用意する
| |*1|*2|*3|*……|
|*a|あ|か|さ|……|
|*b|い|き|し|……|
|*c|う|く|す|……|
|*d|え|け|せ|……|
|*e|お|こ|そ|……|
"あ"ならば"a"、"き"ならば"2b"、濁点半濁点と句読点が、や行わ行の隙間に押し込めてある。
***2.平文中の文字を対応表に基づいて置き換える
「さいかく」ならば「3a,b,2a,2c」
***3.項を加算記号でつなぐ
「3a,b,2a,2c」ならば「3a+b+2a+c」
***4.同類項をまとめる
「3a+b+2a+2c」ならば「5a+b+2c」
***5.完成
平文「さいかく」を暗号化した暗号文は「5a+b+2c」となる。
**鍵生成アルゴリズム
***0.失われた情報を補うための鍵を作る
「5a+b+2c」をそのまま対応表に基づいて逆変換すると「ないく」になってしまい、平文が得られない。
***1.文字式中の文字について、係数をどう分割するかを添える
この場合、「5a」を「3a+2a」に分割しなければいけないため、「3 2 a」という情報を添える。("文字のカギ"と称する)
***2.正しく分割された文字式に対して、項の順番をどうするか添える
「3a+2a+b+2c」では「さかいく」になってしまうので、これが「さいかく」になるように「1 3 2 4」という情報を添える。("数字のカギ"と称する)
***3.完成
「3 2 a」「1 3 2 4」という情報を、暗号文「5a+b+2c」と共に送出する。
**復号アルゴリズム
***1.係数分割
「3 2 a」を用いて「5a+b+2c」→「3a+2a+b+2c」
***2.順列入れ替え
「1 3 2 4」を用いて「3a+2a+b+2c」→「3a+b+2a+2c」
***3.逆変換
対応表を用いて「3a+b+2a+2c」→「さ+い+か+く」
***4.完成
平文「さいかく」を得る。工程2と3は入れ替えてもよい。
**暗号なの?
***暗号文の衝突
暗号文が全く同じになる例は容易に挙げることが出来る。
アナグラムの関係にある平文は全て同じ暗号文になるし、「あかさか」も「はか」も「なさ」も「や」も「8a」である。
前者は"数字のカギ"、後者は"文字のカギ"がこれらを区別する。
***もしかして情報過多なんじゃ
「あいかき゛」という平文を暗号化すると、
「あいかき゛」→「a+b+2a+2b+8b」→「3a+11b」という暗号文、「1 2 a」「1 2 8 b」という文字のカギ、「1 3 2 4 5」という数字のカギが生成される((はずなんだけど"文字のカギ"が2種類以上の文字に必要な場合の処理が書いてない))ので、これを送出する、が、このとき、平文を得るのに暗号文そのものを使う必要が無い。
「1 2 a」「1 2 8 b」という文字のカギだけで、すでに「a,2a,b,2b,8b」という文字を使うことがわかり、あとはこれに数字のカギを用いて並べ替えを施せば平文「あいかき゛」が得られる。
最初に挙げた「さいかく」→「5a+b+2c」,「3 2 a」,「1 3 2 4」にしても、文字のカギ、の生成方法を拡張して「3 2 a」に加えて「b」「2 c」も文字のカギとして添えてしまえば、もはや暗号文そのものは情報として必要ない。
つまり、カギにこそ情報が載っているのであって、暗号文はそれの添え物に成り下がっている。
***まとめ
この暗号を暗号たらしめている点は、
+対応表による換字
+項の整理による転置
+暗号文と"文字のカギ"への情報の分散(情報の重複あり)
この3点であると考える。そう考えると、古典的な暗号の範疇にある。
**暗号の解読
先に言ったとおり、"文字のカギ"のほうが重要な情報になりうる。平文が長くなればなるほど、情報の重要さは"文字のカギ"にかかってくるので、解読者はこれを入手してしまえばよい。"数字のカギ"も一緒に手に入ればよいが、このとき他の同類項がないせいで"文字のカギ"に乗り損ねた情報がある場合のことを考えると、あまり使い物にはならない。
"文字のカギ"が手に入ったなら、暗号文に使われる文字をかなり特定できるので、隣り合う文字の頻度統計から、平文の一部を復元することが出来るだろう。これが"暗号文"のみの入手となった場合、平文全てが生成時に関係しているという利点こそあれど、同類項をまとめる動作によって情報が落ちているので、これをどう係数分割するか、"文字のカギ"なしの状態でこれを解析するには、総当りでいくか、既存の分析統計から「ありそうな係数分割」を推定できるかもしれない。もともとの通信において平文が短いと推定できれば、"文字のカギ"に情報が乗る可能性が低くなるので、この方法に頼らざるを得ない。このとき、文字列の短さは幸いとして働くであろう。
**まとめ
またあぶたんちしたきたあんたごうたよりはたそたれっぽいんたじゃなたいですたかねた!
***ヒント
>|aa|
     ______
   / −、 −、   \
  /   |  ・|・  | 、    \
 / / `-●−′ \    ヽ   
 |/ ── |  ──   ヽ   |  
 |. ── |  ──    |   | 
 | ── |  ──     |   l
 ヽ (__|____  / /
  \           / /
   l━━(t)━━━━┥
||< 

*1:中学2年生

*2:はずなんだけど"文字のカギ"が2種類以上の文字に必要な場合の処理が書いてない