web-dev-qa-db-ja.com

簡単な公開鍵暗号アルゴリズムを作成するにはどうすればよいですか?

単純な公開鍵(非対称)暗号化を作成したいと思います。安全性はありません。その背後にある概念を理解したいだけです。たとえば、単純な対称暗号はXORで作成できることを私は知っています。スタックエクスチェンジのスレッドで、トラップドア関数を使用する必要があることがわかりましたが、それらについてはあまりわかりません。私が言いたいのは、バイトのグループを取得し、それらを何らかの方法で分割して公開/秘密鍵を取得できるようにすることです。私は共有秘密のアイデアを得る。たとえば、256の乱数(まったくランダムではない:P)を生成し、それを200と56に分割します。200でXORを実行すると、200でしか復号化できません。 。数値をランダムに分割できるようにしたいので、非対称的に実行できるようにします。

17
user2507230

OK、加算/モジュロ演算に基づく単純なデモアイデアです。

  1. 例256のように、モジュロ値があるとします。これは、公に知られている一般的な値です。

  2. 間隔[1-255]でランダムな秘密秘密鍵を生成するとします(例:pri = 133)。秘密鍵はポケットに入れておきます。

  3. 公開鍵、pub = 256-pri = 123を生成します。この公開鍵(123)は、世界中で共有できます。サードパーティが公開鍵から秘密鍵を計算する方法を知らないと想像してみてください。したがって、彼らは公開鍵(123)しか知りません。

  4. 一般の人が暗号化されたASCIIバイトを送信したいと考えています。彼は自分のバイトを取得し、モジュロ256演算によって公開鍵を追加します。

    encrypted = (input_value + pub) % modulto;
    

たとえば、文字「X」、ASCII code = 88を暗号化された形式で送信したいので、次のように計算します。

(88 + 123) % 256 = 211;
  1. 値211-暗号化されたバイトを送信します。

  2. 秘密鍵を使用して同じスキームで復号化します。

    decrypted = (input_value + pri) % 256 = (211 + 133) % 256 = 88;
    

もちろん、この例で単純な生成ペアを使用することは、公開から秘密鍵を生成するためのよく知られたアルゴリズムのために弱く、モジュロと公開を使用して誰でも簡単に秘密を回復できます。しかし、実際の暗号化では、このアルゴリズムは知られていません。しかし、理論的には、将来的に発見される可能性があります。

26
olegarch

これは純粋数学の分野です。「暗号の数学」という本があります。これは非常に短いですが、良い入門書です。ただし、特にJava(関連する種類の数学のために実際のマシンを対象とし、それに応じて最適化するコンパイラが必要です)では、独自の実装を避けることをお勧めします。これは数学またはコンピュータサイエンスのスタック交換で行われます。

反対票を獲得したので、明確にしておきたいと思います。私は無情ではありませんが、暗号はプログラミングではなく数学の領域にしっかりとあります(離散数学、またはcomp-sciの数学的な側面であっても)、代数的構造、いくつかの統計の十分な理解が必要です、それは確かに魅力的なエリアと私はあなたが読むことをお勧めします。私は上記を意味しますが、あなたが作ったものは何も使用しないでください。これらの暗号を「発明」した人々は、あなたや私が知っている以上に忘れてしまい、せいぜい彼らの言うことを正確に実行します。 Javaでは、スループットが非常に低くなることが予想されます。レジスタ圧力と割り当てを含む最適化は、暗号スループットに大きな利益をもたらします。Javaは、初心者向けのスタックベースです。 。


補遺(約6年後)

Javaは現在いくつかの領域で改善されています(私はコンパイラフェチを持っています、それは適切に奇妙です)しかし振り返ってみると私は正しかったですが、ある種の間違った理由のために、Javaはタイミングを通して攻撃するのがはるかに簡単です、たとえば、使用されているソフトウェアのバージョンを特定するために、トレースコンパイル手法に依存することのいくつかの優れた使用法を見てきました。また、すぐになくなることのないSpectreに対処することも非常に困難です(私はキャッシュが好きです。 ..今言って汚い気がする)

ただし、何よりも、自分でこれを行わないでください!それでおもちゃAT MOST-それは数学の領域に非常にあります、そして私はそれがおそらくより良いと言わなければなりません数字が全体に散らばっている端末を賞賛するのが好きでない限り、紙の上で行われます。

4
Alec Teal

http://en.wikipedia.org/wiki/RSA_(algorithm)

(全体の)インターネットが基づいている標準的なものです

3
James Robinson