基本セルオートマトンに基づく暗号化アルゴリズム

こんにちは、Habrの親愛なる居住者! この出版物(そして、おそらく、サイクル)では、暗号化アルゴリズムの1つの実装について説明します。 なぜ実装するのですか? アイデアは新しいものではなく、アイデアが私に属していると言うことは不可能だからです。 しかし、この方法は非常に興味深いので、学ぶ価値があります。



このパートでは、アルゴリズム自体の原理と実装について簡単に説明します。



仕事の本質



このセクションでは、暗号化アルゴリズムについて説明します。 それを説明するために、いくつかの質問に答えます。





内部で何が起こっているのですか? これが最も面白いです! 入力行の各文字を基本的なセルオートマトンに送ります! なんで?



  1. 簡単です。 基本的なセルラオートマトンの操作アルゴリズムは、理解と実装が簡単です。



  2. 速いです。 私の(最も成功していない)実装でさえ、十分迅速に機能します(作業を完了することでこれを確認します)。


これはどうですか? はい、とても簡単です!



  1. 入力文字列を文字に分割します
  2. 各文字のコードは2進数に分割されます
  3. この1と0の文字列をセルオートマトンの分野で書きます
  4. 状態遷移規則を使用してセルオートマトンの進化を計算し、ある時点でフィールドの現在の状態を呼び出し元に返します
  5. この状態を文字コードに変換します
  6. 出力行の文字を「詰め込む」


文字ごとに手順2〜6を繰り返し、出力行の準備ができたら、それを返します。



実装



説明の最後にGitHubへのリンクを示します。



私のアイデアを実装するために、オブジェクト指向のC ++プログラミング言語が使用されました。 わかりやすくするために、最初の部分で強調表示されたすべてのエンティティは、個別のクラスとして実装されました。 彼らは論理名を取得しました-フィールドとルール。



クラスルール



これは、状態遷移ルール​​に関する情報を格納するヘルパークラスであり、ルールを操作するための関数が含まれています。



データ



各インスタンスは、近傍の各ケースに従ってstd :: vectorに格納されたセル状態のみを持ちます。 なぜstd :: vectorなのか? なぜなら、このコンテナにはブール型専用の特殊化があるからです。 同時に、バイト全体ではなく、各要素に1ビットのみが割り当てられます。 このため、占有メモリの量は8倍減少します。



機能





このクラスは使いやすく、理解しやすいです。 しかし、ここに議論のトピックがあります。 Fieldクラスのインスタンスと組み合わせてのみ使用されるため、内部にしないのはなぜですか? この質問に対する明確な答えはありません。 そして本当に、なぜですか? オブジェクトを必要に応じて構築できるように、プライベートにすることができます。 それは魅力的ですが、現時点では非常に独立していると思います。 結局、いくつかの個別の移行ルールを事前定義し、異なる暗号化方法を必要とする文字列をエンコードすることができます。 この便利さをプログラマから奪いたくないので、私の実装では、RuleタイプはFieldタイプとは別に宣言されます。



フィールドクラス



これは、コーディングを直接実行する関数が定義されるメインタイプです。



データ





機能





いくつかのテスト



以下のリンクでプログラムの操作性を自分で確認できます。 ここで、パフォーマンスに関して私にとって興味深いと思われるいくつかの事実を説明します。 覚えておいてください、彼らはこのプログラムだけを特徴づけますが、決してアルゴリズム自体を特徴づけません。 さあ始めましょう!







ルール110を使用してすべてのUnicode文字を暗号化するには、システム上で645,000ティック、つまり約0.645秒(10開始の平均値)かかりました。







ルール110を使用して単一のUnicode文字を暗号化するには、80ティック、つまり約0.00008秒(10開始の平均値)かかりました。







256個すべてのルールを使用するすべてのUnicode文字は、133500000ティックまたは約134秒(10回の開始の平均値)で暗号化されました。







しかし、最も奇妙なことは、正しい結果が発行されることです! 手動でチェックし、いくつかの数字を個人的に暗号化します。







おわりに



私の意見では、 それは非常によくはっきりと判明しました 。 間違いから逃れることはできませんが、罪がないわけではありません。 実装は正しく機能し、その仕事をします。 もちろん、それを使用するのはまだ初期段階であり、多くは完全には実現されていませんが、私はあなたに考えの糧を与えました。








All Articles