Principe:
Comprendre l'ordre des portes et des qbits pour préparer trois fonctions quantiques
Infos (cf menu latéral):
🚩 Flaggué! +342 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{z0r_oU_XoR?_j3_N3_m_En_sOr_pLU5}
Le challenge
Un notebook Jupyter
Le nom du dossier est normal: je ne suis déjà pas fan de Python, mais Jupyter peut souvent être encore pire à utiliser 😄
On appréciera au passage la quantité de trucs téléchargés pour faire tourner ce Jupyter Notebook 😉
On appréciera au passage la nouvelle quantité de trucs téléchargés encore une fois!
Apprenons l'algo quantique
Quand on lance un notebook, notre machine va démarrer un serveur local et y accéder via le navigateur. Le reste du challenge se fera donc dans Firefox.
Apprenons d'abord Jupyter!
print à la place
On peut aussi faire un 'Reload Kernel' depuis le notebook lui-même
Fonction f1
Pour créer la porte, qui à qbit0 associe 'not(qbit0)', on pourrait être tenté de cloner le qbit0 puis de l'inverser. Or, si c'est possible en informatique classique, ce n'est pas faisable en informatique quantique!
qbit1 = CXNOT(qbit0) donc cx(0,1)
L'affichage peut être trompeur: il indique que pour l'entrée _0 (qbit0 = 0), on a la sortie '0' avec une probabilité de 1.0. Dis autrement, le qbit0 (entrée) de valeur 0 va donner un qbit1 (sortie) de valeur 0 100% du temps (et même principe pour un qbit0 de 1).
Pour rappel, le qbit1 (sortie, d'où le _) est à gauche (inversion de l'ordre).
XNOT) le qbit1 et voilà!
On a bien 0 -> '1' dans 100% des cas ; 1 -> '0' dans 100% des cas
Simplification?
CXNOT-XNOT un peu étrange, et j'ai cherché à le simplifier
Fonction f2
f1
En fait, j'ai simplement oublié que l'ordre des bits est inversé… Le qbit0 et le qbit1 sont donc inversés dans la bonne réponse (cf archive).
Fonction f3
create_zf donne comme sortie: raté, je suis à l'envers, les portes devraient être sur qbit0 et non qbit1!
On souhaite maintenant appliquer H2 x Zor x H2 à Zf3, soit H2(Zor(H2(Zf3))) Or, le circuit se lit de gauche à droite (quand on le print). Il faut donc d'abord que les qbits passent dans Zf3 (la fonction 'la plus imbriquée') puis dans H2, puis Zor…
Flag: 404CTF{z0r_oU_XoR?_j3_N3_m_En_sOr_pLU5}