大学のプロジェクトで RSA 暗号システム アルゴリズムを実装したいと考えており、使用するプログラミング言語を決定しようとしています。私はCに非常に精通しているので、便利な選択です。ただし、アルゴリズムは非常に大きな数を処理する必要があり (Primality サブルーチンが含まれます)、Python を使用すると実装が改善されると聞いています。そうですか?
前もって感謝します。
大学のプロジェクトで RSA 暗号システム アルゴリズムを実装したいと考えており、使用するプログラミング言語を決定しようとしています。私はCに非常に精通しているので、便利な選択です。ただし、アルゴリズムは非常に大きな数を処理する必要があり (Primality サブルーチンが含まれます)、Python を使用すると実装が改善されると聞いています。そうですか?
前もって感謝します。
もちろん、RSA を実装するために任意の言語を使用できます。アセンブラーも使用できます。問題はおそらく「より良い」実装に関するものではなく、数週間後に結果のコードを見て何が理解しやすいかということかもしれません。
RSA の実装に必要なものを要約してみましょう。
選択した言語がこれらに対してより多くのサポートを提供すればするほど、よりクリーンで理解しやすい結果が得られます。C(++) のような下位レベルの言語は、大きな整数をネイティブでサポートしていませんが、gmpのようなライブラリは必要なものすべてを提供します。Java にはそのための BigInteger クラスがあります。
それでも、Python、Ruby、Haskell など、組み込みの大きな整数をサポートする言語での実装ほど簡単には結果を理解できないでしょう。結果として得られるコードは、使用されているアルゴリズムの教科書の説明とほぼ同じように見えます。マイナス面としては、たとえば高度に最適化された gmp コードよりも遅くなる傾向があります。
しかし、この時点ではおそらくパフォーマンスが求められているものではないため、より高水準の言語を使用することをお勧めします。低レベルのメンテナンスに対処する必要はなく、目の前のタスクに集中できます。最も好きなタスクまたは経験のあるタスクを選択できます。C に精通している場合は、問題ありません。 gmp などの精度ライブラリを使用することもできます。
デフォルトではおそらく言語に組み込まれていない欠落部分については、以下を参照として使用できます。
pow
は3 つ)。他の言語では、 「二乗と乗算」メソッドを試すことができます。あなたはおそらくこれをすでに知っているでしょうが、完全を期すために、「テキストブック RSA」実装と呼ばれるものは、本番環境で使用するには安全ではないことを警告させてください.多くのことはまだ対処されていません. サイドチャネル攻撃を防ぐためのRSA ブラインドがあります。RSAを暗号化スキームとして安全にするには、何らかの形式のパディングも実装する必要があります。キーなどに暗号学的に安全なランダム ジェネレーターを使用することが重要です。
Python が「より良い」実装になるかどうかはわかりません。両方の数値ライブラリを見つけることができ、大きな数を簡単に扱うことができます。Python には、非常に読みやすく使いやすい numpy ライブラリがあるという利点 (imo) があり、一般的に人間が読みやすいため、デバッグが容易になります。
スクリプト言語や C よりも高級な言語 (C# や Java など) を使用すると、プロジェクトにあまり関係のないメモリ管理やその他のタスクを処理する必要がないため、おそらく簡単です。