0

RSA暗号化の実装を行います。私は知りたい 。RSA暗号化での復号化よりも暗号化が何倍速いか。System.currentTimeMillis();を使用してJavaで経過時間を計算してみます。ただし、暗号化時間= 0.05ミリ秒、復号化時間0.55ミリ秒はその1:11からの平均です。この結果は合理的ではないと思います私のコードは次のとおりです

//here my key has 256 bits
 for (;;) {
            long begin = System.currentTimeMillis();

            for (int i = 0; i < num; i++) {

            decrypt();
            }

            long end = System.currentTimeMillis();

            long time = end - begin;

            if (time >= 10000) {
                System.out.printf("Average Encryption takes: %.2f ms\n",
                        (double) time / num);
                break;
            }

            num *= 2;
        }

p = BigInteger.probablePrime(128, random);
q = BigInteger.probablePrime(128, random);
N = (p.subtract(one)).multiply(q.subtract(one));
e = BigInteger.probablePrime(32, random);
d = e.modInverse(N);

private void encrypt()
{
    C= M.modPow(e,N);
}

private void decrypt()
{
    RM = C.modPow(d, N);
}

これらの結果についての説明をお願いします

4

1 に答える 1

5

RSAを自分で実装しないでください。間違って実装するのは非常に簡単で、3〜4個の古い暗号化攻撃に耐えるバージョンを作成するには数か月かかります。

あなたが今まで書いたすべての暗号コードはおそらく壊れています-TonyArcieri

RSA暗号化はより困難です。RSAを実装する際の「ベストプラクティス」は次のとおりです。RSAを実装しないでください。他の人はあなたができるよりもうまくやっています。-マシューグリーン(ジョンズホプキンス大学)

暗号化が見た目より難しい理由-BruceSchneier、1997年:

ほとんどのシステムは、暗号学者と協力して設計および実装されているのではなく、暗号化を単なる別のコンポーネントと考えているエンジニアによって設計および実装されています。そうではありません。

RSAの産業用実装では、公開鍵の公開指数が短く、通常は65537(0x10001)であるため、誰かの公開鍵を使用した暗号化は秘密鍵を使用した復号化よりも高速です。これは、高速べき乗が使用されている場合に当てはまります( Exponentiation_by_squaringという名前のメソッド)。この操作の時間は、ビット長に線形に依存し、指数の値のビット数に線形に依存します。65537の場合、長さとカウントの両方が小さくなります(17ビット長と2ビットが状態になります)。e11

RSAのような操作の擬似コードでは、eは32ビットであり通常はよりも短いためde、指数を使用した操作は。を使用した場合よりも高速ですd

于 2013-02-18T16:56:44.770 に答える