La sécurité des données est une préoccupation croissante à l’ère numérique.
Sans chiffrement efficace, les informations sensibles risquent d’être exposées aux cyberattaques.
Cet article explore les types de chiffrement, symétrique et asymétrique, et l’utilisation des courbes elliptiques pour renforcer la sécurité cryptographique.
Initiez-vous à la Blockchain et explorez ses principes fondamentaux.

Chiffrement
Le procédé par lequel on souhaite rendre la compréhension d’un document impossible à toute personne non autorisée à pouvoir le lire
Le process est le suivant on va avoir un algorithme de chiffrement (une fonction mathématique) qui est prouvé mathématiquement qu’il est sécurisé. On va injecter dans l’entrée un texte pour le chiffrer avec une certaine clé qui est doit être inconnu pour avoir le résultat qui est le texte chiffré .
Chiffrement symétrique
Ça veut dire quoi le chiffrement symétrique ?
Comme on a vu, dans le processus du chiffrement, on a une clé qui est inconnue, et donc Dans le chiffrement symétrique, la clé de chiffrement est la même que la clé de déchiffrement.
Par exemple si on a deux personnes Alice et Bob qui veulent communiquer d’une façon sécurisée et confidentielle. Alice va prendre le message, il va le chiffrer avec une clé secrète. Ensuite, il va avoir un texte chiffré. Le texte chiffré est envoyé à travers un canal de propagation. Bob, à son tour va prendre le texte chiffré et il va le déchiffrer avec la même clé. Cette clé est appelée la clé privée (exemple chiffre de César, est un algorithme de chiffrement symétrique).
- Avantages
Rapide : Les algorithmes de chiffrement symétrique sont généralement beaucoup plus rapides que les algorithmes de chiffrement asymétrique. Ils sont donc souvent utilisés pour chiffrer de grandes quantités de données.
- Inconvénients
Ne permet pas la signature électronique : Les algorithmes de chiffrement symétrique ne permettent pas la création de signatures numériques.
Problème de distribution de clés : Le principal problème du chiffrement symétrique est la gestion et la distribution des clés. Chaque paire de parties communicantes doit partager une clé secrète, ce qui peut être difficile à gérer en toute sécurité, surtout à grande échelle.
chiffrement asymétrique
Ça veut dire quoi le chiffrement asymétrique ?
La notion de clé va changer dans le chiffrement asymétrique, on aura à la place d’une clé, deux clés. La première clé va servir comme une clé publique et la deuxième, ça sera une clé privée . En général, pour la clé publique, c’est la clé qu’on utilise pour le chiffrement. Et la clé privée pour déchiffrer le message.
On a par exemple Alice et Bob et ils veulent échanger un ensemble de messages tout en éliminant le risque qu’un attaquant va intercepter le message et le lire.
Alice va prendre le texte, il va le chiffrer avec la clé publique de Bob .
La clé publique est connue et donc il n’y a pas de risque que le hacker va faire une grande chose avec cette clé.
Ensuite, on a le texte qui est chiffré. Ce texte est transmis dans un canal de propagation et Bob va avoir besoin de son clé privée, pour le déchiffrer.
On peut l’utiliser ce processus pour générer des signatures. Pour les signatures, on peut faire l’opération inverse. On va utiliser la clé privée pour le chiffrement, mais pour déchiffrer le message, on va avoir besoin de sa clé publique.
- Avantages
Permet la signature électronique : Les algorithmes de chiffrement asymétrique permettent la création de signatures numériques, qui garantissent l’intégrité et l’authenticité des messages. Cela est essentiel pour les transactions électroniques et les communications sécurisées.
Utilise deux clefs distinctes : l’une ne permettant pas de retrouver l’autre.
- Inconvénients
Trop lent pour une utilisation intensive en chiffrement : Les algorithmes de chiffrement asymétrique sont généralement beaucoup plus lents que les algorithmes de chiffrement symétrique. Ils ne sont donc pas idéaux pour chiffrer de grandes quantités de données.
Les courbes elliptiques
Les courbes elliptiques sont des outils mathématiques qui ont été introduits en 1985 par Neal Koblitz et Victor S. Miller . Elles sont utilisées en cryptographie pour améliorer les primitives cryptographiques existantes, par exemple en réduisant la taille des clés cryptographiques, ou de construire de nouvelles primitives cryptographiques qui n’étaient pas connues auparavant.
Ce que l’on peut faire avec les courbes elliptiques :
- Échange de clés :Avec les courbes elliptiques, on peut réaliser un échange de clés de manière sécurisée entre deux parties.
- Transmission de messages :Ces courbes permettent aussi de transmettre des messages chiffrés pour assurer leur confidentialité.
- Signatures électroniques :On peut également s’en servir pour créer des signatures électroniques afin de vérifier l’authenticité et l’intégrité des documents.
- Différence principale avec les algorithmes classiques (exemple :RSA):Ce qui distingue les algorithmes basés sur les courbes elliptiques des algorithmes classiques comme RSA, c’est qu’ici, il faut résoudre un logarithme discret, alors que les classiques reposent sur la factorisation des nombres premiers, un problème qui semble plus simple à traiter par rapport à celui des courbes elliptiques.
implémentation
On va passer directement à un code où on va implémenter la notion de la courbe elliptique en Python.
importrandom
defspecialdiv(x, y, n):
if(x % y) *10==0:
returnint(x / y)
else:
c = (y ** (n -2)) % n
returnx * cc
Importe le module random pour générer des nombres aléatoires après on a défini la fonction specialdiv cette fonction réalise une division spéciale dans le champ fini de modulo n. Si (x % y) * 10 == 0, elle effectue une division entière classique. Sinon, elle utilise l’inverse multiplicatif de y modulo n pour effectuer la division.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def display(self):
print("(%d,%d)" % (self.x, self.y))
La classe Point représente un point sur la courbe elliptique avec des coordonnées x et y .
def addition(self, Point2):
c = specialdiv(Point2.y - self.y, Point2.x - self.x, self.inthe.mod) % self.inthe.mod
x = (c ** 2 - self.x - Point2.x) % self.inthe.mod
y = (c * (self.x - x) - self.y) % self.inthe.mod
return Point(x, y)
Cette méthode additionne deux points sur la courbe elliptique. Elle utilise la fonction specialdiv pour calculer la pente c et ensuite calcule les nouvelles coordonnées x et y .
def doubling(self):
if hasattr(self, 'inthe'):
c = specialdiv(3 * (self.x ** 2) + self.inthe.a, 2 * self.y, self.inthe.mod) % self.inthe.mod
x = (c ** 2 - 2 * self.x) % self.inthe.mod
y = (c * (self.x - x) - self.y) % self.inthe.mod
return Point(x, y)
else:
print( "The point is not in an Elliptic Curve!")
return Point(0, 0)
Cette méthode double un point sur la courbe elliptique . Elle vérifie d’abord si le point appartient à une courbe elliptique en vérifiant l’attribut inthe . Elle utilise ensuite la formule de doublement pour calculer les nouvelles coordonnées x et y .
def nMulti(self, n):
if n == 1:
return self
elif n == 2:
return Point.doubling(self)
else:
return self.addition(Point.nMulti(self, n - 1))
Cette méthode multiplie un point par un scalaire n en utilisant une méthode récursive. Si n est 1 , elle retourne le point lui-même. Si n est 2 , elle retourne le double du point. Pour des valeurs plus grandes, elle utilise l’addition de points.
class Elleptic:
def __init__(self, a, b, mod):
self.a = a
self.b = b
self.mod = mod
self.points = []
def insertPoint(self, Point1):
self.points.append(Point1)
Point1.inthe = self
return self
def calculY(elleptic, x):
return x ** 3 + elleptic.a * x + elleptic.b
La classe Elleptic représente une courbe elliptique définie par les paramètres a , b et un modulo mod . La méthode insertPoint ajoute un point à la courbe et attribue la courbe au point. La méthode calculY calcule la coordonnée y pour une donnée x sur la courbe elliptique.
(
a = int(input('Give the a for elleptic curve: '))
b = int(input('Give the b for elleptic curve: '))
mod = int(input('Give the Prime mod for elleptic curve: '))
e1 = Elleptic(a, b, mod)
print("Elleptic Created with a = " + str(a) + " b = " + str(b) + " and Prime Modulo : " + str(mod))
x_base = int(input('Give the x for the base: '))
y_base = int(input('Give the y for the base: '))
ptBase = Point(x_base, y_base)
print("Point Base Created")
order = int(input('Give the order: '))
e1 = Elleptic(a, b, mod)
e1.insertPoint(ptBase)
Cette section initialise les paramètres de la courbe elliptique, crée un point de base, et insère ce point dans la courbe.
pk = int(input('Give the Private key: '))
data = int(input('Give u r data : '))
pb = ptBase.nMulti(pk)
print("Public Key Generated x = " + str(pb.x) + " y = " + str(pb.y))
Cette section lit la clé privée et les données à signer, et génère la clé publique en multipliant le point de base par la clé privée.
while(True):
tmp = 3
pt_tmp = ptBase.nMulti(tmp)
r = pt_tmp.x % order
if r != 0:
s = specialdiv(data + r * pk, tmp, order)
if s != 0:
sig = Point(r, s)
break
print("U r signature is done - x: " + str(sig.x) + " and y : " + str(sig.y))
Cette section génère une signature en choisissant un nombre aléatoire k et en calculant r et s pour former la signature.
print( "~~~~ DECRYPTION ~~~~")
data = int(input('Give u r data : '))
x_sig = int(input('Give the x for the signature : '))
y_sig = int(input('Give the y for the signature : '))
sig = Point(x_sig, y_sig)
e1.insertPoint(sig)
x_pb = int(input('Give the x for the Public Key : '))
y_pb = int(input('Give the y for the Public Key : '))
pb = Point(x_pb, y_pb)
e1.insertPoint(pb)
if sig.x > 1 or sig.x < order - 1 or sig.y > 1 or sig.y < order - 1:
w = specialdiv(1, sig.y, order)
u = (data * w) % order
v = (sig.x * w) % order
uG = ptBase.nMulti(u)
vQ = pb.nMulti(v)
e1.insertPoint(uG)
e1.insertPoint(vQ)
pt_Final = uG.addition(vQ)
pt_Final.display()
if sig.x == pt_Final.x % order:
print("Signature Valide")
else:
print("Signature Invalide - Modulo Failed")
else:
print("Invalide Signature - Comparaison Failed")
Cette section vérifie la validité de la signature. Elle calcule w , u , et v , puis multiplie le point de base par u et la clé publique par v . Elle additionne les résultats et compare la coordonnée x de la somme avec r pour vérifier la signature.
Notre programme va nous dire de donner le paramètre a et b on va donner par exemple 1 a la variable a et 7 pour le b c’est ici parce qu’on va utiliser l’équation de la courbe elliptique du Bitcoin. Après, il va nous dire de donner un nombre premier. Donc, on a le choix de choisir n’importe quel nombre. Par exemple, on va choisir 67 . On va choisir un point, ou bien un x qui va se servir comme un point de référence. Le 2 . Le 22 pour le y . le point de base, il est créé. Ensuite, on va donner l’ordre 79 , c’est un paramètre aussi qui va être important dans le chiffrement elliptique. Et finalement, on va donner notre clé privée, donc c’est avec cette clé que la signature, ou bien le chiffrement va être fait. Dans notre cas, par exemple, on va mettre la clé privée 2 . Et finalement, on va donner notre donnée qu’on veut qui soit être chiffrée ou bien signée. Par exemple 152 . Donc ici, on va remarquer que la clé publique est générée. C’est un point avec les x et les y, mais aussi la signature qui est générée
Avec le x et le y. Vous remarquez que dans la logique cryptographie elliptique, tout est exprimé sous forme de points et de relations entre les points. Il faut d’abord convertir les données ou sous forme de nombres, ensuite les convertir sous forme de points pour ensuite faire la signature et faire la vérification.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Qu'est-ce que le chiffrement et pourquoi est-il utilisé ?
Comment fonctionne le chiffrement symétrique ?
Quelles sont les différences entre le chiffrement symétrique et asymétrique ?
Quels sont les avantages des courbes elliptiques en cryptographie ?
Comment implémenter les courbes elliptiques en Python ?
Conclusion
Le chiffrement est fondamental pour la sécurité numérique moderne, avec des méthodes variées adaptées à différents besoins. Quel type de chiffrement trouvez-vous le plus pertinent pour vos applications ou recherches futures ?