La necesidad o querencia de compartir información de manera privada es un anhelo tan viejo como la propia humanidad.
Durante años se ha ido avanzando en mecanismos de cifrado que han permitido claves más y más seguras, llegando a la definición matemática de cómo estas claves deben construirse incluso en un mundo post-quantum.
Sin embargo, hay un problema para el que sobre el papel no tenemos solución práctica. ¿Qué sucede si alguien interfiere durante la comunicación de la clave? ¿Cómo podemos estar seguros de que el canal empleado no es vulnerable?
La intuición parece querer decirnos que siempre va a quedar un resquicio no controlable, un margen de duda; pero gracias a las leyes de la mecánica cuántica veremos que somos capaces de diseñar mecanismos que disiparán estas dudas por completo.
En este artículo vamos a entender, de la manera más intuitiva posible, lo que se conoce como Quantum Key Distribution o QKD en inglés.
La distribución cuántica de claves es una disciplina que se beneficia de la mecánica cuántica para crear canales de comunicación en los que los dos interlocutores pueden tener total certeza de que la clave de cifrado no ha sido interceptada por un tercero.
A diferencia de la computación clásica, donde la garantía de privacidad sólo se obtiene mediante mecanismos computacionales como la dificultad de los algoritmos, en un escenario cuántico esta garantía se construye mediante leyes inherentes a la física del sistema, de modo que salvo que dichas leyes cambien, el mecanismo de intercambio de claves será infalible.
El procedimiento original fue planteado por Bennett y Brassard (1984), a quienes por cierto recientemente se les ha concedido el premio Turing por este mismo logro. Dicho procedimiento se fundamenta en tres aspectos diferenciales de los sistemas cuánticos:
3.- La medición de un sistema cuántico es un proceso que altera su estado de manera irreversible (von Neumann, 1932).
Y ahora, como siempre hacemos, vamos a empezar por el principio.
Empezando por el principio - Los cúbits son vectores
Como sabemos, en un sistema clásico la información se representa utilizando lo que se denomina dígitos binarios o binary digits en inglés, es decir, los bits.
Los dígitos binarios o bits pueden tomar valores discretos {0,1}, y los iremos agrupando en colecciones cada vez más grandes formando lo que se conoce como palabra. Uno de los tamaños de palabra más habituales es el byte o agrupación de 8 bits.
De este modo, si tenemos 1 bit podemos representar 2 estados {0, 1}, con 2 bits tendremos 4 estados posibles {00, 01, 10, 11} y con 3 bits serán 8 estados {000, 001, 010, 011, 100, 101, 110, 111}. En general, vemos que nuestros sistemas clásicos van escalando siguiendo una lógica de $2^n$ estados posibles para un número arbitrario de bits = $n$. En un byte por tanto podríamos codificar hasta $2^8$ estados distintos, es decir 256.
En un sistema cuántico las cosas son mucho más interesantes.
A partir de ahora operaremos con cúbits, y los cúbits son vectores en un espacio complejo. En realidad si somos rigurosos deberíamos decir espacio de Hilbert complejo (Hilbert, 1912); pero eso no nos aporta nada para este artículo.
En un escenario sencillo con 1 único cúbit tendremos que los estados base del espacio $\mathbb{C}^2$ son: $$ \lvert 0 \rangle = \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \qquad \lvert 1 \rangle = \begin{pmatrix} 0 \\ 1 \end{pmatrix}.\tag{1} $$
¿Y como escalamos los sistemas cuánticos? Pues para ello utilizamos un concepto algo abstracto pero muy potente conocido como producto tensorial.
El producto tensorial hay que definirlo formalmente desde el álgebra lineal; pero nosotros nos conformaremos con decir que es un medio efectivo para combinar distintos sistemas y describirlos como uno sólo. Dicho de otro modo, es el equivalente cuántico a ir añadiendo bits a nuestra palabra.
De esta manera, si tenemos por ejemplo 2 cúbits, expresaremos el sistema resultado como producto tensorial de ambos, de modo que el conjunto de estados básicos del nuevo sistema $\ket{\psi}\otimes\ket{\phi}$ será:
$$ \lvert 00 \rangle = \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix}, \lvert 01 \rangle = \begin{pmatrix} 0 \\ 1 \\ 0 \\ 0 \end{pmatrix}, \lvert 10 \rangle = \begin{pmatrix} 0 \\ 0 \\ 1 \\ 0 \end{pmatrix}, \lvert 11 \rangle = \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix}. \tag{2}$$
Podríamos ampliar el espacio con más cúbits; pero me interesa que nos quedemos con la idea de que -producto tensorial mediante- podemos ir escalando los sistemas y que estos van ganando dimensiones siguiendo una lógica similar a los sistemas clásicos, es decir, $2^n$ estados básicos posibles para un número arbitrario de cúbits $n$.
Y ahora me dirás "pues ok; pero es una forma rebuscada de hacer lo mismo que vengo haciendo con bits desde el año de la Polka", y tendrías razón si no fuera porque esto es solo una parte muy pequeña de la película cuántica.
La manera más intuitiva de verlo es geométricamente. Para ello vamos a utilizar la esfera de Bloch.
La esfera de Bloch (1946) fue inicialmente planteada para trabajar con sistemas de espín-$\tfrac{1}{2}$; pero también permite representar geométricamente el estado de un sistema cuántico de dos niveles, un cúbit, mediante un vector. En ese sentido, se presta muy bien para visualizar estados puros, caracterizados por sus amplitudes complejas.
Más adelante vamos a explicar mejor el proceso de medida de un sistema cuántico; pero por el momento me interesa que lo veamos como una proyección del vector (el cúbit) en uno de los ejes de la esfera (X, Y, Z).
Si nos fijamos en la imagen anterior, veremos que para un estado $ \lvert 0 \rangle = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$, la probabilidad de medir {0} (proyectar sobre esa parte del recorrido del eje Z) es del 100%. Si preparamos el cúbit en el estado $ \lvert 1 \rangle = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$, de manera análoga, la probabilidad de medir {1} será del 100%.
Si nos damos cuenta, lo que venimos representando hasta ahora y que efectivamente es equivalente a la lógica binaria clásica, son los estados de la base computacional. Dicho de otro modo, los estados en los que terminará nuestro sistema una vez midamos (insisto, proyectemos).
Por cierto, quédate con el tema de las bases porque es algo clave en todo lo que vamos a explicar hoy. Volveremos sobre ello.
La ventaja cuántica
Hasta ahora, aunque de manera muy efectista, parece que estamos representando lo mismo que un sistema clásico ¿De dónde viene pues la llamada ventaja cuántica?
Seguro que has oído hablar del concepto de superposición cuántica, y tal vez te lo hayan explicado como que un procesador cuántico "evalúa muchas soluciones a la vez". En realidad es algo diferente, y obedece al llamado concepto de dualidad y la consiguiente naturaleza ondulatoria de las partículas (De Broglie, 1924).
En este artículo no nos vamos a centrar en la computación, queremos entender el mecanismo para construir canales seguros de intercambio de claves. Por el momento nos vamos a conformar con decir que la superposición nos permite trabajar con todos los posibles estados de nuestro sistema al mismo tiempo, asociados cada uno de ellos a sus correspondientes amplitudes complejas.
Podemos escribir matemáticamente la superposición gracias al álgebra lineal, y es que como vectores que son, los cúbits pueden expresarse mediante una combinación lineal de los vectores de una base.
En un sistema de 2 cúbits lo expresaríamos según la forma de la ecuación a continuación. En los sucesivo sólo usaremos notación de Dirac (1939) por simplicidad:
$$\begin{equation} \ket{\psi}=\alpha\ket{00}+\beta\ket{01}+\gamma\ket{10}+\delta\ket{11}, \end{equation}\tag{3}$$
donde $\alpha$, $\beta$, $\gamma$ y $\delta$ son las amplitudes complejas de los diferentes estados básicos que conforman nuestro estado global. Como tal vez has intuido ya, este estado representa un sistema en superposición.
Por consistencia diremos también que estos coeficientes complejos están normalizados, es decir, la suma del cuadrado de sus módulos siempre ha de ser 1.
Si nos ceñimos a un sistema compuesto por un único cúbit, la imagen de arriba por ejemplo se corresponde con un estado en superposición donde $\ket{0}$ y $\ket{1}$ son equiprobables:
$$\begin{equation} \ket{\psi}=\frac{1}{\sqrt{2}}\ket{0}+\frac{1}{\sqrt{2}}\ket{1}. \end{equation}\tag{4}$$
Sabemos por tanto que si medimos nuestro sistema, iremos obteniendo resultados de la base computacional con igual probabilidad (con una muestra lo suficientemente grande, como en cualquier sistema probabilístico).
Vale; pero ¿Qué es una base?
Llevamos un buen rato hablando de bases, y lo que en esencia queremos decir con esto, de nuevo sin grandes alardes algebraicos, es que un vector se puede describir de diferentes maneras dentro del espacio en el que habita.
Vamos a visualizar la base como un sistema de referencia.
Como ilustra la imagen a continuación, un vector se puede expresar en diferentes sistemas de referencia sin afectar al objeto algebraico en sí. Es como si mirásemos una montaña desde dos laderas distintas. La montaña es exactamente la misma; lo que cambia es nuestra forma de verla.
Ahora volvamos al ejemplo anterior donde nuestro cúbit estaba en un estado en superposición equiprobable respecto a la base computacional.
Mirémoslo con más calma:
¿No diríamos que esta forma de expresar el cúbit se corresponde con una base distinta? ¿Y si en lugar de medir en la base computacional, proyectar sobre el eje Z, medimos sobre la base X, es decir, proyectamos sobre dicho eje?
Vaya, parece que entonces tendríamos probabilidad 100% de conseguir el estado alineado con el recorrido positivo de X. Esto compañeros es efectivamente otra base. Concretamente la base de Hadamard:
$$\begin{equation} \ket{+}=\frac{1}{\sqrt{2}}(\ket{0}+\ket{1}), \quad \ket{-}=\frac{1}{\sqrt{2}}(\ket{0}-\ket{1}). \end{equation}\tag{5}$$
Vemos que si preparamos nuestro cúbit en esta base, es decir alineado con el eje X, tendremos probabilidad 100% de medir en $\ket{+}$ o $\ket{-}$ (dependerá de que recorrido del eje elijamos en la preparación). Existe también una base para el eje Y; pero esa no nos interesa hoy. Si tienes curiosidad, la base Y describe estados con fase imaginaria, fundamentales para trabajar con puertas lógicas, y se expresa matemáticamente así:
$$\begin{equation} \ket{+i}=\frac{1}{\sqrt{2}}(\ket{0}+i\ket{1}), \quad \ket{-i}=\frac{1}{\sqrt{2}}(\ket{0}-i\ket{1}). \end{equation}\tag{6}$$
Recapitulemos hasta aquí. Tenemos un sistema que se compone de cúbits, podemos ir escalando mediante producto tensorial, y podemos representar geométricamente cada cúbit en una esfera alineado a los distintos ejes, en función de la base en la que lo hayamos preparado.
Cuando midamos (proyectemos) acabaremos en uno de los estados de la base con una probabilidad establecida por el nivel de "alineamiento" del cúbit a cada uno de los estados básicos.
Hemos entendido la base (chiste malísimo) sobre la que se fundamenta QKD; pero antes de entrar en harina, necesitamos entender mejor qué significa medir un sistema cuántico, y también qué es eso de que los cúbits no se pueden copiar.
Midiendo sistemas cuánticos - Rompiendo la coherencia
Tal vez te suenen conceptos algo difusos como el colapso de la función de onda, o algunos más aterrizados como la decoherencia.
Si tienes curiosidad, la expresión matemática del estado de un sistema tras una medición nos la dio von Neumann (1932) y dice así:
Todo observable $A$ con descomposición espectral $A=\sum_ka_kP_k$ cumple: $$\begin{equation} \ket{\psi} \longrightarrow\frac{P_k \ket{\psi}}{\sqrt{\langle \psi | P_k | \psi \rangle}}, \end{equation}\tag{7}$$
donde $P_k$ son los operadores de proyección asociados a uno de los autovalores $a_k$, mientras que la probabilidad de obtener el resultado $a_k$ viene dada por $\langle \psi | P_k | \psi \rangle$ (Born, 1926).
Estamos diciendo en esencia que tras medir un valor $a_k$ sobre $\ket{\psi}$, el estado resultante $\ket{\phi}$ es un estado proyectado y normalizado.
Lo cierto es que para explicar el proceso de medida de un sistema cuántico necesitaríamos elevar un punto las matemáticas con operadores, autovalores, autovectores, matrices de densidad y descomposición espectral.
Hoy no vamos a entrar ahí. Nos centraremos en tratar de entender los elementos clave a nivel conceptual.
Diremos de manera informal que un sistema mantiene coherencia cuántica cuando se ha conseguido limitar su interacción con los grados de libertad del entorno (Schlosshauer, 2007).
En este estado el sistema se encuentra en superposición, es decir, es una función de onda (Schrödinger, 1926) que se expresa como una amplitud de probabilidad. Dependiendo de esta, el sistema se proyectará sobre uno de los estados básicos del observable que utilicemos.
Es importante subrayar que este proceso es irreversible, es decir, una vez midamos romperemos la coherencia del sistema, le haremos acoplarse con los grados de libertad del entorno que le rodea y habremos perdido la capacidad de manejar superposición en la base del observable medido.
Puede que hayas leído que los computadores cuánticos necesitan criostatos de dilución con He$_3$ y He$_4$ para llegar a temperaturas de $\mathrm{mK}$, que muchos de ellos operan en condiciones de vacío ultra alto y oscuridad absoluta. Pues esto se debe, entre otras cosas, a la necesidad de preservar la coherencia cuántica durante el mayor tiempo posible.
Sin coherencia no hay superposición, sin superposición no hay amplitudes y sin amplitudes no hay interferencia, que es a la postre la lógica detrás de nuestros algoritmos. Simplificando muchísimo, la cosa se reduce a aplicar interferencia constructiva sobre estados solución y destructiva sobre el resto.
Parecería que esta situación es catastrófica para nuestros intereses y algo a evitar; pero no, en un giro de la trama veremos como esta limitación fundamental a la hora de computar se convierte en nuestro mayor activo a la hora de implementar sistemas QKD.
Las intrusiones van a quedar registradas y van a aflorar de manera orgánica. La propia física del sistema va a asegurarse de ello.
Ahora ya tenemos todas las piezas necesarias para entender cómo.
El teorema de no clonación
Estamos a punto de entrar en materia; pero antes es importante explicar una última característica relevante de los sistemas cuánticos.
En ingeniería de software clásico estamos aburridos de copiar variables, hacer backup de ficheros antes de procesarlos y, en general, de manejar la clonación de elementos de información en el día a día de prácticamente todos nuestros flujos de trabajo.
En sistemas cuánticos esto no es posible. No se puede hacer una copia de un estado cuántico desconocido arbitrario. Es lo que se conoce como teorema de no clonación y fue demostrado en los años 80 por Wootters y Zurek (1982).
Este teorema establece que no existe operador unitario $U$ en la forma: \begin{equation} U\ket{\psi}_A\ket{e}_B=\ket{\psi}_A\ket{\psi}_B, \qquad\mathcal{H}_A=\mathcal{H}_B=\mathcal{H}, \tag{8} \end{equation}
donde $e$ sería un estado inicial vacío o en blanco.
El impacto que esto tiene en el diseño de algoritmos es muy relevante. La información nunca se duplica, sino que se transforma y se redistribuye de manera natural dentro del propio sistema.
El equilibrio ha de ser muy fino, hemos de ir modelando el estado global mediante operaciones diseñadas quirúrgicamente hasta que el resultado final emerge de forma indirecta, a través de interferencia.
De nuevo, esta circunstancia a priori tan limitante jugará a nuestro favor.
Ahora sí - Distribución cuántica de claves
Como decíamos al comienzo de este artículo, el concepto de distribución cuántica de claves fue planteado por primera vez por Bennett y Brassard (1984). Su propuesta consistía en utilizar en nuestro beneficio la naturaleza irreversible del proceso de medición de un sistema cuántico. Es lo que se conoce como protocolo BB84.
Posteriormente la disciplina ha ido evolucionando, se han planteado alternativas con diferentes niveles de refinamiento y, en algunos casos, se ha reformulado el procedimiento para aplicar un enfoque basado en entrelazamiento.
A día de hoy está bastante extendida una categorización de los protocolos QKD en dos grandes grupos, variable discreta (DV) y variable continua (CV).
Los protocolos de variable continua codifican la información en sistemas físicos como campos electromagnéticos y realizan mediciones que dan lugar a valores continuos. Los protocolos de variable discreta por contra codifican la información en estados cuánticos discretos (típicamente cúbits) y las mediciones dan lugar a resultados binarios. Nosotros nos vamos a centrar en estos últimos y vamos a bajar un nivel más en la categorización.
Dentro de los protocolos DV, distinguimos entre los que se conocen como "entanglement-based" o basados en entrelazamiento, y los más clásicos (como BB84) que se denominan "prepare and measure" o preparar y medir.
En los protocolos P&M, una de las partes genera y envía estados cuánticos individuales y la otra mide en distintas bases. En los protocolos EB sin embargo, ambas partes comparten pares de partículas entrelazadas, de modo que las correlaciones entre sus medidas permiten establecer la clave.
En este artículo nos vamos a ceñir a sistemas básicos P&M, ya que ilustran perfectamente la ventaja cuántica a la hora de generar claves de cifrado, y no queremos complicarnos la vida en este punto con implementaciones más complejas.
¿Cómo funciona entonces BB84?
Primero definamos a nuestros actores. Por un lado tenemos a Alice, que actuará como emisora. Después tenemos a Bob, que actuará como receptor. En el papel de villana tendremos a Eve.
Recordemos el escenario. Alice y Bob quieren intercambiar una clave de cifrado, y necesitan absoluta certeza de que dicha clave es segura. Eve por contra intenta hacerse con la clave sin que Alice y Bob se enteren.
1. Preparación (Alice)
Alice va a generar dos secuencias aleatorias:
$$ \text{bits} \in \{0,1\}, \qquad \text{bases} \in \{Z, X\}.\tag{9}$$Y posteriormente va a codificar cada uno de los bits en un cúbit independiente, utilizando como bases de preparación la base computacional (eje Z) o la base de Hadamard (eje X).
Base computacional (eje Z):
$$ \begin{aligned} 0 \;\mapsto\; \ket{0}\, (\text{eje } Z^{+}), \quad 1 \;\mapsto\; \ket{1}\, (\text{eje } Z^{-}). \end{aligned}\tag{10}$$Base Hadamard (eje X):
$$ \begin{aligned} 0 \;\mapsto\; \ket{+}\, (\text{eje } X^{+}), \quad 1 \;\mapsto\; \ket{-}\, (\text{eje } X^{-}). \end{aligned}\tag{11}$$2. Envío (Alice -> Bob)
Alice envía la secuencia de cúbits a Bob a través del canal cuántico. No hay copia posible (recordemos el teorema de no clonación).
3. Medida (Bob)
Para cada cúbit recibido, Bob elige aleatoriamente una base de medida (computacional o Hadamard). Es importante subrayar que Bob no sabe cuál es la base de preparación que ha utilizado Alice.
Aquí empieza una parte clave. Si Bob acierta en la base y utiliza la misma base de preparación que Alice, obtendrá el bit correcto con probabilidad 100%. Recordemos que cuando explicábamos las bases utilizábamos el concepto de proyección. Medir en la base computacional equivale a proyectar sobre el eje Z, mientras que medir en la base de Hadamard equivale a proyectar sobre el eje X.
Si Alice ha preparado $\ket{1}$ en base computacional y nosotros medimos también en base computacional, siempre obtendremos 1 como resultado. No hay otra opción posible.
Si utilizáramos la base de Hadamard para medir, el vector se encontraría desalineado con el eje de nuestra base, de modo que al proyectar sobre el eje X obtendríamos $\ket{+}$ o $\ket{-}$ de manera aleatoria.
4. Comparación de bases (Alice y Bob)
Una vez que Bob ha terminado de medir todos los cúbits, y utilizando un canal clásico convencional, Alice y Bob comparan las bases usadas (no los bits) y se quedan solo con los casos donde la base de preparación ha coincidido con la base de medición.
Esto da lugar a lo que se conoce como clave en crudo.
5. Ataque de Eve (Intercepción y reenvío)
En este punto, que sucedería en realidad cronológicamente en algún momento del paso #2 (envío) Eve entra en la ecuación. Recordemos que no podemos copiar cúbits (teorema de no clonación).
Eve consigue interceptar uno o varios cúbits de los que Alice ha enviado a Bob mediante canal cuántico. Como no conoce la base de preparación, los mide utilizando una base aleatoria (computacional o Hadamard). Anota el resultado y reenvía el cúbit a Bob.
En este punto Alice y Bob no saben que hay un intruso; pero el sistema sí lo sabe. Cada vez que Eve se confunda (y dada una muestra lo suficientemente grande, se confundirá bastante) introducirá un error detectable.
6. Cómo se detecta a Eve
Aunque durante la medición Bob habrá obtenido resultados incorrectos en aquellos casos en los que utilizó una base distinta, esos casos ya han sido descartados. La expectativa por lo tanto es que no haya errores en la clave en crudo.
Sin embargo, si Alice y Bob observan cúbits donde han usado la misma base de preparación y medida y a pesar de todo la medición es errónea, sólo cabe una conclusión posible, y es que un tercero (Eve) ha interceptado el cúbit, lo ha medido en la base errónea (obteniendo un resultado aleatorio 50/50) y lo ha reenviado a Bob.
El cúbit no se puede copiar, y como hemos estudiado previamente la medición es un proceso que altera el estado de manera irreversible. Bob no está midiendo el estado original preparado por Alice, está midiendo un cúbit ya proyectado.
7. Decisión ¿Tenemos un canal seguro?
En la vida real pasan cosas, no hay mecanismo técnico que no falle de vez en cuando, de modo que Alice y Bob habrán acordado de antemano un ratio de error aceptable, es decir, aquel que les permita distinguir entre ruido en el canal y la presencia de Eve.
Siempre y cuando se mantengan dentro de ese umbral, repetirán el proceso hasta conseguir una longitud de clave suficiente. Si la tasa de error se dispara, el canal se declarará no seguro y se abortará la generación de la clave.
Una realidad industrial
Como vemos el protocolo no impide que alguien interfiera en el sistema, eso es imposible de garantizar al 100% incluso en escenarios de seguridad física fuerte; pero sí puede garantizar que si alguien interfiere dejará rastro.
Dado que QKD se utiliza en la fase de intercambio de las claves, y antes de usarlas para realizar el cifrado, sabremos siempre de manera fehaciente si nuestra clave es segura.
Si has llegado hasta aquí, enhorabuena. Déjame despedirme recordando algo que es muy importante tener en cuenta al hablar de esta tecnología. Y es que, a diferencia de otras áreas de la computación cuántica que aún se encuentran en una fase muy experimental, la distribución cuántica de claves es ya una realidad.
Existen sistemas comerciales desplegados en redes de comunicaciones en entornos de seguridad crítica. Es cierto que su aplicación está limitada en distancia y requiere equipamiento e instalaciones que no están al alcance de la mayoría de organizaciones; pero es un cambio de paradigma notable.
Por primera vez la seguridad se fundamenta en las leyes de la física y no en supuestos computacionales.
La seguridad se convierte así en una propiedad sistémica.
Referencias
Bennett, C. H., & Brassard, G. (1984). Quantum cryptography: Public key distribution and coin tossing. In Proceedings of the IEEE International Conference on Computers, Systems and Signal Processing (pp. 175–179).
Bloch, F. (1946). Nuclear induction. Physical Review, 70(7–8), 460–474.
Born, M. (1926). Zur Quantenmechanik der Stoßvorgänge. Zeitschrift für Physik, 37(12), 863–867.
de Broglie, L. (1924). Recherches sur la théorie des quanta [Doctoral dissertation, Université de Paris].
Dirac, P. A. M. (1939). A new notation for quantum mechanics. Mathematical Proceedings of the Cambridge Philosophical Society, 35(3), 416–418.
Hilbert, D. (1912). Grundzüge einer allgemeinen Theorie der linearen Integralgleichungen. Teubner.
Schlosshauer, M. (2007). Decoherence and the quantum-to-classical transition. Springer.
Schrödinger, E. (1926). Quantisierung als Eigenwertproblem. Annalen der Physik, 384(4), 361–376.
von Neumann, J. (1932). Mathematical foundations of quantum mechanics. Princeton University Press.
Wootters, W. K., & Zurek, W. H. (1982). A single quantum cannot be cloned. Nature, 299(5886), 802–803.

Comentarios
Publicar un comentario