Pourquoi le texte chiffré RSA me donne des résultats différents pour le même texte

Je crypte les données avec openSSL en utilisant le cryptage RSA, ce qui fonctionne bien. Ma compréhension de RSA est que le cryptage des mêmes données avec la même clé publique vous donnera toujours le même résultat ( comme indiqué ici ou ici ).

Cependant, en utilisant openssl, j’obtiens des résultats différents chaque fois que je répète le cryptage. Par exemple:

➜ ~ echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin | shasum 11b6e058273df1ebe0be5e0596e07a6c51724ca0 - ➜ ~ echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin | shasum 05cb82595f7429ef196189f4e781088597d90eee - 

Alors, pourquoi la sortie n’est-elle pas unique? Est-ce parce que le cryptage RSA est faux ou que openssl fait de la magie?

En fait, j’essaie de concevoir une firebase database qui stocke uniquement les données cryptées RSA. Je voudrais faire des recherches sur les hashsums des informations cryptées, ce qui est impossible si la procédure de cryptage en elle-même n’est pas unique.

Un cryptage RSA sécurisé est implémenté avec un schéma de remplissage approprié, qui inclut un caractère aléatoire. Voir PKCS # 1 ou OAEP pour plus de détails.

Le cryptage RSA crypte le message rempli avec ‘0’ et une chaîne de bit aléatoire. Dans le processus, la chaîne aléatoire est “cachée” dans le cryptogramme par hachage cryptographique et XORing. Lors du déchiffrement, le déchiffrement RSA récupère la chaîne aléatoire du texte chiffré et l’utilise pour récupérer le message. C’est pourquoi vous obtenez un résultat différent avec openssl rsautl pour le même message texte.

OK j’ai compris. RSA par lui-même est déterministe. Cependant, pour obtenir une meilleure sécurité et empêcher les attaquants de deviner les informations chiffrées, le chiffrement ne se fait pas sur les “données” mais sur les “données” + “un motif aléatoire” ( j’aurais dû lire Wikipedia plus attentivement )