2017-03-17 1 views
0

J'apprends le cryptage. J'ai fait quelques clés, encodé un exemple de chaîne ("1234 5678 9012 3456") et ai pu le décoder sans problème. La première partie fonctionne bien.Quelle est la taille d'une clé dont j'ai besoin?

Ensuite, je l'ai essayé avec un échantillon des données réelles que je veux encoder, et j'ai obtenu une erreur "data to large for key size".

La longueur de la chaîne est 14041 caractères, et le produit final peut être encore plus grand, alors comment puis-je le faire fonctionner sans avoir une clé de 1024000 bits ou quelque chose de fou comme ça?

Edit: Comme j'ai déjà appris quelques trucs depuis son ouverture il y a quelques heures, la méthode actuelle avec laquelle je joue utilise RSA, puisque c'est la valeur par défaut pour openssl_pkey_new. Fondamentalement, j'ai une application mobile et je veux être en mesure de mettre à jour les données de l'application de la manière la plus sûre possible. Mon patron est un peu paranoïaque à propos du "nuage". Mon idée est d'utiliser RSA ou quelque chose pour valider l'application avec une page Web API, obtenir les données les plus à jour de la base de données qui a été encodée, et la décoder dans l'application pour le stockage afin d'éviter d'avoir à sortir une nouvelle version chaque fois que les données des applications sont mises à jour (deux fois par an).
Mon patron vraiment n'aime pas l'idée de fuite de données, donc tout ce que je peux faire pour le verrouiller serait bon.

+0

Pourrait aider: http://stackoverflow.com/questions/7143514/how-to-encrypt-a-large-file-in-openssl-using-public-key – CD001

+0

Quelle clé et chiffrement utilisez-vous? Cela ressemble presque à RSA, mais ça pourrait être d'autres. – jww

+0

@jww C'est tout ce que j'ai compris: '$ keysize = 4096; $ res = openssl_pkey_new (array ('private_key_bits' => $ keysize)); ' – AndyD273

Répondre

1

À moins qu'une paire de clés publique/privée ne soit nécessaire, un chiffrement RSA (asymétrique) n'est pas nécessaire. La taille des données asymétriques est limitée à moins de la longueur de la clé et elle est très lente.

Généralement, un algorithme de chiffrement symétrique tel que AES est utilisé pour les données. Une chaîne de longueur de 14041 octets cryptés avec RSA nécessiterait une taille de clé de plus de 112K bits (irréaliste/impossible), une clé AES serait généralement de 128 ou 256 bits.

Si RSA est requis, la stratégie consiste à utiliser un cryptage hybride lorsque les données sont cryptées avec AES et une clé aléatoire générée, puis la clé est cryptée avec RSA.

+0

Après de plus amples recherches je suis assez sûr que la clé que j'ai actuellement est RSA, car cela semble être la valeur par défaut pour openssl_pkey_new(). Je suis encore en train de comprendre cela, et donc je vais faire un peu de lecture sur AES – AndyD273

+2

Ajouter plus à la question sur ce que vous essayez d'accomplir. Voir la mise à jour – zaph

+0

Ok, j'ai ajouté mon objectif final, et le cryptage symétrique semble être la solution. J'ai trouvé [cette page avec un exemple AES-256 pour remplacer mcrypt] (https://paragonie.com/blog/2015/05/if-you-re-typing-word-mcrypt-into-your-code-you- re-doing-it-wrong) mais l'exemple a cet avertissement: 'Cette librairie est dangereuse car elle ne fait pas MAC après cryptage', et je ne sais même pas ce que ça veut dire ... J'ai probablement besoin de fermer cette question et ouvrez-en un nouveau qui pose la bonne question. – AndyD273