• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RSA暗号化の方法(具体的に))

C++でのRSA暗号化の方法

このQ&Aのポイント
  • C++でのファイル暗号化プログラム作成において、RSA暗号化の具体的な方法を知りたい。
  • ディスクファイルまたはメモリ上のbit列を暗号化・復号化する方法について理解が欲しい。
  • 他の暗号化アルゴリズムと比較して、RSA暗号化が適している場合を知りたい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

次のサイトを見るとよいでしょう。 OpenSSLのライブラリーを使って実際にRSA暗号で暗号化、復号をやり、実際に自分で作ってもいます。 http://x68000.q-e-d.net/~68user/net/rsa-1.html 平文はZnの元でなくてはいけないので、それよりも大きい場合は分割して計算します。 また、それよりも小さい場合は暗号化されたデータの解読が簡単にならないように鍵長になるまでパディングを加えてから計算しています。 これには書いていませんが、暗号化されたデータがどの暗号方式を使い、どの鍵を使って暗号化されたかというのが暗号化されたファイルのヘッダなどに含まれると思います。 ちなみに、公開鍵暗号は安全な強度を保つには長い鍵長が必要になり、効率が悪いので通常ファイルなど大きなデータを暗号化する場合は共通鍵暗号とのハイブリッドで使用します。具体的にはファイルを共通鍵暗号で暗号化したあとに暗号化に使った鍵を公開鍵暗号で暗号化して、暗号化されたファイルに添付します。(先に述べたようにヘッダなどに含まれると思います) 強度についてですが、RFC3766の5章 (http://tools.ietf.org/html/rfc3766#section-5) によると、100bitの共通鍵暗号の強度に相当する強度の鍵をRSAで作るには1929bitの鍵を用意しなくてはならないようです。 速度についても次のデータを元に計算すると相当遅いことがわかります。 http://www.madboa.com/geek/openssl/#benchmark-speed RSAのsignを1024bitのデータの暗号化と考えると、次のようになります。 AES 128 bit 58,751.94 KB/sec RSA 1024 bits 3,446.4 KB/sec つまり、圧倒的にAES 128bitの方が高速です。しかも、先の説明の通り、AES128bitの方がRSA 1024 bitsよりもずっと安全です。 というわけで、紹介したサイトを参考にしてみてください。ファイルなど大きなデータを暗号化するときは普通、共通鍵暗号と公開鍵暗号のハイブリッドです。

am72
質問者

お礼

回答ありがとうございます。 ファイルサイズや処理速度を考えて、本当にRSAを採用するか、 再検討することにしました。 ただ、RSAについては勉強する必要があるので、 教えていただいたサイトを参照しようと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.1

RSA 暗号技術の基礎からC++による実装まで という本があります。 実装できます。ファイルも暗号化できます。 長い整数の計算は面倒ですが、この本を読めば理解できます。 がんばって下さい。

am72
質問者

お礼

回答ありがとうございます。 参考にしたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • RSA暗号

    どのトピックかがいまいちわからないのでこのトピックに質問を載せさせて頂きます。 いま、大学の課題でRSA暗号をパソコンで実装する という課題に取り組んでいます。 2桁以上の素数を選んで、その素数から暗号化鍵と復号化鍵を選んでアスキーコードを暗号化するという初歩的なものなので、実用性は全くありませんが… プログラムはできたのですが 暗号化鍵と復号化鍵を生成して 暗号化を行って複合化を行うと 元の平文に戻らない鍵のペアがあるらしいのです。 そういうときってあるのでしょうか?

  • 学校でRSA暗号について勉強して分からないところがありましたので質問し

    学校でRSA暗号について勉強して分からないところがありましたので質問します。 暗号文の作成者をAさん、復号者をBさんとします。 Aさんは暗号文と公開鍵{e,n}を一般に公開しますよね? 暗号文を復号化するには秘密鍵が必要ですが、Bさんはeとnしか分からない(一般の人と得られる情報が同じ)のにどうやって秘密鍵を作成するのですか?nのもとになっている2つの素数がわからないことには秘密鍵が作成できないとおもうのですが… RSA暗号はnの素因数分解が計算量的に困難だから安全なんですよね?Bさんはどうやって2つの素数を特定するのでしょうか? 教えてください。

  • RSA暗号の一般的な素数生成方法

    一般的なRSA暗号について質問です。 RSAでは鍵の生成に、大きな素数 p, q および (p-1)*(q-1)と互いに素となる素数eを使用します。 ただ、p, qの一般的に使用される桁数は1024bit(300桁超)であるため、素数の生成に非常に大きな時間がかかってしまいます。 e は3か65537を使用することで生成のための計算を省くことができますが… RSAで暗号鍵を生成する際に300桁もの素数を毎回計算して生成するのは時間がかかりすぎるため現実的ではないと思いますが、実際にはどのようにして300桁の素数を生成しているのでしょうか。 もしくは、計算済みの素数リストや固定の値を使用しているのでしょうか。 (後者はあり得ないとは思いますが…) 宜しくお願いします。

  • RSAのプログラミング

     卒論でRSAをC++でプログラミングしています。  最初に選ぶ大きな素数p、qにより法鍵Nを作るとしたとき、p、qはどれくらい大きな数でなければなりませんか?  また、公開鍵は素数である必要はありますか?指数鍵もどのくらい大きな数である必要がありますか。  (p、q、公開鍵を一桁代の数字で計算すると、秘密鍵がマイナスにあるときがあったので)  また、「こんな暗号技術もC++で作ってみたら?」というのがあれば教えてください。

  • RSA暗号の解き方

    素数 P=5 Q=11 であり、N=55となります。公開鍵e=3と定義します。一般解d=27となります。 さらに、自然数m=20となります。 (1)自然数mを公開鍵(e,N)を使って暗号Yを求めてください。 (2)さらに、秘密鍵(d,N)を使って暗号Yを復号化し、mと一致することを確認してください。

  • 暗号のアルゴリズムについて

    公開鍵暗号方式・共通鍵暗号方式があるのはわかっているのですが、 共通鍵暗号方式では、送信者・受信者共に同じ鍵を使うため、同じアルゴリズムで暗号化・復号を行うのであろうと予想はつくのです。 (DESや3DESがあると思うのですが、多分共通鍵にDESを使うとかかいてある?) ・質問 公開鍵暗号の場合、 AがBにデータを送る際、Bの公開鍵でデータを暗号化すると思うのですが この時、Bの公開鍵(証明書?)に、RSAで変換 といったことが書かれているのでしょうか? 公開鍵暗号には、楕円曲線暗号、ElGamal暗号があると思うのですが、 もし、Bの公開鍵に、暗号方式が書いていないと、Bの秘密鍵がRSAだった場合復元できなくなってしまうと思うのですが・・・。 初歩的な質問ですみませんが、 どなたかご教授いただけないでしょうか?

  • RSA暗号についてです。

    RSA暗号についてです。 秘密鍵(p,q)=(7,17)の公開鍵の求め方、解答がわかりません。 よろしくおねがいします。 この質問に補足する

  • RSA暗号の実装

    java言語でRSA暗号で自分で入力した数字の暗号化、複合化をしようと思っているんですが、どうしてもうまくいきません。アルゴリズムを教えてもらえませんか?

    • ベストアンサー
    • Java
  • 公開鍵暗号方式のしくみ

    公開鍵暗号方式について、ある解説で、 暗号化鍵と暗号化アルゴリズムは公開するが、復号鍵は秘密にしなければならない。とあります。 送る側の暗号化においては、受信側の公開鍵を使うわけですが、暗号化鍵の内容と暗号化アルゴリズムが分かれば、復号の仕方は推測できたりしないのでしょうか。

  • RSA暗号で初めに選択2つの数について

    RSA暗号で初めに選ぶ数(p,q)で、2つの内どちらかが合成数であるとき、復号化がうまくいかない場合があります。どうして復号化がうまくいかなくのかわかりません。教えてください。

このQ&Aのポイント
  • MFC-6997CDWの初期化できませんE9エラーにより、faxの受信ができない問題が発生しています。
  • Windows10を使用し、無線LANで接続しています。
  • 関連するソフト・アプリは特にありません。また、電話回線の種類は不明です。
回答を見る