Saltar al contenido principal
LibreTexts Español

7.7: Salvia

  • Page ID
    111010
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Desde que Sage comenzó como software para apoyar la investigación en teoría de números, podemos demostrar rápida y fácilmente el funcionamiento interno del algoritmo RSA. Reconocer que, en la práctica, muchos otros detalles como la codificación entre letras y enteros, o la protección de la clave privada de uno, son igualmente importantes para la seguridad de las comunicaciones. Entonces RSA en sí es solo la base teórica.

    Construyendo Claves

    Supondremos que Alice quiere enviarle un mensaje secreto a Bob, junto con la verificación del mensaje (también conocido como mensaje con firma digital). Entonces comenzamos con la construcción de pares de claves (privadas y públicas) tanto para Alice como para Bob. Primero necesitamos dos primos grandes para ambos individuos, y su producto. En la práctica, los valores de\(n\) tendrían cientos de dígitos, en lugar de justo\(21\) como lo hemos hecho aquí.

    Computacionalmente, se\(pq\) puede obtener el valor de la\(\phi\) función Euler para un producto de primos\((p-1)(q-1)\text{,}\), pero también podríamos usar la función incorporada de Sage.

    Ahora podemos crear los exponentes de cifrado y descifrado. Elegimos el exponente de cifrado como un número (pequeño) relativamente primo al valor de\(m\text{.}\) Con Sage podemos factorizar\(m\) rápidamente para ayudarnos a elegir este valor. En la práctica no quisiéramos hacer este cálculo para valores grandes de por\(m\text{,}\) lo que podríamos elegir más fácilmente valores “aleatorios” y verificar el primer valor que es relativamente primo para\(m\text{.}\) El exponente de descifrado es el inverso multiplicativo, mod\(m\text{,}\) del exponente de cifrado. Si construyes un exponente de cifrado incorrecto (no relativamente primo a\(m\)), el cálculo de la inversa multiplicativa fallará (y Sage te lo dirá). Esto lo hacemos dos veces —⸺- tanto para Alice como para Bob.

    En esta etapa, cada individuo publicaría sus valores de\(n\) y\(E\text{,}\) manteniendo\(D\) muy privado y seguro. En la práctica se\(D\) debe proteger en el disco duro del usuario mediante una contraseña que solo el propietario conoce. Para una seguridad aún mayor una persona podría tener solo dos copias de su clave privada, una en una memoria USB que siempre llevan consigo, y una copia de seguridad en su caja de salvia. Cada vez\(D\) que la persona usa necesitaría proporcionar la contraseña. El valor de\(m\) puede ser descartado. Para que conste, aquí están todas las claves:

    Firmar y codificar un mensaje

    Alice va a construir un mensaje como una palabra inglesa con cuatro letras. A partir de estas cuatro letras construiremos un solo número para representar el mensaje en una forma que podamos usar en el algoritmo RSA. La función ord () convertirá una sola letra a su valor de código ASCII, un número entre 0 y 127. Si usamos estos números como “dígitos” mod 128, podemos estar seguros de que la palabra de cuatro letras de Alice codificará a un entero menor que\(128^4=268,435,456\text{.}\) El valor máximo particular no es importante, siempre y cuando sea menor que nuestro valor de\(n\) ya que toda nuestra aritmética posterior es mod\(n\text{.}\) Elegimos un palabra popular de cuatro letras, convertir a ASCII “dígitos” con una comprensión de lista, y luego construir el entero a partir de los dígitos con la base derecha. Observe cómo podemos tratar la palabra como una lista y que el primer dígito de la lista está en el lugar “unos” (decimos que la lista está en orden “little-endian”).

    Primero, Alice firmará su mensaje para proporcionar la verificación del mensaje. Ella usa su clave privada para ello, ya que se trata de un acto que sólo ella debería poder realizar.

    Entonces Alice cifra su mensaje para que sólo Bob pueda leerlo. Para ello, usa la clave pública de Bob. Observe cómo ella ni siquiera tiene que conocer a Bob —por ejemplo, podría haber obtenido la clave pública de Bob de su sitio web o tal vez Bob anunció su clave pública en un anuncio en el New York Times.

    La comunicación de Alice ahora está lista para viajar en cualquier red de comunicaciones, sin importar cuán insegura pueda ser la red, y no importa cuántos fisgones puedan estar monitoreando la red.

    Decodificación y verificación de un mensaje

    Ahora supongamos que el valor de cifrado ha llegado a Bob. Darse cuenta de que Bob puede no conocer a Alice, y darse cuenta de que Bob ni siquiera necesariamente cree que lo que ha recibido se haya originado genuinamente de Alice. Un adversario podría estar tratando de confundir a Bob enviando mensajes que dicen ser de Alice. Primero, Bob debe desenvolver la encyción que Alice ha proporcionado. Este es un acto que solo Bob, como el destinatario previsto, debería poder hacer. Y lo hace usando su clave privada, que sólo él conoce, y que ha mantenido segura.

    Ahora mismo, esto significa muy poco para Bob. Cualquiera podría haberle enviado un mensaje codificado. No obstante, este fue un mensaje que Alice firmó. Vamos a desenvolver la firma del mensaje. Observe que esto usa la clave pública de Alice. Bob no necesita conocer a Alice —por ejemplo, podría obtener la clave de Alice de su sitio web o tal vez Alice anunció su clave pública en un anuncio en el New York Times.

    Bob necesita transformar esta representación entera de nuevo en una palabra con letras. La función chr () convierte los valores de código ASCII en letras, y usamos una comprensión de lista para hacer esto repetidamente.

    Si queremos un resultado un poco más reconocible, podemos combinar las letras en una cadena.

    Bob se complace en obtener un mensaje tan informativo de Alice. ¿Qué hubiera pasado si un impostor hubiera enviado un mensaje ostensiblemente de Alice, o qué pasaría si un adversario hubiera interceptado el mensaje original de Alice y lo hubiera reemplazado por un mensaje manipulado? (A este último se le conoce como un ataque de “hombre en medio”).

    En cualquier caso, la fiesta pícara no podría duplicar la primera acción de Alice —firmando su mensaje—. Si un adversario de alguna manera firma el mensaje, o lo manipula, el paso en el que Bob desenvuelva el fichaje conducirá a la basura total. (¡Pruébalo!) Debido a que Bob recibió una palabra legítima, debidamente capitalizada, tiene confianza en que el mensaje que desfirmó es el mismo que el mensaje que firmó Alice. En la práctica, si Alice envió varios cientos de palabras como su mensaje, las probabilidades de que se anule como texto cohrent son astronómicamente pequeñas.

    ¿Qué hemos demostrado?

    1. Alice puede mandar mensajes que solo Bob puede leer.
    2. Bob puede recibir mensajes secretos de cualquiera.
    3. Alice puede firmar mensajes, para que entonces Bob (o cualquier otra persona) sepa que son genuinamente de Alice.

    Por supuesto, sin hacer nuevas claves, puedes revertir los papeles de Alice y Bob. Y si Carol hace un par clave, puede comunicarse tanto con Alice como con Bob de la misma manera.

    Si desea utilizar en serio el cifrado de clave pública RSA, investigue el software de código abierto GNU Privacy Guard, también conocido como GPG, que está disponible gratuitamente en www.gnupg.org/. Observe que solo tiene sentido usar programas de encriptación que le permitan mirar el código fuente.


    This page titled 7.7: Salvia is shared under a GNU Free Documentation License 1.3 license and was authored, remixed, and/or curated by Thomas W. Judson (Abstract Algebra: Theory and Applications) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.