计算机如何计算或存储 Diffie-Hellman 值?

Luk*_*stv 1 php encryption diffie-hellman

据我所知,通常 Diffie-Hellman 密钥是 2048 位,但我的计算机几乎无法计算 10 位数字。Diffie-Hellman 中有哪些常见数字?

这是我的代码,速度非常慢:

    $gen = 77;
    $mod = 517165;
    
    $saltA = 1233217;
    $saltB = 5173123;
    
    $calculatedSecretKeyA = gmp_mod(gmp_pow($gen, $saltA), $mod);
    
    $calculatedSecretKeyB = gmp_mod(gmp_pow($gen, $saltB), $mod);

    $calcKeyA = gmp_mod(gmp_pow($calculatedSecretKeyB, $saltA), $mod);
    echo $calculatedSecretKeyB . "^" . $saltA . "" . " mod " . $mod . " = " . $calcKeyA;
    
    
    $calcKeyB = gmp_mod(gmp_pow($calculatedSecretKeyA, $saltB), $mod);
    echo $calculatedSecretKeyA . "^" . $saltB . "" . " mod " . $mod . " = " . $calcKeyB;
Run Code Online (Sandbox Code Playgroud)

kel*_*aka 5

使用gmp_powm

gmp_powm ( GMP|int|string $num , GMP|int|string $exponent , GMP|int|string $modulus ) : GMP

对于以下几行。

$calculatedSecretKeyA = gmp_powm($gen, $saltA, $mod);

$calculatedSecretKeyB = gmp_powm($gen, $saltB, $mod);

$calcKeyA = gmp_powm($calculatedSecretKeyB, $saltA, $mod);
    
$calcKeyB = gmp_powm($calculatedSecretKeyA, $saltB, $mod);

Run Code Online (Sandbox Code Playgroud)

它使用平方乘法技术模块化形式。中间值永远不会超过。此外,它还具有复杂性。mod^2O(log n)