こんにちは、Nappleです。
今回は自作した暗号の説明と、その背景で動く理論を数学的に検討していきます。
以降、今回扱う暗号をOCCO(Operators Chain COde)と呼ぶことにします。
・どちらかというと工学(情報工学)の内容かも
・実用性の無視
・誤りがあったり厳密じゃなかったりする場合があります
余談: Mathlogのユーザは当然数学系の人が多い一方で、工学系や自然科学系の記事もある程度存在するように感じる。どれくらいの比率なんでしょう…
厳密な実装とは少々異なりますが、大枠は同じです。
自分もよくわかってないです。説明が煩雑ですみません。
例をあげて考えていきましょう。
まず変換表を用意します。今回は4つの文字で考えます。(
文字 | a | b | c | d |
---|---|---|---|---|
数値 | 0 | 1 | 2 | 3 |
平文:
鍵:
としましょう。
注:平文というのは暗号化したい元の文字列のことです。
区切り値
今回は
オペレータというのは
オペレータは予め決めておくもので、最大
今回の例では
事前の準備が済んだので、ここからは実際に暗号化する作業になります。
まずは平文
さらに、変換表を使って平文を数値にします。
この
目標の値
つまり以下が成り立ってほしいわけです。
この
適当な乱数
・
・
という規則に従って決められます。
これを
しきい値
目標
このようにして数列
求めた
なので、並べると"bbc"が得られます。これが入力の"a"に対応してるというわけですね。
ちなみに、これはただの決めごとなのですが
同様に平文
最終的にこれらを並べた"
やったー!
※復号のアルゴリズムは解説しませんが、(多分)一般に一意な復号が可能です。
・乱数を含んでいるので必ずしも1対1にならない
・自由度が高い
・オペレータの適切な設定方法が不明
・暗号文の長さ(符号化率)が一定でない
・区切り値の適切な設定方法が不明 (実装で解決可能)
・文字の出現確率に偏りがあり解読が容易 (実装で解決可能)
前置きが非常に長くなりましたが、ここからが本題で、欠点の1つ目に上げた「オペレータの適切な設定方法が不明」という問題についてです。
今回の例では有限回のオペレータの適用で必ず暗号化できるようなオペレータを取りました。しかし、オペレータはある程度複雑であるほうが好ましいですし、どのような変換表でもどのような鍵でも動く必要があります。
どのような条件をつければオペレータは適切になるのでしょうか。
うまく行かない例を見てみましょう。
これはどのように
これは
以上のような問題を解決する、オペレータ設定方法を考えましょう。
と、その前に、新たな用語を定義しておきます。
オペレータ集合
任意の初期値
ある
を満たすとき、
また、この
これを使うと、今求めているのは
うまくいかない例で示した2つのオペレータ集合の像はそれぞれ、
(1)
(2)
となるので
ある
を満たすとき、
任意の
注)
また、
ゆえに、
考えてみれば当たり前ですが、こういうことが成り立ちます。
(1)
(2)
(3)
最適な
・任意の
・
でも疲れたので続きは次回以降の記事に。
それではまた(突然の別れ)