Primero debemos suponer que Eva es solo pasiva. Con esto, quiero decir que sinceramente le envía la tarjeta a Bob, y lo que sea que ella le devuelva a Alice es la respuesta de Bob. Si Eve puede alterar los datos en una o ambas direcciones (y su acción permanece sin ser detectada), entonces todo vale.
(Para honrar las tradiciones de larga data, las dos partes honestas involucradas en la conversación se llaman Alice y Bob. En su texto, usted dijo "usted". Mi verdadero nombre no es "Alice", pero responderé como si escribiera que Alice quiere verificar el número de teléfono de Bob.)
La respuesta simple (pero débil) es usar una función hash. Alice escribe en la tarjeta: "devuélveme el hash SHA-256 de tu número de teléfono". SHA-256 es una función hash criptográfica que se considera segura, en lo que respecta a las funciones hash. Calcularlo a mano sería tedioso pero aún factible (eso es alrededor de 2500 operaciones de 32 bits, donde cada operación es una adición, un desplazamiento o rotación de palabras, o una combinación de bits a nivel de bits; Bob debería poder hacerlo en un día o entonces).
Ahora, ¿qué hay de débil en eso? SHA-256, al ser una función hash criptográfica, es resistente a las "preimágenes": esto significa que dada una salida hash, es muy difícil recuperar una entrada correspondiente (ese es el problema que enfrenta Eve). Sin embargo, "muy difícil" significa "el método más fácil es la fuerza bruta: probar posibles entradas hasta que se encuentre una coincidencia". El problema es que la fuerza bruta es fácil aquí: no hay tantos números de teléfono posibles (en América del Norte, eso es 10 dígitos, es decir, solo 10 mil millones). Bob quiere hacer las cosas a mano, pero no podemos suponer que Eva es tan limitada. Una PC básica puede probar algunos millones de hashes SHA-256 por segundo, por lo que Eve se realizará en menos de una hora (menos de 5 minutos si usa una GPU).
Este es un problema genérico: si Bob es determinista (es decir, para un mensaje dado de Alice, siempre devolverá la misma respuesta), Eve puede simularlo. Es decir, Eve sabe todo sobre Bob, excepto el número de teléfono, por lo que prácticamente maneja 10 mil millones de Bobs, que difieren solo por su número de teléfono supuesto; y ella espera que uno de los Bobs virtuales devuelva lo que el verdadero Bob haya devuelto. La falla afecta a muchos tipos de soluciones "inteligentes" que implican nonces aleatorios y cifrado simétrico y todo lo demás. Es una falla fuerte, y su raíz radica en la gran diferencia en el poder de cómputo entre Eve y Bob (ahora, si Bob también tuviera una computadora tan grande como la de Eve, entonces podría usar una cámara lentafunción hash mediante el uso de muchas iteraciones; de eso se trata más o menos el hashing de contraseñas, con el número de teléfono en lugar de la contraseña; ver bcrypt y también esta respuesta ).
Por lo tanto, una solución no débil debe involucrar algo de aleatoriedad por parte de Bob: Bob debe lanzar una moneda o lanzar dados repetidamente e inyectar los valores en sus cálculos. Además, Eve no debe ser capaz de desentrañar lo que hizo Bob, pero Alice debe poder hacerlo, por lo que parte de la información se transmite con confianza de Bob a Alice. Esto se denomina cifrado asimétrico o, al menos, acuerdo de clave asimétrica. El algoritmo más simple de esa clase para calcular, pero aún razonablemente seguro, es RSA con el relleno PKCS # 1 v1.5 . RSA puede usar como exponente público. Entonces el protocolo va así:e=3
Alice genera un gran número entero , donde y son enteros prime de tamaño similar, de manera que el tamaño de es suficiente para garantizar la seguridad (es decir, al menos 1024 bits, a partir de 2012). Además, Alice debe hacer arreglos para que y no sean múltiplos de 3.p q n p - 1 q - 1n=pqpqnp−1q−1
Alice escribe en la tarjeta.n
Bob primeras almohadillas de su número de teléfono en una secuencia de bytes, siempre que , tal como se describe por PKCS # 1 (que significa: 00 02 xx xx xx ... 00 bb bb bb .., donde 'BB' son los bytes que codifican diez el número de teléfono y el 'xx' son valores de bytes aleatorios distintos de cero, para una longitud total de 128 bytes si es un entero de 1024 bits).nnn
Bob interpreta su secuencia de bytes como un valor entero grande (codificación big-endian) y calcula (entonces eso es un par de multiplicaciones con enteros muy grandes, luego una división, el resultado es el resto de la división). Eso todavía se puede hacer a mano (pero, nuevamente, probablemente tomará la mayor parte del día). El resultado es lo que Bob le envía a Alice.m 3 m o d nmm3 mod n
Alice usa su conocimiento de y para recuperar de enviado por Bob. La página de Wikipedia sobre RSA tiene algunas explicaciones razonablemente claras sobre ese proceso. Una vez que Alice tiene , puede quitar el relleno (los 'xx' no son cero, por lo que el primer byte 'bb' puede ubicarse sin ambigüedades) y luego tiene el número de teléfono, que puede comparar con el que tenía.q m m 3 m o d n mpqmm3 mod nm
El cálculo de Alice requerirá una computadora (lo que hace una computadora es siempre elemental y factible a mano, pero una computadora es endiabladamente rápida, por lo que el "factible" puede tomar demasiado tiempo en la práctica; el descifrado RSA a mano tomaría muchos semanas).
(En realidad, podríamos tener un cómputo manual más rápido usando el cifrado McEliece , pero luego la clave pública, lo que Alice escribe en la tarjeta, sería enorme, y una tarjeta simplemente no lo haría; Eve tendría que transportar un libro completo de dígitos)