わかりました。正直知らない。これは非常に奇妙なシーンです。
私は友人のための概念証明プロジェクトで非常に小さな非対称(RSA)暗号化を復号化しようとしています。 RSAについてよく知らない人のために、ここで重要な事実を見てみましょう。 RSAをすでに知っている場合は、次の段落をスキップしてください。
RSAは非対称暗号化アルゴリズム(公開鍵/秘密鍵暗号化とも呼ばれます)です。これは、公開鍵と秘密鍵の2つの鍵があることを意味します。どちらか一方を暗号化に使用できますが、他のキーのみを復号化に使用できます。したがって、秘密鍵を使用して小さなテキストファイルを暗号化すると、公開鍵でのみ復号化できます。これは鍵交換に便利です。これは、素因数分解と呼ばれる数学的な原理を使用して行われます(実際には2つの素数を乗算するのは簡単ですが、積から元の2つの素数を除外することは困難です)。公開鍵は暗号化できますが、秘密鍵のみを解読できると想像してください。秘密鍵には2つの素数が含まれ、公開鍵には2つの小数の積(モジュラス)が含まれています。公開鍵で暗号化されたデータを復号化する唯一の方法は、モジュラスを再び2つの素数に分解し、秘密鍵をリバースエンジニアリングすることです。それが私がやろうとしているのですが、非常に小さい規模です。
ところで、小人水分解!これが私がすることです。私は128ビットRSAキーを生成しました(非対称暗号化の観点からは小さく、特に私のラップトップの2GHzプロセッサが1秒以内に計算されることを考えるとさらにそうです)。モジュラスを抽出し、16進から10進に変換するときに間違ったコマンドを使用しました(bcを使用するときにbaseを選択するのを忘れました)、結果は97964999429910939982995739699617でした。その後、Factorコマンドを使用しました。
ここで状況が面白くなります。
私がそれを分解すると私は得ます。8答えは私が期待していた2ではありません。
97964999429910939982995739699617:3 3 3 17 433 613 937 858164002128703934431
今考えてみると、なぜ2つの答えが得られなかったのか理解できます。これはRSAキーペアの実際のモジュラスではありません。しかし、それは私が見つけた「バグ」ではありません(そうでなければあなたはこの記事を読んでいません)。
再確認するために、この数を掛けてモジュラスを再取得することにしました。
私はコマンドを使用しました
エコ$((3*3*3*17*433*613*937*858164002128703934431))
まあ、それは確かに開始番号が再生成されます。そうですか? 97964999429910939982995739699617 になってはならない理由はありません。
まあ、私は8628928582186374751という答えを得るまで、それは私の考えでした。
このコマンドがなぜそんなに明らかに間違った答えを返すのかわかりません。どうすれば否定的になりますか?これはローカル数学関数の欠陥ですか? Factorコマンドは正しいです。実際の物理計算機(TI-84)を使用しようとしたときに元の因数分解された値が返されたので、これを確実に知っています。
私はまず私のラップトップ(Kali Linuxを実行)でこのコマンドを試しました。 "uname -rvo"コマンドは、 "4.3.0-kali1-amd64 #1 SMP Debian 4.3.3-5kali4 (2016-01-13) GNU/Linux")を通知します。その後、高校のGentooサーバーにリモートで接続し、同じコマンドを実行しました。繰り返しますが、明らかに間違った答えです。 Unameは「4.1.15-gentoo-r1 #2 SMP Fri Mar 11 15:12:48 CST 2016 GNU/Linux」と述べた。
これは何ですか?
ベストアンサー1
ただシェルの整数演算がオーバーフローしました。
echo $(( 65536 * 65536 * 65536 * 32768 - 1 ))
9223372036854775807
echo $(( 65536 * 65536 * 65536 * 32768 ))
-9223372036854775808
bc
次の任意の精密ツールを使用できます。
bc
3*3*3*17*433*613*937*858164002128703934431
97964999429910939982995739699617
または
echo '3*3*3*17*433*613*937*858164002128703934431' | bc
97964999429910939982995739699617