Il n'est pas exagéré de dire que la société de l'information moderne est soutenue par la technologie cryptographique. Néanmoins, nous en profitons sans être particulièrement conscients de la cryptographie. De plus, la cryptographie existe depuis longtemps, environ 100 avant JC. En outre, la cryptographie moderne tente d'assurer une sécurité élevée en utilisant pleinement les mathématiques avancées, et elle sera finalement dérivée de la technologie blockchain.
Quelle est la durée de cette histoire et l'ampleur de la défense! !!
Donc, je suis conscient de l'émo de la cryptographie et j'essaie d'implémenter et de vaincre la crypto en Python pour la maintenance et les mises à jour des connaissances.
La cryptographie est en grande partie composée de trois éléments: ** génération de clé **, ** cryptage ** et ** décryptage **.
En particulier, les clés sont un facteur très important en cryptographie. Je pense plutôt que la technologie cryptographique est une technologie permettant de générer cette clé. En effet, cette clé est utilisée à la fois pour le cryptage et le décryptage et est directement liée à la sécurité.
En fonction de la manière dont la clé est gérée, elle peut être classée en deux types: ** cryptage à clé commune ** et ** cryptage à clé publique **.
Le chiffrement à clé commune utilise la même clé dans les processus de chiffrement et de déchiffrement. Cela a été le courant depuis un certain temps depuis la naissance de la cryptographie, mais cela présente l'inconvénient d'une gestion des clés coûteuse car les clés ne doivent être échangées que par les parties sans être connues d'un tiers.
Afin de surmonter les inconvénients du chiffrement à clé commune, le chiffrement à clé publique réduit considérablement le coût de la gestion des clés en générant deux types de clés publiques, une clé privée et une clé publique, et en exposant littéralement la clé publique. Tu peux le faire. Le cryptage à clé publique est souvent utilisé car il peut être utilisé avec la clé publique ouverte et est compatible avec l'échange d'informations sur Internet. Dans le cas du chiffrement à clé publique, la clé privée et la clé publique doivent avoir une relation de correspondance comme un pointage, et en même temps, la clé privée ne doit pas être déduite de la clé publique. Par conséquent, des mathématiques telles que la factorisation des nombres premiers de grands nombres et des problèmes logarithmiques discrets sont utilisées.
La cryptographie a changé dans la première moitié du 20e siècle. Jusque-là, cela s'appelait du code classique, et casser le code était principalement le travail des linguistes. C'est parce que j'avais l'habitude de créer et de déchiffrer des codes en jouant avec les caractères, comme en décalant l'alphabet de quelques caractères et en utilisant la table de correspondance préparée à l'avance.
Cependant, pendant la Seconde Guerre mondiale, la guerre des codes entre Enigma développée par l'armée allemande et l'équipe de rupture de code dirigée par l'informaticien britannique Turing est devenue l'un des déclencheurs, et la technologie du code est progressivement devenue le travail des mathématiciens et de l'informatique. C'était en train de devenir.
De plus, la cryptographie se développe et déchiffre constamment. En fait, les troupes britanniques qui ont déchiffré Enigma ont caché le fait qu'elles pouvaient le déchiffrer pendant environ 20 ans. En effet, si vous annoncez que vous l'avez craqué, vous risquez de développer des chiffrements plus forts.
Ce n'est qu'une façon de voir les choses, mais à cause de ce contexte, je pense qu'il est relativement facile de comprendre la cryptographie en apprenant de la cryptographie classique à la cryptographie moderne. Il est fortement recommandé d'apprendre en retraçant la généalogie du développement de la technologie cryptographique, car vous pouvez comprendre les différences telles que les domaines qui ont été améliorés.
On dit que le code César est le plus ancien code (?) Du monde. Comme son nom l'indique, il s'agit d'un code créé par Jules César, qui était actif vers le 1er siècle avant JC. Il s'agit de convertir les caractères en décalant seulement 3 caractères lors de l'organisation des caractères par ordre alphabétique. Si la partie chiffrée est implémentée en Python, ce sera comme suit. Le code ASCII est utilisé pour la partie qui décale les caractères.
caesar-cipher.py
def enc(text):
result = ""
for i in range(len(text)):
cha = text[i]
if(cha.isupper()):
result += chr((ord(cha) - 62) % 26 + 65)
else:
result += chr((ord(cha) - 94) % 26 + 97)
return print(result)
Lorsqu'il est réellement crypté, cela ressemble à ceci.
caesar-cipher.py
enc("Caesar")
#Le code: Fdhvdu
Lors du décryptage, l'inverse du cryptage peut être effectué, la mise en œuvre est donc la suivante.
caesar-cipher.py
def dec(text):
result = ""
for i in range(len(text)):
cha = text[i]
if(cha.isupper()):
result += chr((ord(cha) - 42) % 26 + 65)
else:
result += chr((ord(cha) - 74) % 26 + 97)
return print(result)
Une fois exécuté, cela ressemble à ceci.
caesar-cipher.py
dec("Fdhvdu")
#Décryptage: César
La clé du code César était de décaler 3 caractères. Par exemple, s'il y a un espion et qu'il est mal aligné de 3 caractères, c'est la fin du volume. Par conséquent, un code a été conçu pour changer la troisième partie, c'est-à-dire la partie clé. C'est ce qu'on appelle le cryptage par décalage.
La partie cryptage est la suivante. Cette fois, le nombre de caractères à décaler est spécifié comme argument. Vous pouvez créer une fonction pour générer la clé, mais j'ai décidé de la spécifier comme argument car elle renvoie simplement la valeur numérique saisie telle quelle.
shift-cipher.py
def enc(plaintext, rot):
if(rot > 25):
rot = rot % 26
result = ""
for i in range(len(plaintext)):
cha = plaintext[i]
if(cha.isupper()):
result += chr((ord(cha) + rot - 65) % 26 + 65)
else:
result += chr((ord(cha) + rot - 97) % 26 + 97)
return print(result)
Le déchiffrement est l'inverse du chiffrement.
shift-cipher.py
def dec(encryptedtext, rot):
if(rot > 25):
rot = rot % 26
result = ""
for i in range(len(encryptedtext)):
cha = encryptedtext[i]
if(cha.isupper()):
result += chr((ord(cha) - rot - 39) % 26 + 65)
else:
result += chr((ord(cha) - rot - 71) % 26 + 97)
return print(result)
Je prévois d'implémenter et de vaincre le code classique de BC au code moderne de pointe en Python, qui sert également de maintenance et de mise à jour des connaissances. Quand je l'ai essayé, j'ai commencé à voir l'histoire de la technologie cryptographique et les luttes de nos prédécesseurs, et c'est devenu étonnamment amusant.
Pour le moment, notre objectif immédiat est d'atteindre le système de preuve zéro connaissance et le partage de secrets qui apparaissent souvent dans le domaine de la blockchain.
Recommended Posts