Principe:
Envoyer deux messages identiques, mais sauter une opération la seconde fois pour deviner bit à bit la clef privée RSA
Une implémentation RSA est glitché,
et il va falloir exploiter mathématiquement ces erreurs pour trouver le flag
D'abord, on explore
les fichiers du challenge (le zip contient aussi mes résolutions)
et on trouve comment stopper l'exécution du script python (envoyer 0x00 )
On cherche en ligne quelques révisions sur le fonctionnement de RSA…
…et on s'assure de savoir déchiffrer un message si on donnait la clef privée d ,
puisqu'on va chercher cette clef en exploitant le glitch d'implémentation
On envoie un même message (msg=2 ) une fois sans sauter de multiplication
(skip = 1024 , au-delà de la taille de d )
et une fois en sautant une multiplication (skip = 1022 ):
le résultat diffère si et seulement si le 1022 e bit de d est un 1
Ce n'est pas pour rien que la limite de messages est de 2 * BITS + 1 :
cela permet d'envoyer deux fois le même message ("avec et sans skip") et de comparer
On itère automatiquement pour reconstituer d bit par bit
On obtient la valeur de d
Et on peut décrypter (nota: le bit 0 est le bit de poid fort de d )
On cable le script PHP au challenge en ligne et le flag tombe:
FCSC{c78e6725a5056d13b63cc4e8a98f6f6f7c6c091ecf0523377035d8faf203b20d}
↩ Retour à la liste des challenges
⇇ Retour à l'accueil