RSAの概要


RSA概要RSAプロトコルは説明しませんが、ご覧ください.http://www.di-mgt.com.au/rsa_alg.html. RSAの鍵対生成時間は2つの要素に依存し、第一に、鍵の長さは第二であり、素数のスクリーニング品質は鍵対生成過程全体において、RSAはランダムに2つの大きい素数を選択するが、実際には、コンピュータの聡明さはあるランダムに選択された大きい素数が本当に分解できないかどうかを判断するのに十分ではない.この大きな乱数が素数ではない確率を、コンピュータプログラムでできるだけ限界値(0.0001など)以下に下げることができます.RSA KeyPairは公開鍵と秘密鍵に分けられています.このようにKeyPair:1を使うべきです.あなたは秘密鍵を使って署名します.他の人はあなたの公開鍵で署名を検証します.他の人はあなたの公開鍵で情報M->Mを暗号化します.あなたは秘密鍵で情報M'->Mを復号します.RSAは長年の暗号分析を受けていますが、RSAを使うときは以下のことに注意してください.そうでなければRSAのセキュリティは大幅に割引されます:1、合理的な鍵の長さ(setKeyLength)RSA 1024は今まで安全で、現在のパスワード分析とコンピュータのハードウェア条件の発展によって、今後5-10年で、依然として解読しにくいと推定されています.2,素数決定的選択(setCertaintyOfPrime)の実際の応用では,100を選択すればよい.3、合理的なpadding(setRSAMode)RSAを選ぶには3つのモードがあります.RAW、PKCS、OAEP、日常の応用では、私自身はPKCS(PKCS 1 v 1.5)とOAEP(PKCS 1 v 2.0)の2つのpaddingモードしか使いません.paddingはセキュリティと密接に関連しており、興味のある人はPKCS 1の標準的な議論を見ることができます.ケースRSAUTilsのツールクラスを作成しました.次のクラスのテストコードの一部です.手順は次のとおりです.
  RSAUtils utils =new RSAUtils();

  utils.setKeyLength(1024);

  utils.setCertaintyOfPrime(100);

  utils.setRSAMode(PKCS_RSA_MODE);   //RAW =1  PKCS=2  OAEP=3

  utils.initRSAKeyPair();

  

  //

  RSAKeyParameters mypubkey=utils.getPublicKey();

  BigInteger mypubkey_modulus=mypubkey.getModulus();  

  BigInteger mypubkey_exponent=mypubkey.getExponent();

  System.out.println("##mypubkey modulus ="+mypubkey_modulus.bitLength());

  System.out.println("##mypubkey_modulus ="+mypubkey_modulus.toString());

  System.out.println("##mypubkey exponent ="+mypubkey.getExponent().bitLength());

  System.out.println("##mypubkey_exponent ="+mypubkey_exponent.toString());



  //

  RSAKeyParameters myprivkey=utils.getPrivateKey();

  BigInteger myprivkey_modulus=myprivkey.getModulus();

  System.out.println("##myprivkey modulus ="+myprivkey_modulus.bitLength());

  System.out.println("##myprivkey modulus ="+myprivkey_modulus.toString());

  System.out.println("##myprivkey.getExponent() ="+myprivkey.getExponent().bitLength());

  System.out.println("##myprivkey.getExponent() ="+myprivkey.getExponent());

以下は出力:##mypubkeyのmodulus長=1024##mypubkey_modulus値=938060626666669978261328132049193303148283682666666660997927543724649365705 443512121003217240918513696315361369631313133613131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313pubkeyのexponent長度=2##mypubkey_exponent値=3###myprivkeyのmodulus長=1024###myprivkeyのmodulus値=93806062666666998666666699782613822049193303148383682666666666666666666666666099792724649365 7054435443512121003140918585512136963131313138039111433612212121217228833266242424877621299 01988172406620660550660550505003505003353532202034343434343434344364724242424242424242424242414141414141212121212121212121212121212121212121215617984326530202096506634837755021908277056378455106547##myprivkey.getExponent()長さ=1023##myprivkey.getExponent()値=625373751111332188425421880327955354321891217771110733195169558164329104724702950080913087692026074269074807818845510827616508646021324132367845583835529593977728564945521533011359607538083773084042589132 122882046710764550353,9696315766127476755615238787793707その中で、覚えておいてください.公開鍵のexponentすなわちRSAアルゴリズムにおけるe,eは通常3,17,65537 X.509が65537を推奨し,PEMが3を推奨し,PKCS 1が3または65537を推奨し,一般的には3を選択する.秘密鍵のExponentは秘密鍵の中で最も重要な部分で、それは秘密鍵が公開鍵と区別される場所です!次に、RSAの暗号化、復号化プロセスを見てみましょう.通常、誰かから送られてきたものに勝手に署名しない(潜在的に危険)必要があっても、そのファイルをDigestまたはHMAC処理してから署名してください.RSAがどのように情報を暗号化しているかを説明するために、まずMD 5/SHA 1などの補助アルゴリズム(RSA、RSAwithMD 5、RSAwithSHA 1を単独で使う人はいない)から離れて、RSA自体を単独で見てみましょう.RSAの入力と出力のBlockのサイズは異なり、Blockのサイズはあなたが使用しているRSA Keyの長さとRSAのpaddingモードに依存します.RSAUTils試験例では、RSAに対して3種類の長さのKey(76810242048)と2種類のpaddingモード(PKCS 1.5とOAEP)をそれぞれ設定し、結果は以下の通りである.                InBlockサイズ   OutBlockサイズ  (単位、バイト)768 bit/PCCS        85                96 1024bit/PKCS     117               128 2048bit/PKCS     245               256 768bit/OAEP        54                96 1024bit/OAEP     86               128 2048bit/OAEP     214               256同じ鍵長で、暗号化された暗号文の長さは明文よりも長く、OAEPのInBlock/OutBlockはPKCSのInBlock/OutBlockよりも小さく、エントロピーの観点から、OAEP paddingモードがより多くのエントロピーを導入することを意味し、OAEPはPKCSよりも安全であることがわかります.(実際、なぜPKCSの代わりにOAEPを提案したのか、RSAサイトでOAEPドキュメントを見ることができますhttp://www.rsasecurity.com/rsalabs/node.asp?id=2125)以下、RSAUTilsは私が書いたBouncyCastleに対するツールクラスです.それはBouncyCastleのcryptoの中のRSAEngineをカプセル化しています.基本的に、私はRSAUTilsを単独で使うことはめったにありません.私はDiegestUtilsと組み合わせて使うことが多いです.
 
 
転載先:http://www.cnblogs.com/adylee/archive/2007/11/15/960141.html