Breve introducción a los principios de la criptografía (1): A partir de un ejemplo sencillo, comprender el cifrado y el descifrado

La criptografía es el estudio de cómo transmitir información en secreto.

1. Varios conceptos básicos: texto original, texto cifrado, cifrado, descifrado, algoritmo, clave

Tome un ejemplo simple, como:

Queremos enviar una cadena de información "te amo", para evitar que otros escuchen a escondidas, podemos cifrar esta cadena de información como "j mpwf zpv". 

Entonces: "te amo" se llama texto original , y "j mpwf zpv" se llama texto cifrado .

El método de cifrado es: los caracteres solo pueden ser letras minúsculas en inglés, y el valor de cada carácter aumenta en 1 (es decir, se convierte en el siguiente carácter), y el carácter de espacio permanece sin cambios, es decir: i + 1 = j, v + 1 = w ...

Este método de cifrado se expresa matemáticamente como una función: f(x) = x + k (x es el carácter original, el actual k = 1)

Las funciones de cifrado se denominan algoritmos de cifrado

El valor de k se llama clave (clave). El valor actual de k es 1. Para adaptarse a diferentes ocasiones, el valor de k es variable y puede ser cualquier número.

Si la persona que recibe la información conoce el algoritmo de cifrado y la clave . Luego, la cadena de caracteres se puede descifrar.

La función de descifrado es la función inversa de la función de cifrado: f2(y) = y - k (y es un carácter de texto cifrado, el k actual = 1)

Entonces: j - 1 = i, w - 1 = v, entonces el texto cifrado "j mpwf zpv" se traducirá como "te amo"

Si la cadena de información "te amo" se pasa a la segunda persona, el algoritmo de cifrado permanece sin cambios, la clave se cambia a 2 y el texto cifrado se convierte en "k nqxg aqw".   

Por lo general, el algoritmo de cifrado y descifrado permanece sin cambios y la clave cambia a menudo.

En el ejemplo anterior, el valor de clave utilizado en el proceso de cifrado es igual al valor de clave utilizado en el descifrado. Este algoritmo de cifrado se denomina algoritmo simétrico. Por supuesto, también hay algoritmos en los que la clave de cifrado difiere de la clave de descifrado (llamados algoritmos asimétricos).

Si un algoritmo de cifrado no tiene un algoritmo de descifrado correspondiente, entonces este algoritmo es un algoritmo de cifrado irreversible, llamado cifrado unidireccional, es decir, solo puede convertir el texto original en texto cifrado, pero el texto cifrado no puede convertirse en el texto original. El algoritmo de cifrado irreversible más utilizado es MD5.

Los algoritmos de cifrado unidireccionales se utilizan principalmente para verificación y firma. Por ejemplo: la contraseña de inicio de sesión en el sistema Linux se almacena con cifrado unidireccional. Si la contraseña de inicio de sesión ingresada por el usuario es correcta, la contraseña cifrada será la misma que el texto cifrado almacenado, y la autenticación y el inicio de sesión del usuario serán exitosos. Incluso si el intruso roba el texto cifrado de la contraseña de inicio de sesión en el sistema, no se puede obtener la contraseña original. Si alguien cambia el texto cifrado, se puede saber que el texto cifrado ha sido modificado porque la verificación falla.

En el diseño de sistemas de información, las contraseñas deben almacenarse en la base de datos con cifrado unidireccional, de lo contrario, es muy fácil que se filtren. Sin embargo, lamentablemente, hay una gran cantidad de sistemas en el mercado que escriben las contraseñas originales en la base de datos.Si el administrador del sistema abre la base de datos, puede ver las contraseñas de todos. Porque muchas personas suelen iniciar sesión en diferentes sistemas con la misma contraseña. Si conoce las contraseñas comunes de otras personas, a menudo conoce las contraseñas de los sistemas de otras personas. Por tanto, en Internet, al dar de alta un sistema, no debe utilizar su contraseña habitual.

2. Descifrado de texto cifrado, algoritmo de seguridad, concepto de seguridad

  Mira esta fórmula: secreto = f (sin procesar, clave)

secret es el texto cifrado, f es la función de cifrado, raw es el texto original y key es la clave.

Las personas que escuchan a escondidas a menudo pueden escuchar el texto cifrado.

Si el intruso no conoce el algoritmo de cifrado y la clave, a menudo es difícil descifrar y obtener el texto original.

Si el intruso conoce el algoritmo de cifrado pero no la clave, ¿puede obtener el texto original (descifrarlo)?

Esto depende de la seguridad del algoritmo de cifrado y de la longitud de la clave.

El algoritmo de cifrado simple anterior f (x) = x + k, el método de craqueo también es simple. 

Debido a que conocemos el algoritmo de encriptación, podemos asumir que el valor de k es 0, 1, 2, 3, ... y calcular todos los valores clave posibles para ver si la salida es una palabra significativa. Si es así, obtendremos el valor de k (1 en el ejemplo anterior) y el texto cifrado se descifrará.

El método de descifrar contraseñas una por una se llama descifrado de fuerza bruta .

Si un algoritmo tiene fallas, a menudo se puede descifrar probando estratégicamente una pequeña cantidad de contraseñas.

El algoritmo de cifrado simple anterior f(x) = x + k utiliza el método de fuerza bruta para descifrar docenas de contraseñas. El tiempo de craqueo es inferior a 1 milisegundo y el costo de cálculo es básicamente cero. Este algoritmo de cifrado no es seguro.

¿Qué es un algoritmo de seguridad? La medida del algoritmo de seguridad es que los algoritmos de cifrado y descifrado se hacen públicos, y si el intruso no conoce la clave, el intruso no puede descifrar el algoritmo con enormes recursos informáticos.

¿Qué es seguro? La seguridad es relativa.

Desde un punto de vista económico, es seguro si el costo del craqueo es mayor que los beneficios del craqueo.

 Matemáticamente hablando, casi todos los algoritmos construidos por funciones matemáticas se pueden descifrar, pero el cálculo de algunas funciones matemáticas es demasiado grande. Con la potencia informática actual, puede llevar 100 millones de años. Si el tiempo no es factible, el algoritmo es seguro. Sin embargo, si el poder de cómputo de la computadora aumenta 10 mil millones de veces, solo toma 3 días descifrarlo, y este algoritmo no es seguro nuevamente.

El algoritmo de seguridad a menudo lo propone un científico digital de alto nivel y, después de muchos años de certificación nacional, el algoritmo se hace público a toda la sociedad.

En 1977, la Oficina Nacional de Normas de EE. UU. anunció el algoritmo de seguridad DES. Es un algoritmo simétrico, y en ese momento era un algoritmo seguro. Con el avance de la potencia informática, en la actualidad ya no es un algoritmo seguro. En 2001, Estados Unidos anunció el algoritmo de seguridad AES para reemplazar a DES. Sigue siendo uno de los algoritmos simétricos más populares.

En 1983, el algoritmo RSA inventado por tres profesores del MIT solicitó una patente en los Estados Unidos. Desde entonces, RSA se ha convertido en el algoritmo asimétrico más utilizado y conocido en Internet. El algoritmo RSA es utilizado por los principales sitios web y navegadores. Hoy visitamos el protocolo https utilizado por una gran cantidad de sitios web, y una gran cantidad de ellos utilizan el algoritmo RSA.

Las claves RSA de 512 bits se consideran inseguras; las claves de 768 bits afirman estar a salvo de cualquier otra cosa que no sea la NSA; sin embargo, incluso las claves RSA de 1024 bits no son necesariamente seguras. El departamento de cifrado de seguridad de mi país ha abandonado el bit RSA1024.

La mayoría de los algoritmos de cifrado actualmente populares son propuestos por los Estados Unidos.

Sin embargo, los algoritmos de cifrado están relacionados con la seguridad nacional.

La Administración Estatal de Criptografía de China ha identificado una serie de algoritmos criptográficos domésticos en los últimos años, y los algoritmos públicos incluyen SM2, SM3, SM4 y SM9.   

SM2 es un algoritmo asimétrico que puede reemplazar a RSA.   

SM3 es un algoritmo irreversible que puede reemplazar a MD5. 

SM4 es un algoritmo simétrico que puede reemplazar a AES. 

SM9 es un algoritmo asimétrico lanzado en 2016, que puede reemplazar a RSA.

Dado que los algoritmos de cifrado matemático son reversibles, su seguridad depende de la potencia informática. Frente a las supercomputadoras y las computadoras cuánticas, cuando el poder de cómputo aumenta decenas de miles de millones de veces, ningún algoritmo está a salvo. ¿Hay algún algoritmo más avanzado que no sea matemático? Una de las direcciones que se están explorando actualmente es la seguridad cuántica (algoritmos que no se basan en matemáticas, que se presentarán más adelante).

3. Use la programación de Python para demostrar el algoritmo de cifrado y descifrado más simple y el proceso de craqueo

Use python para implementar el cifrado y descifrado simples en el ejemplo anterior, y juegue.

# 加解密原理: 简单的对称加密演示


def validate(n):
    # 当n值超出字符'a'到'z'的范围,则修正它
    while n < ord('a'):
        n = n + 26
    while n > ord('z'):
        n = n - 26
    return n


# 加密函数
def encrypt(raw, key):
    """ 加密 """
    secret = ''
    for c in raw:
        # 跳过空格
        if c == ' ':
            secret += c
            continue
        # 加密算法: 字符值 + key
        n = ord(c) + key
        n = validate(n)  # 修正超出范围的字符
        secret += chr(n)
    return secret


# 解密函数
def decrypt(secret, key):
    """ 解密 """
    raw = ''
    for c in secret:
        # 跳过空格
        if c == ' ':
            raw += c
            continue
        # 解密算法: 字符值 - key
        n = ord(c) - key
        n = validate(n)  # 修正超出范围的字符
        raw += chr(n)
    return raw


# 破解函数,在已知原文及对应密文的情况下,计算密钥
def crack(raw, secret):
    """ 破解 """
    r1 = raw[0]  # 取原文第一个字符
    s1 = secret[0]  # 取密文的第一个字符

    key = 0
    while 0 <= key < 10000:  # 逐个尝试密码:0到10000
        n = ord(r1) + key  # 加密字符 r1
        n = validate(n)  # 修正超出范围的字符
        if chr(n) == s1:  # 如果与密文相同
            return key
        key = key + 1


# 主程序如下:

key = 1  # 密钥

raw = 'i love you'  # 原文

secret = encrypt(raw, key)  # 使用加密函数、密钥,得到密文

restore = decrypt(secret, key)  # 使用解密函数、密钥,得到原文

print('原文     =  ', raw)
print('密文     =  ', secret)
print('解密后原文=  ', restore)

print('破解得到的密钥  = ', crack(raw, secret))  # 使用破解函数,得到密钥

El programa fuente está completamente anotado, los estudiantes que aprenden Python pueden jugarlo por sí mismos.

resultado de ejecución del programa

原文     =   i love you
密文     =   j mpwf zpv
解密后原文=   i love you
破解得到的密钥  =  1

Supongo que te gusta

Origin blog.csdn.net/c80486/article/details/131819713
Recomendado
Clasificación