2016-08-11 1 views
1

Je suis nouveau sur ce site, et j'ai vraiment besoin d'aide, mais désolé pour mon anglais, je vais essayer de faire de mon mieux. Je veux créer un programme qui lit en entrée une chaîne de caractères, et à travers une action prédéfinie (je pensais à une somme avec un entier généré aléatoirement) crypte la chaîne en retournant la chaîne cryptée et la clé à décoder dans un deuxième moment.Programme pour crypter/décrypter la chaîne de caractères dans l'assemblage MIPS

Pourriez-vous me donner des suggestions sur la façon de traiter la chaîne?

Je voudrais le faire:

li $v0,8 
la $a0,buffer 
li $a1,1024 
syscall 

move $s7,$a0 

C'est le code pour lire la chaîne. Après que je veux faire:

add $t0,$s5,$s3 

Lorsque j'ajoute un nombre entier aléatoire généré au registre contiennent la chaîne. Après avoir connu les valeurs du nombre aléatoire et de la somme, je peux à nouveau obtenir la chaîne originale avec une soustraction.

Est-ce un bon metod? Merci! L.

+0

["Loi de Schneier"] (https://www.schneier.com/blog/archives/2011/04/schneiers_law.html): N'importe qui, de l'amateur le plus ignorant au meilleur cryptographe, peut créer un algorithme qui il ne peut pas se casser lui-même. – zaph

Répondre

1

Cela dépend quelque peu de l'objectif du chiffrement. Si je comprends bien, l'approche que vous suggérez est essentiellement une forme de César. Bien que cela protégera votre corde dans une certaine mesure contre les observateurs occasionnels, il ne sera certainement pas approprié pour des raisons de sécurité graves. Il est soumis à des attaques par force brute, à des attaques connues en clair et en clair et à des analyses de fréquence. L'idée derrière une attaque en force brute est que, pour une chaîne donnée d'une longueur raisonnable, il y aura presque toujours exactement un changement qui rendra la chaîne logique, donc un attaquant pourrait essayer plusieurs fois différents changements jusqu'à ce qu'il trouvé celui qui a fait la chaîne de sens. Le premier décalage qui rend la chaîne logique est presque certainement le décalage correct. Si vous faites un chiffrement César "classique" (par exemple C = A, D = B, E = C, etc.), il n'y a que 25 décalages possibles, donc en moyenne un attaquant pourrait deviner le texte en clair. 12,5 suppositions (et 25 suppositions dans le pire des cas). Dans un système comme le vôtre, vous devez utiliser une très grande quantité de chiffres énormes pour pouvoir vous défendre même légèrement. Par exemple, si vous ne faites que des décalages de 1 à 100, un attaquant peut reconstruire le texte en 50 suppositions (et 100 suppositions dans le pire des cas), ce qui n'est évidemment pas une défense contre un attaquant motivé. tâche se prête à une parallélisation facile. En supposant que j'ai bien fait mes calculs, même si vous aviez un trillion de shifts possibles et qu'il fallait 100 opérations pour tester un changement particulier, vous pouviez tous les essayer en moins de 7 secondes sur un Intel i7. en moyenne, il faudrait moins de 3,5 secondes pour trouver la bonne réponse en utilisant la force brute. L'idée derrière l'analyse de fréquence est que votre texte conserve les mêmes caractéristiques statistiques que le langage hôte. Par exemple, en anglais, la lettre la plus courante est "e", donc si vous trouvez la lettre la plus courante dans votre texte chiffré, cela correspond probablement à "e". Vous pouvez alors déterminer combien vous avez décalé la chaîne pour obtenir cette sortie particulière. Par exemple, si "g" est la lettre la plus fréquente dans le texte chiffré, vous pouvez deviner que g = e et qu'ils doivent donc avoir décalé le texte de deux.

Une attaque en texte brut connu est l'endroit où un attaquant a un exemple du texte en clair et de son texte chiffré correspondant et peut utiliser cette information pour reconstruire ce que la clé doit avoir été. Une attaque en texte brut choisi est fondamentalement la même chose sauf que l'attaquant peut choisir le texte en clair pour lequel il voit le texte chiffré correspondant. (Notez que cela ne pose problème que si vous réutilisez des clés, surtout si vous le faites de manière prévisible: si vous ne réutilisez jamais les clés, la reconstruction de la clé du texte clair connu/choisi ne donnera aucune information sur l'attaquant. la clé que vous avez utilisée pour d'autres messages).

Je n'ai jamais essayé de le faire en langage assembleur pour dire la vérité, mais si vous voulez une bonne sécurité, vous pouvez envisager AES. Si vous êtes vraiment intéressé par la simplicité de la mise en œuvre et êtes prêt à aller avec quelque chose de moins sécurisé, vous pouvez également aller avec XTEA.

+0

Merci pour votre réponse. Je dois faire un programme de montage de Mips pour un projet, et je peux faire tout ce que je veux. Je voudrais créer un programme qui cache une chaîne, mais rien de sérieux, juste une démonstration de savoir comment gérer la programmation de l'ensemble mips. Le cryptage est un sujet qui m'a toujours intrigué, mais avec mes compétences réelles je ne peux pas faire beaucoup plus que quelque chose qui peut être facilement violé malheureusement. – muserock92