Link Search Menu Expand Document
El Libro De Python (24.95 €) 39.95 €

Computación cuántica con qiskit

Veamos como usar un ordenador cuántico para generar una clave privada. Generar una clave privada es simplemente crear un montón de bits aleatorios. El problema es que existen muchas formas de obtener estos bits. Es lo que se conoce como fuente de entropía.

Una fuente de entropía puede ser algo tan cotidiano como el camino recorrido por tu gato durante un día. O algo tan complejo como medir el estado de un qubit en un ordenador cuántico. Pero en ambos casos, lo que obtenemos es lo mismo. Un número aleatorio.

Para nuestro ejemplo usaremos un ordenador cuántico. Las propiedades de la mecánica cuántica nos permiten obtener un valor aleatorio cuando medimos el estado de un qubit.

Los ordenadores cuánticos usan qubits en vez de bits. Estos pueden estar en superposición, lo que significa que están a la vez en el estado 0 y 1 con una probabilidad determinada. Un qubit es algo así como una moneda tirada al aire:

  • 💨 Mientras está en el aire se puede decir que está en ambos estados. Puede ser cara o cruz con 50% de probabilidad.
  • 🪙 Cuando toca el suelo es cuando se revela su estado. Cara o cruz.

Estamos lejos de poder tener un ordenador cuántico en casa pero la librería qiskit nos permite simular uno. También nos permite interactuar con IBM Quantum, donde podemos usar un computador cuántico real en el cloud.

Puedes obtener el API token en https://quantum.ibm.com con el que podrás usar varios minutos al mes el ordenador cuántico de IBM. Obtén tu token ya que será necesario para este ejemplo.

Empezamos importando todo lo que necesitamos.

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit import transpile
from qiskit_ibm_runtime import QiskitRuntimeService

Ahora definimos un circuito para el ordenador cuántico. No olvides poner en token tu token de IBM Quantum. Esto es lo que hace el código:

  • Indicamos que queremos 64 qubits y 64 bits. Idealmente necesitaríamos 256 pero no hay ningún ordenador con tantos qubits.
  • La h indica que usamos una puerta Hadamard. Esta hace que la probabilidad de los qubits de estar en 0 o 1 es la misma.
  • Con measure decimos que queremos medir el estado de los 64 qubits.
  • Realizamos el proceso 4 veces como indica shots. Esto es para generar una clave con 256 bits ya que es 64*4.
q = QuantumRegister(64)
c = ClassicalRegister(64)
circ = QuantumCircuit(q, c)
circ.h(q)
circ.measure(q, c)

service = QiskitRuntimeService(channel="ibm_quantum", token="TU_TOKEN")
backend = service.backend('ibm_kyiv')
qc_basis = transpile(circ, backend)
job = backend.run(qc_basis, shots=4)

counts = job.result().to_dict()["results"][0]["data"]["counts"]
priv_key = ''.join(counts.keys()).replace('0x', '')
print(f"Clave privada: {priv_key}")

Una vez realizado esto ya tienes tu clave privada generada. Esta es un número aleatorio de 256 bits cuya entropía viene de un ordenador cuántico real.

Es importante notar que no debes generar claves privadas así. Al menos por ahora. Aunque la entropía de la clave pueda ser buena, no tienes ninguna garantía de que la clave es privada.

Si tienes el ordenador cuántico en tu casa, la cosa cambia. Pero es probable que no sea el caso.