Algoritmo non identificato per la decodifica RSA in tpm-emulator

0

Durante l'analisi del codice sorgente di tpm-emulator ho scoperto che la decifrazione della chiave RSA utilizza un algoritmo sconosciuto a me.

Il file originale con questo mistero si trova in rsa.c , dove risiede la funzione rsa_private(...) . Il contenuto abbreviato di questa funzione è il seguente:

static int rsa_private(tpm_rsa_private_key_t *key,
                       const uint8_t *in, size_t in_len, uint8_t *out)
{
  ...
  if (!key->p || !key->q || !key->u) {
    /* c = p ^ d mod n */
    tpm_bn_powm(c, p, key->d, key->n);
  } else {
    tpm_bn_init2(m1, key->size / 2);
    tpm_bn_init2(m2, key->size / 2);
    tpm_bn_init2(h, key->size);
    /* m1 = p ^ (d mod (p-1)) mod p */
    tpm_bn_sub_ui(h, key->p, 1);
    tpm_bn_mod(h, key->d, h);
    tpm_bn_powm(m1, p, h, key->p);
    /* m2 = p ^ (d mod (q-1)) mod q */
    tpm_bn_sub_ui(h, key->q, 1);
    tpm_bn_mod(h, key->d, h);
    tpm_bn_powm(m2, p, h, key->q);
    /* h = u * ( m2 - m1 ) mod q */
    tpm_bn_sub(h, m2, m1);
    if (tpm_bn_sgn(h) < 0) tpm_bn_add(h, h, key->q);
    tpm_bn_mul(h, key->u, h);
    tpm_bn_mod(h, h, key->q);
    /* c = m1 + h * p */
    tpm_bn_mul(h, h, key->p);
    tpm_bn_add(c, m1, h);
    tpm_bn_clear(m1);
    tpm_bn_clear(m2);
    tpm_bn_clear(h);
  }
  ...
  return 0;
}

L'idea di base di questa funzione è di decodificare il messaggio di input in ( p in una formula) di dimensione in_len con l'aiuto della chiave privata RSA key (l'esponente è d e il modulo è% codice%).

Mentre questa parte del codice (1 ° algoritmo di decodifica):

/* c = p ^ d mod n */

è chiaro, l'altro possibile algoritmo del codice di decodifica è per me un mistero:

/* m1 = p ^ (d mod (p-1)) mod p */
/* m2 = p ^ (d mod (q-1)) mod q */
/* h = u * ( m2 - m1 ) mod q */
/* c = m1 + h * p */
    
posta Victor Signaevskyi 22.04.2016 - 10:13
fonte

1 risposta

0

Con l'obiettivo di accelerare il processo di decodifica RSA, a volte viene utilizzato il "Teorema dei residui cinesi". La teoria con la pratica sull'uso di questo teorema può essere trovata nell'articolo "Uso del CRT con RSA" .

    
risposta data 22.04.2016 - 12:26
fonte

Leggi altre domande sui tag